sharkd - تحلیل و
تخلیه
تعاملی
ترافیک
شبکه با
استفاده از
JSON-RPC
sharkd
[ -a|--api <socket> ]
[ --foreground ]
[ -C|--config-profile <configuration profile> ]
sharkd -
sharkd -h|--help
sharkd -v|--version
Sharkd
گونهای
دیمن (daemon) از Wireshark
است که یک API
مبتنی بر JSON
را جهت
انجام
تحلیل
پروتکلهای
شبکه فراهم
میکند. این
ابزار از
همان موتور
تشریح (dissection)
موجود در Wireshark
و TShark بهره
میبرد و
دسترسی
برنامهنویسیشده
به
قابلیتهای
تشریح
بستهها،
فیلترسازی
و تحلیل را
میسر
میسازد.
Sharkd
میتواند
در دو حالت
فعالیت کند:
حالت کنسول
(console mode) و حالت
دیمن (daemon mode).
در حالت
کنسول، sharkd
درخواستهای
JSON-RPC را از
ورودی
استاندارد
خوانده و
پاسخها را
در خروجی
استاندارد
مینویسد.
این حالت با
ارسال - به
عنوان
آرگومان یا
با اجرای sharkd
بدون گزینه
-a فعال
میشود.
در حالت
دیمن، sharkd
روی یک Unix domain socket
یا TCP socket به
اتصالات
ورودی گوش
فرا میدهد
و برای هر
کلاینت یک
فرایند
نشست (session process)
جدید ایجاد
(fork) میکند.
این حالت با
مشخص کردن
گزینه -a به
همراه
مشخصات
سوکت فعال
میشود.
درخواستها
و پاسخها
به صورت
اشیاء JSON
کدگذاری
میشوند،
هر کدام در
یک سطر. برای
دیدن فهرست
کامل
فراخوانیهای
متد، بخش JSON-RPC METHODS
را در ادامه
ملاحظه
کنید.
برای
جزئیات
کامل
پیرامون JSON-RPC
API، ببینید:
https://wiki.wireshark.org/Development/sharkd.
هشدار
Sharkd نباید
در معرض
دسترسی
کاربران
غیرقابلاعتماد
قرار گیرد.
دسترسی
فیلترنشده
به sharkd
میتواند
بالقوه
منجر به
افشای
اطلاعات یا
اجرای
دستورات
دلخواه
شود.
-a <socket>, --api <socket>
گوش دادن
روی سوکت
مشخصشده
برای
اتصالات
ورودی
کلاینت به
جای خواندن
از کنسول.
هنگام
استفاده از
این گزینه،
sharkd به عنوان
یک دیمن (daemon)
اجرا
میشود و
برای هر
اتصال
کلاینت، یک
فرایند
نشست (session) جدید
فورک (fork)
میکند.
انواع
سوکتهای
پشتیبانیشده:
unix:path
گوش دادن
روی یک سوکت
دامنه
یونیکس (Unix domain socket)
در path. برای
مثال، unix:/tmp/sharkd.sock.
در لینوکس،
سوکتهای
انتزاعی (abstract sockets)
با قرار
دادن
پیشوند @ در
ابتدای نام
پشتیبانی
میشوند،
مانند unix:@sharkd؛
سوکتهای
انتزاعی
تنها از
اتصالهای
همتایانی
با UID مؤثر
یکسان
پشتیبانی
میکنند.
سوکتهای
دامنه
یونیکس در
ویندوز ۱۰
نسخه ۱۸۰۳ و
بالاتر، از
جمله Windows Server 2019 در
دسترس
هستند.
tcp:address:port
گوش دادن
روی یک سوکت TCP
متصل به address
در port. برای
مثال، tcp:127.0.0.1:4446.
برای
آدرسهای IPv6،
آدرس را
داخل براکت
قرار دهید،
مانند tcp:[[::1]:5678.
بنا بر
دلایل
امنیتی،
سوکتهای TCP
بهطور
پیشفرض
تنها در
ساختهای
ویندوز در
دسترس
هستند و فقط
از
آدرسهای
لوپبک (loopback)
پشتیبانی
میشود،
یعنی یک
آدرس IPv4 در
فضای آدرس
127.0.0.0/8 یا آدرس
لوپبک IPv6 به
صورت ::1.
اگر هیچ
گزینهٔ -a
ارائه
نشود، یا
اگر sharkd -
استفاده
شود، sharkd
دستورها را
از طریق
کنسول
(ورودی
استاندارد)
میپذیرد.
--foreground
هنگام
اجرا در
حالت دیمن،
از ترمینال
کنترلکننده
جدا نشود.
بهطور
پیشفرض،
زمانی که
سوکتی با
گزینهٔ -a
مشخص شده
باشد، sharkd به
پسزمینه
فورک
میشود.
-C <configuration profile>, --config-profile
<configuration profile>
شروع با
نمایهٔ
پیکربندی
(configuration profile)
مشخصشده.
-h, --help
چاپ
شماره نسخه
و گزینهها
و سپس خروج.
-v, --version
چاپ
اطلاعات
کامل نسخه و
سپس خروج.
--log-level <level>
تنظیم
سطح فعال
ثبت گزارش (log level).
سطوح
پشتیبانیشده
از کمترین
به بیشترین
عبارتند از
"noisy"، "debug"، "info"،
"message"، "warning"، "critical"
و "error".
پیامهای
مربوط به هر
سطح و سطوح
بالاتر از
آن چاپ
خواهند شد؛
برای مثال
"warning"
پیامهای
"warning"، "critical" و "error"
را چاپ
میکند و "noisy"
همهٔ
پیامها را
چاپ خواهد
کرد. سطوح
نسبت به
بزرگی و
کوچکی حروف
حساس
نیستند.
--log-fatal <level>
متوقف
کردن
برنامه در
صورتی که هر
پیامی در
سطح
مشخصشده
یا بالاتر
ثبت شود.
برای مثال،
"warning" با بروز
هر یک از
پیامهای
"warning"، "critical" یا
"error" برنامه
را متوقف
میکند.
--log-fatal-count <count>
تعداد
پیامهای
گزارش
مرگبار (fatal) که
میتوانند
پیش از
متوقف شدن
برنامه ثبت
شوند.
--log-domains <list>
تنها چاپ
پیامها
برای
دامنههای
گزارش
مشخصشده،
مانند "GUI,Epan,sshdump".
فهرست
دامنهها
باید با
کاما (,) جدا
شود.
میتواند
با قرار
گرفتن "!" به
عنوان
نویسه اول
نفی شود
(تطابق
معکوس
میشود).
--log-debug <list>
وادار
کردن
دامنههای
مشخصشده
به ثبت
گزارش در
سطح "debug".
فهرست
دامنهها
باید با
کاما (,) جدا
شود.
میتواند
با قرار
گرفتن "!" به
عنوان
نویسه اول
نفی شود
(تطابق
معکوس
میشود).
--log-noisy <list>
وادار
کردن
دامنههای
مشخصشده
به ثبت
گزارش در
سطح "noisy".
فهرست
دامنهها
باید با
کاما (,) جدا
شود.
میتواند
با قرار
گرفتن "!" به
عنوان
نویسه اول
نفی شود
(تطابق
معکوس
میشود).
--log-fatal-domains <list>
متوقف
کردن
برنامه در
صورتی که هر
پیامی برای
دامنههای
گزارش
مشخصشده
ثبت شود.
فهرست
دامنهها
باید با
کاما (,) جدا
شود.
--log-file <path>
نوشتن
پیامهای
گزارش و
خروجی stderr در
فایل
مشخصشده.
Sharkd
درخواستهای
JSON-RPC جداشده با
خط جدید را
میپذیرد.
هر درخواست
باید شامل
فیلد jsonrpc با
مقدار "2.0"،
فیلد method و
فیلد id باشد.
متدهای زیر
پشتیبانی
میشوند:
analyse
تحلیل
فایل ضبط
بارگذاریشده
و
بازگرداندن
اطلاعات
خلاصه.
bye
پایان
دادن به
نشست.
check
بررسی یا
کامپایل یک
فیلتر
نمایش (display filter).
complete
ارائه
پیشنهادهای
تکمیل نام
فیلد.
download
دانلود
دادههای
ضبطشده یا
اشیاء
بازسازیشده
(reassembled).
dumpconf
تخلیه
مقادیر
فعلی
ترجیحات (preferences).
field
دریافت
اطلاعات
درباره یک
فیلد مشخص
از فیلتر
نمایش.
fields
فهرست
کردن تمام
فیلدهای
موجود
فیلتر
نمایش.
follow
دنبال
کردن یک
جریان (TCP، UDP، HTTP
و غیره).
frame
دریافت
اطلاعات
دقیق
درباره یک
فریم مشخص.
frames
دریافت
فهرستی از
فریمها
(بستهها) از
فایل ضبط
بارگذاریشده.
info
دریافت
اطلاعات
درباره
dissectorها، tapها و
آمارهای
موجود.
intervals
دریافت
دادههای
بازه زمانی
فریم برای
فایل ضبط
بارگذاریشده.
iograph
دریافت
دادههای
نمودار I/O
برای فایل
ضبط
بارگذاریشده.
load
بارگذاری
یک فایل ضبط
برای
تحلیل.
setcomment
تنظیم
یادداشت
روی یک فریم
مشخص.
setconf
تنظیم
مقدار
ترجیحات Wireshark.
status
دریافت
وضعیت فایل
ضبط
بارگذاریشده
فعلی.
tap
اجرای یک
tap روی فایل
ضبط
بارگذاریشده.
برای
اجرای sharkd در
حالت
کنسول:
برای
اجرای sharkd به
صورت یک
دیمن که روی
یک Unix domain socket گوش
میدهد:
sharkd -a unix:/tmp/sharkd.sock
برای
اجرای sharkd به
صورت یک
دیمن با یک
نمایهٔ
پیکربندی (profile)
مشخص:
sharkd -a unix:/tmp/sharkd.sock -C myprofile
برای نگه
داشتن دیمن
در
پیشزمینه
جهت
اشکالزدایی:
sharkd -a unix:/tmp/sharkd.sock --foreground
یک نمونه
از نشست
کنسول برای
بارگذاری
یک فایل و
دریافت
وضعیت آن:
$ echo '{"jsonrpc":"2.0","id":1,"method":"load","params":{"file":"/path/to/capture.pcapng"}}' | sharkd -
$ echo '{"jsonrpc":"2.0","id":2,"method":"status"}' | sharkd -
WIRESHARK_CONFIG_DIR
این
متغیر
محیطی مکان
فایلهای
پیکربندی
شخصی را
بازنویسی
میکند. در
سیستمهای
سازگار با UNIX،
مانند Linux، macOS،
\*BSD، Solaris و AIX،
مقدار
پیشفرض آن
$XDG_CONFIG_HOME/wireshark است (یا
در صورتی که
آن
دایرکتوری
وجود
نداشته
باشد اما
$HOME/.wireshark موجود
باشد، $HOME/.wireshark)؛
این مسیر
معمولاً
$HOME/.config/wireshark است. در
Windows، مقدار
پیشفرض آن
%APPDATA%\Wireshark است (یا
اگر %APPDATA% تعریف
نشده باشد،
%USERPROFILE%\Application Data\Wireshark). از Wireshark
3.0 به بعد در
دسترس است.
WIRESHARK_DEBUG_WMEM_OVERRIDE
تنظیم
این متغیر
محیطی،
چارچوب wmem را
وادار
میکند تا
برای
تمامی
تخصیصها،
بدون در نظر
گرفتن
اینکه
معمولاً چه
بکاندی
توسط کد
مشخص شده
است، از
بکاند
تخصیصدهندهٔ
(allocator backend)
تعیینشده
استفاده
کند. این
متغیر
عمدتاً
هنگام
آزمایش یا
اشکالزدایی
برای
توسعهدهندگان
مفید است.
برای
جزئیات به
README.wmem در توزیع
کد منبع
مراجعه
کنید.
WIRESHARK_RUN_FROM_BUILD_DIRECTORY
این
متغیر
محیطی باعث
میشود
پلاگینها
و سایر
فایلهای
داده به جای
مکانهای
استاندارد،
از
دایرکتوری
ساخت (محل
کامپایل
برنامه)
بارگذاری
شوند. این
متغیر در
سیستمهای
سازگار با UNIX،
مانند Linux، macOS،
\*BSD، Solaris و AIX،
هنگامی که
برنامه با
مجوزهای root
(یا setuid) اجرا
میشود،
هیچ اثری
ندارد.
WIRESHARK_DATA_DIR
این
متغیر
محیطی باعث
میشود
فایلهای
مختلف داده
از
دایرکتوری
دیگری غیر
از
مکانهای
استاندارد
بارگذاری
شوند. این
متغیر در
سیستمهای
سازگار با UNIX،
هنگامی که
برنامه با
مجوزهای root
(یا setuid) اجرا
میشود،
هیچ اثری
ندارد.
WIRESHARK_EXTCAP_DIR
این
متغیر
محیطی باعث
میشود
برنامهها
و
اسکریپتهای
مختلف extcap از
دایرکتوری
دیگری غیر
از
مکانهای
استاندارد
اجرا شوند.
این متغیر
در
سیستمهای
سازگار با UNIX،
هنگامی که
برنامه با
مجوزهای root
(یا setuid) اجرا
میشود،
هیچ اثری
ندارد.
WIRESHARK_PLUGIN_DIR
این
متغیر
محیطی باعث
میشود
پلاگینهای
مختلف از
دایرکتوری
دیگری غیر
از
مکانهای
استاندارد
بارگذاری
شوند. این
متغیر در
سیستمهای
سازگار با UNIX،
هنگامی که
برنامه با
مجوزهای root
(یا setuid) اجرا
میشود،
هیچ اثری
ندارد.
ERF_RECORDS_TO_CHECK
این
متغیر
محیطی
تعداد
رکوردهای ERF
بررسیشده
را هنگام
تصمیمگیری
دربارهٔ
اینکه آیا
یک فایل
واقعاً در
قالب ERF است یا
خیر، کنترل
میکند.
تنظیم این
متغیر
محیطی روی
عددی
بزرگتر از
مقدار
پیشفرض (20)،
احتمال
نتایج مثبت
کاذب (false positive) را
کاهش
میدهد.
IPFIX_RECORDS_TO_CHECK
این
متغیر
محیطی
تعداد
رکوردهای IPFIX
بررسیشده
را هنگام
تصمیمگیری
دربارهٔ
اینکه آیا
یک فایل
واقعاً در
قالب IPFIX است
یا خیر،
کنترل
میکند.
تنظیم این
متغیر
محیطی روی
عددی
بزرگتر از
مقدار
پیشفرض (20)،
احتمال
نتایج مثبت
کاذب (false positive) را
کاهش
میدهد.
WIRESHARK_ABORT_ON_DISSECTOR_BUG
در صورت
تنظیم این
متغیر
محیطی، TShark
هنگام
مواجهه با
باگ در dissector
تابع abort(3) را
فراخوانی
میکند.
تابع abort(3) موجب
خروج
غیرعادی
برنامه
خواهد شد؛
اگر در حال
اجرای TShark
درون یک
اشکالزدا
(debugger) باشید،
اجرای
برنامه در
اشکالزدا
متوقف شده و
امکان
بازرسی
فرایند را
فراهم
میآورد، و
اگر آن را در
اشکالزدا
اجرا
نمیکنید،
در برخی
سیستمعاملها
(به فرض
پیکربندی
درست محیط
شما) یک فایل
core dump ایجاد
میکند. این
قابلیت
میتواند
برای
توسعهدهندگانی
که سعی در
رفع مشکل یک
dissector پروتکل
دارند،
مفید باشد.
WIRESHARK_ABORT_ON_TOO_MANY_ITEMS
در صورت
تنظیم این
متغیر
محیطی، اگر
یک dissector تلاش
کند
آیتمهای
بیش از حدی
به یک درخت (tree)
اضافه کند
(که عموماً
نشاندهندهٔ
آن است که dissector
به اندازهٔ
کافی زود از
حلقه خارج
نشده است)،
TShark تابع abort(3) را
فراخوانی
میکند.
فراخوانی abort(3)
باعث خروج
غیرعادی
برنامه
خواهد شد؛
اگر در حال
اجرای TShark
درون یک
اشکالزدا
(debugger) باشید،
برنامه در
اشکالزدا
متوقف شده و
امکان
بازرسی
فرایند را
میدهد، و
اگر آن را در
اشکالزدا
اجرا
نمیکنید،
در برخی
سیستمعاملها
(با فرض
پیکربندی
صحیح محیط
شما) یک فایل
core dump ایجاد
خواهد کرد.
این قابلیت
میتواند
برای
توسعهدهندگانی
که سعی در
رفع مشکل یک
dissector پروتکل
دارند مفید
باشد.
WIRESHARK_LOG_LEVEL
این
متغیر
محیطی
میزان
پرگویی (verbosity)
پیامهای
تشخیصی به
کنسول را
کنترل
میکند.
سطوح مختلف
از
کمگوترین
تا
پرگوترین
عبارتند از:
critical،
warning،
message، info،
debug یا noisy.
سطوح
بالاتر از
سطح کنونی
نیز فعال
هستند. سطوح
critical و error
همیشه فعال
هستند.
WIRESHARK_LOG_FATAL
سطح لاگ
مهلک (fatal) را
تنظیم
میکند.
سطوح لاگ
مهلک باعث
خاتمهٔ
غیرعادی و
لغو (abort)
برنامه
میشوند.
این سطح
میتواند
بر روی
Error، critical
یا warning
تنظیم شود.
سطح Error
همیشه مهلک
است و مقدار
پیشفرض
میباشد.
WIRESHARK_LOG_DOMAINS
این
متغیر
محیطی مشخص
میکند
کدام
دامنههای
ثبت گزارش (log
domains) فعال
باشند. این
فیلتر به
صورت
فهرستی از
موارد
جداشده با
کاما و بدون
حساسیت به
حروف بزرگ و
کوچک ارائه
میشود. در
صورت
تنظیم،
تنها
دامنههای
گنجاندهشده
فعال
خواهند شد.
دامنهٔ
پیشفرض
همواره
فعال تلقی
میشود.
برای معکوس
کردن مفهوم
تطبیق،
میتوان در
ابتدای
فهرست
فیلتر
دامنه از '!'
استفاده
کرد.
WIRESHARK_LOG_DEBUG
فهرستی
از
دامنهها
با سطح لاگ
debug. این
متغیر سطح
دامنههای
لاگ
ارائهشده
را تنظیم
میکند و
اولویت
بالاتری
نسبت به
فیلتر
دامنههای
فعال دارد.
در صورتی که
پیش از آن '!'
بیاید، به
جای آن سطح
debug
غیرفعال
میشود. WIRESHARK_LOG_NOISY
مشابه
بالا، اما
در عوض برای
سطح لاگ
noisy.
wireshark-filter(4), wireshark(1), editcap(1), pcap(3),
dumpcap(1), text2pcap(1), mergecap(1), pcap-filter(7) یا
tcpdump(8)
Sharkd توسط Jakub Zawadzki
نوشته شده
است. Sharkd از
همان کد
کالبدشکافی
بستهای که
Wireshark استفاده
میکند، به
همراه
بسیاری از
ماژولهای
دیگر Wireshark
بهره
میبرد؛
برای
مشاهدهٔ
فهرست
نویسندگان
آن کد، به
فهرست
نویسندگان
در صفحهٔ
راهنمای Wireshark
مراجعه
کنید.