Wireshark چیست؟
Wireshark پرکاربردترین تحلیلگر پروتکل شبکهی جهان است: بستههای شبکه را در پایینترین سطح ضبط میکند و به شما اجازه میدهد لایهبهلایه — از فریم اترنت تا محتوای برنامه — آنها را بررسی کنید. با مجوز GPLv2 منتشر میشود و نسخهی پایدار جاری در زمان نگارش این مطلب 4.6.8 است.
Wireshark در تحلیل شبکه ابزاری بیرقیب است. اما پرسش این صفحه چیز دیگری است: در تست نفوذ برنامهی وب چقدر به آن نیاز دارید؟ پاسخ صادقانه، «کمتر از آنچه فهرستهای ابزار ادعا میکنند» است.
«Wireshark برای تست نفوذ برنامهی وب ضروری است.» — نادرست. وقتی یک پروکسی رهگیر مثل Burp یا Caido دارید، Wireshark بهندرت ابزار درست است. پروکسی، ترافیک HTTPS را رمزگشاییشده و مهمتر از آن قابل ویرایش و بازارسال به شما میدهد — دو چیزی که Wireshark ندارد. Wireshark فقط مشاهده میکند؛ نمیتواند درخواست را دستکاری و دوباره بفرستد. محتوایی که Wireshark را «ابزار اصلی تست نفوذ وب» معرفی میکند، صرفاً فهرست ابزار را پر میکند.
چرا پروکسی رهگیر معمولاً بهتر است
تفاوت بنیادی در ماهیت کار است. تست نفوذ وب یعنی دستکاری درخواستها و مشاهدهی واکنش برنامه. برای این کار به ابزاری نیاز دارید که:
- ترافیک HTTPS را رمزگشایی کند (پروکسی با گواهی CA خودش این کار را میکند).
- اجازهی ویرایش درخواست پیش از ارسال بدهد.
- امکان بازارسال مکرر با تغییرات را فراهم کند (Repeater).
- ترافیک را بر اساس منطق HTTP سازمان دهد، نه بستهی خام TCP.
Wireshark هیچکدام از این چهار را انجام نمیدهد. یک شنوندهی منفعل است. برای دیدن اینکه یک payload چه واکنشی میگیرد، در Burp آن را در Repeater تغییر میدهید و میفرستید؛ در Wireshark فقط میتوانید نگاه کنید که چه اتفاقی افتاد.
پس Wireshark در جریان اصلی کار وب کنار گذاشته میشود — نه چون ضعیف است، بلکه چون ابزار مسئلهی دیگری است.
کاربردهای واقعی Wireshark در engagement وب
Wireshark دقیقاً وقتی ارزش خود را نشان میدهد که پروکسی به بنبست میخورد. چهار موقعیت واقعی:
- اشکالزدایی دستدهی TLS. وقتی مذاکرهی TLS شکست میخورد یا مجموعهرمز نامناسبی انتخاب میشود، Wireshark تنها ابزاری است که خودِ فرایند handshake و پیامهای
ClientHello/ServerHelloرا نشان میدهد. - پروتکلهای غیر HTTP. اگر برنامه به MQTT، فریمبندی gRPC روی HTTP/2، یا یک پروتکل TCP سفارشی متکی است، پروکسی HTTP آن را نمیفهمد اما Wireshark میبیند.
- کلاینتهای ضخیم یا موبایل که پروکسی را دور میزنند. برخی کلاینتها تنظیم پروکسی سیستم را نادیده میگیرند یا گواهی را pin کردهاند (Certificate Pinning). وقتی نمیتوانید ترافیک را به پروکسی هدایت کنید، Wireshark در سطح شبکه میبیند که واقعاً چه چیزی رد و بدل میشود.
- تشخیص اینکه چرا پروکسی ترافیک را نمیبیند. وقتی انتظار دارید درخواستی در Burp ظاهر شود و نمیشود، Wireshark میگوید آیا اصلاً ترافیکی خارج شده یا نه.
الگوی مشترک هر چهار مورد یکی است: Wireshark وقتی وارد میشود که لایهی زیر HTTP مشکل دارد یا وقتی ترافیک اصلاً به پروکسی نمیرسد.
فیلتر ضبط و نمایش، و دنبالکردن جریان
Wireshark دو نوع فیلتر کاملاً متفاوت دارد و خلط آنها اشتباه رایجی است:
- فیلتر ضبط (Capture Filter): پیش از ضبط اعمال میشود و تعیین میکند چه بستههایی اصلاً ذخیره شوند. نحو آن BPF است، مثل
host 203.0.113.10 and port 443. برای محدود کردن حجم داده روی شبکهی شلوغ ضروری است. - فیلتر نمایش (Display Filter): پس از ضبط، فقط نمایش را محدود میکند و دادهی زیرین را حذف نمیکند. نحو آن غنیتر است، مثل
http.request.method == "POST"یاtls.handshake.type == 1.
قابلیت پرکاربرد دیگر Follow Stream است: با راستکلیک روی یک بسته و انتخاب «Follow TCP/HTTP/TLS Stream»، کل مکالمهی یک نشست بهصورت پیوسته و بازسازیشده نمایش داده میشود — بهجای بستههای پراکنده. این سریعترین راه دیدن یک تبادل کامل است.
# نمونه فیلتر نمایش: فقط ترافیک HTTP یک میزبان
http && ip.addr == 203.0.113.10
رمزگشایی TLS با SSLKEYLOGFILE
مشکل بدیهی Wireshark با وب مدرن این است که همهچیز روی TLS رمز شده و بستههای خام صرفاً دادهی رمزشدهاند. راهحل استاندارد، متغیر محیطی SSLKEYLOGFILE است: مرورگرها (Chrome، Firefox) و ابزارهایی مثل curl، اگر این متغیر تنظیم شده باشد، کلیدهای نشست TLS را در آن فایل مینویسند و Wireshark میتواند با خواندن همان فایل، ترافیک را رمزگشایی کند.
export SSLKEYLOGFILE=$HOME/tls-keys.log
# سپس مرورگر را از همین شل اجرا کنید
# در Wireshark: Preferences > Protocols > TLS
# (Pre)-Master-Secret log filename = همان مسیراین روش برای اشکالزدایی handshake و بازرسی محتوای رمزشده در محیط آزمایشی عالی است. اما توجه کنید که برای کار روزمرهی وب، همچنان پروکسی رهگیر سادهتر و کارآمدتر است — چون هم رمزگشایی میکند و هم ویرایش. SSLKEYLOGFILE راهحلی برای موقعیتهایی است که پروکسی در دسترس یا مناسب نیست، نه جایگزین روزمرهی آن.
جمعبندی: Wireshark را در جعبهابزار خود نگه دارید، اما با انتظار درست. ابزار لایهی شبکه و پروتکلهای زیرین است — نه ابزار اصلی آزمون برنامهی وب.
پرسشهای متداول
آیا برای تست نفوذ وب به Wireshark نیاز دارم؟
معمولاً نه. برای جریان اصلی کار — دیدن و دستکاری درخواستهای HTTP — یک پروکسی رهگیر مثل Burp یا Caido بهتر است چون ترافیک را رمزگشاییشده و قابل ویرایش میدهد. Wireshark فقط مشاهده میکند و نمیتواند درخواست را تغییر داده و بازفرستد.
پس Wireshark کِی به درد تست وب میخورد؟
در موقعیتهای خاص: اشکالزدایی دستدهی TLS، تحلیل پروتکلهای غیر HTTP مثل MQTT یا فریمبندی gRPC، بررسی کلاینتهای ضخیم یا موبایلی که پروکسی را دور میزنند یا گواهی را pin کردهاند، و تشخیص اینکه چرا ترافیکی به پروکسی نمیرسد.
چطور با Wireshark ترافیک HTTPS را رمزگشایی کنم؟
متغیر محیطی SSLKEYLOGFILE را تنظیم کنید و مرورگر یا curl را از همان محیط اجرا کنید تا کلیدهای نشست TLS در آن فایل نوشته شوند؛ سپس در تنظیمات TLS در Wireshark مسیر همان فایل را بدهید. این برای محیط آزمایشی خوب است، اما برای کار روزمره پروکسی سادهتر است.
تفاوت فیلتر ضبط و فیلتر نمایش چیست؟
فیلتر ضبط پیش از ضبط اعمال میشود و تعیین میکند چه بستههایی اصلاً ذخیره شوند (نحو BPF). فیلتر نمایش پس از ضبط فقط نمایش را محدود میکند و دادهی زیرین را نگه میدارد (نحو غنیتر مثل http.request.method == "POST").
