بهترین ابزارهای تست قلم: ردیابی و جابجایی بسته ها. Wireshark: کلاسیک شنود بسته های شبکه

Wireshark یک تحلیلگر شبکه قدرتمند است که می تواند برای تجزیه و تحلیل ترافیک عبوری از رابط شبکه کامپیوتر شما استفاده شود. ممکن است برای شناسایی و حل مشکلات شبکه، اشکال زدایی برنامه های وب خود به آن نیاز داشته باشید، برنامه های شبکهیا سایت ها Wireshark به شما این امکان را می دهد که محتویات بسته را در تمام سطوح به طور کامل مشاهده کنید: بنابراین می توانید نحوه عملکرد شبکه در سطح پایین را بهتر درک کنید.

همه بسته ها در زمان واقعی ضبط می شوند و در قالبی آسان برای خواندن ارائه می شوند. این برنامه از یک سیستم فیلتر بسیار قدرتمند، برجسته سازی رنگ و سایر ویژگی ها پشتیبانی می کند که به شما کمک می کند بسته های مورد نیاز خود را پیدا کنید. در این آموزش، نحوه استفاده از Wireshark برای تجزیه و تحلیل ترافیک را بررسی خواهیم کرد. اخیرا توسعه دهندگان به سمت کار بر روی شاخه دوم برنامه Wireshark 2.0 رفته اند، تغییرات و بهبودهای زیادی به خصوص برای رابط کاربری در آن ایجاد شده است. این همان چیزی است که ما در این مقاله استفاده خواهیم کرد.

قبل از شروع به بررسی روش های تجزیه و تحلیل ترافیک، باید در نظر بگیرید که برنامه با جزئیات بیشتری از چه ویژگی هایی پشتیبانی می کند، با چه پروتکل هایی می تواند کار کند و چه کاری انجام دهید. در اینجا ویژگی های اصلی برنامه آمده است:

  • گرفتن بسته های بلادرنگ از سیمی یا هر نوع رابط شبکه و همچنین خواندن از یک فایل.
  • رابط های ضبط زیر پشتیبانی می شوند: اترنت، IEEE 802.11، PPP، و رابط های مجازی محلی.
  • بسته ها را می توان با پارامترهای مختلفی با استفاده از فیلترها فیلتر کرد.
  • همه پروتکل های شناخته شده در لیست برجسته شده اند رنگهای متفاوتمانند TCP، HTTP، FTP، DNS، ICMP و غیره؛
  • پشتیبانی از ضبط ترافیک تماس های VoIP؛
  • رمزگشایی ترافیک HTTPS در حضور یک گواهی پشتیبانی می شود.
  • رمزگشایی ترافیک WEP، WPA شبکه های بی سیمدر حضور کلید و دست دادن؛
  • نمایش آمار بار شبکه؛
  • مشاهده محتویات بسته ها برای تمام لایه های شبکه.
  • نمایش زمان ارسال و دریافت بسته ها.

این برنامه دارای بسیاری از ویژگی های دیگر است، اما اینها اصلی ترین مواردی بودند که ممکن است برای شما جالب باشد.

نحوه استفاده از Wireshark

من فرض می کنم شما قبلاً برنامه را نصب کرده اید، اما اگر نه، می توانید آن را از مخازن رسمی نصب کنید. برای انجام این کار، دستور را در اوبونتو تایپ کنید:

sudo apt نصب wireshark

پس از نصب، می توانید برنامه را در منوی اصلی توزیع پیدا کنید. شما باید Wireshark را با حقوق ابرکاربر اجرا کنید، زیرا در غیر این صورت قادر به تجزیه و تحلیل بسته های شبکه نخواهد بود. این را می توان از منوی اصلی یا از طریق ترمینال با استفاده از دستور KDE انجام داد:

و برای Gnome/Unity:

پنجره اصلی برنامه به سه قسمت تقسیم می شود: ستون اول شامل لیستی از رابط های شبکه موجود برای تجزیه و تحلیل، دوم - گزینه های باز کردن فایل ها، و سوم - راهنما است.

تجزیه و تحلیل ترافیک شبکه

برای شروع تجزیه و تحلیل، رابط شبکه، به عنوان مثال eth0 را انتخاب کنید و روی دکمه کلیک کنید شروع کنید.

پس از آن، پنجره بعدی باز می شود، در حال حاضر با جریانی از بسته ها که از رابط عبور می کنند. این پنجره نیز به چند قسمت تقسیم می شود:

  • قسمت بالا- اینها منوها و پانل هایی با دکمه های مختلف هستند.
  • لیست بسته- در ادامه جریان بسته های شبکه ای که تجزیه و تحلیل خواهید کرد نمایش داده می شود.
  • محتوای بسته- درست در زیر محتوای بسته انتخابی قرار دارد، بسته به سطح حمل و نقل به دسته هایی تقسیم می شود.
  • عملکرد واقعی- در پایین، محتویات بسته به صورت واقعی و همچنین به صورت HEX نمایش داده می شود.

برای تجزیه و تحلیل محتوای هر بسته می توانید روی هر بسته کلیک کنید:

در اینجا ما یک بسته پرس و جو DNS برای دریافت آدرس IP سایت می بینیم، در خود کوئری دامنه ارسال می شود و در بسته پاسخ سوال خود را و همچنین پاسخ را دریافت می کنیم.

برای مشاهده راحت تر، می توانید بسته را با دوبار کلیک کردن بر روی ورودی در یک پنجره جدید باز کنید:

فیلترهای Wireshark

مرتب کردن بسته ها به صورت دستی برای یافتن بسته های مورد نیاز بسیار ناخوشایند است، به خصوص با یک جریان فعال. بنابراین، برای چنین کاری بهتر است از فیلترها استفاده کنید. یک خط ویژه برای وارد کردن فیلترها در زیر منو وجود دارد. می توانید کلیک کنید اصطلاحبرای باز کردن فیلترساز، اما تعداد زیادی از آنها وجود دارد، بنابراین ما ابتدایی ترین آنها را پوشش می دهیم:

  • ip.dst- آدرس IP هدف؛
  • ip.src- آدرس IP فرستنده؛
  • ip.addr- IP فرستنده یا گیرنده؛
  • ip.proto- پروتکل؛
  • tcp.dstport- بندر مقصد؛
  • tcp.srcport- پورت فرستنده؛
  • ip.ttl- فیلتر بر اساس ttl، فاصله شبکه را تعیین می کند.
  • http.request_uri- آدرس سایت درخواستی

می توانید از عملگرهای زیر برای تعیین رابطه بین یک فیلد و یک مقدار در یک فیلتر استفاده کنید:

  • == - برابر است
  • != - نا برابر؛
  • < - کمتر؛
  • > - بیشتر؛
  • <= - کمتر یا مساوی
  • >= - بیشتر یا مساوی
  • مسابقات- عبارت منظم؛
  • شامل- حاوی

برای ترکیب چند عبارت، می توانید از:

  • && - هر دو عبارت باید برای بسته درست باشند.
  • || - یکی از عبارات ممکن است درست باشد.

حال بیایید نگاهی دقیق تر به نمونه هایی از چندین فیلتر بیندازیم و سعی کنیم تمام نشانه های روابط را درک کنیم.

ابتدا بیایید تمام بسته های ارسال شده به 194.67.215 را فیلتر کنیم. یک رشته در قسمت فیلتر تایپ کرده و کلیک کنید. درخواست دادن. برای راحتی، فیلترهای Wireshark را می توان با استفاده از دکمه ذخیره کرد صرفه جویی:

ip.dst == 194.67.215.125

و برای دریافت نه تنها بسته های ارسال شده، بلکه در پاسخ از این گره نیز دریافت می شود، می توانید دو شرط را ترکیب کنید:

ip.dst == 194.67.215.125 || ip.src == 194.67.215.125

ما همچنین می توانیم فایل های بزرگ منتقل شده را انتخاب کنیم:

http.content_length > 5000

با فیلتر کردن Content-Type، می‌توانیم تمام تصاویری که آپلود شده‌اند را انتخاب کنیم. بیایید ترافیک Wireshark را تجزیه و تحلیل کنیم، بسته هایی که حاوی کلمه تصویر هستند:

http.content_type حاوی تصویر است

برای پاک کردن فیلتر، می توانید روی دکمه کلیک کنید پاک کردن. این اتفاق می افتد که شما همیشه تمام اطلاعات لازم برای فیلتر کردن را نمی دانید، بلکه فقط می خواهید شبکه را مطالعه کنید. می توانید هر فیلد بسته را به عنوان یک ستون اضافه کنید و محتویات آن را در پنجره کلی برای هر بسته مشاهده کنید.

به عنوان مثال، من می خواهم ttl (زمان زندگی) یک بسته را به عنوان یک ستون نمایش دهم. برای این کار اطلاعات بسته را باز کنید، این فیلد را در قسمت IP پیدا کنید. سپس تماس بگیرید منوی زمینهو گزینه را انتخاب کنید به عنوان ستون اعمال شود:

به همین ترتیب می توانید بر اساس هر فیلد دلخواه یک فیلتر ایجاد کنید. آن را انتخاب کنید و منوی زمینه را فراخوانی کنید، سپس کلیک کنید به عنوان فیلتر اعمال شودیا به عنوان فیلتر آماده کنید، سپس انتخاب کنید انتخاب شد،برای نمایش فقط مقادیر انتخاب شده، یا انتخاب نشدهبرای حذف آنها:

فیلد مشخص شده و مقدار آن اعمال می شود یا در حالت دوم در قسمت فیلتر جایگزین می شود:

به این ترتیب می توانید یک فیلد از هر بسته یا ستونی را به فیلتر اضافه کنید. این گزینه در منوی زمینه نیز وجود دارد. برای فیلتر کردن پروتکل ها می توانید از موارد بیشتری استفاده کنید اصطلاحات ساده. به عنوان مثال، بیایید ترافیک Wireshark را برای پروتکل های HTTP و DNS تجزیه و تحلیل کنیم:

یکی دیگر از ویژگی های جالب این برنامه استفاده از Wireshark برای ردیابی یک جلسه خاص بین کامپیوتر کاربر و سرور است. برای انجام این کار، منوی زمینه بسته را باز کرده و انتخاب کنید جریان TCP را دنبال کنید.

سپس پنجره ای باز می شود که در آن تمام داده های منتقل شده بین سرور و مشتری را خواهید یافت:

تشخیص مشکلات Wireshark

ممکن است تعجب کنید که چگونه از Wireshark 2.0 برای تشخیص مشکلات شبکه استفاده کنید. برای این کار در گوشه سمت چپ پایین پنجره یک دکمه گرد وجود دارد که با کلیک بر روی آن پنجره ای باز می شود ابزارهای خبره. در آن، Wireshark تمام پیام های خطا و خرابی شبکه را جمع آوری می کند:

پنجره به تب هایی مانند خطاها، هشدارها، اعلان ها، چت ها تقسیم می شود. این برنامه می تواند بسیاری از مشکلات شبکه را فیلتر و پیدا کند و در اینجا می توانید خیلی سریع آنها را مشاهده کنید. فیلترهای Wireshark نیز در اینجا پشتیبانی می شوند.

تجزیه و تحلیل ترافیک Wireshark

اگر اتصال رمزگذاری نشده باشد، به راحتی می توانید بفهمید که کاربران دقیقا چه فایل هایی را دانلود کرده اند و چه فایل هایی را تماشا کرده اند. این برنامه کار بسیار خوبی در استخراج محتوا انجام می دهد.

برای انجام این کار، ابتدا باید با استفاده از مربع قرمز روی پنل، گرفتن ترافیک را متوقف کنید. سپس منو را باز کنید فایل -> صادرات اشیاء -> http:

تحلیلگرهای بسته شبکه یا sniffers در ابتدا به عنوان ابزاری برای حل مشکلات شبکه توسعه یافتند. آنها قادر به رهگیری، تفسیر و ذخیره بسته های ارسال شده از طریق شبکه برای تجزیه و تحلیل بیشتر هستند. از یک طرف، این اجازه می دهد مدیران سیستمو مهندسان خدمات پشتیبانی فنیمشاهده نحوه انتقال داده ها از طریق شبکه، تشخیص و رفع مشکلات ایجاد شده. از این نظر، packet sniffers هستند ابزار قدرتمندتشخیص مشکلات شبکه از سوی دیگر، مانند بسیاری از ابزارهای قدرتمند دیگر که در ابتدا برای مدیریت در نظر گرفته شده بودند، با گذشت زمان، sniffer ها برای اهداف کاملاً متفاوتی مورد استفاده قرار گرفتند. در واقع، یک sniffer در دست یک مهاجم یک ابزار نسبتا خطرناک است و می تواند برای کنترل رمزهای عبور و سایر اطلاعات محرمانه استفاده شود. با این حال، فکر نکنید که sniffer ها نوعی ابزار جادویی هستند که از طریق آن هر هکری می تواند به راحتی اطلاعات محرمانه منتقل شده از طریق شبکه را مشاهده کند. و قبل از اینکه ثابت کنیم خطری که توسط sniffer ها ایجاد می شود به اندازه ای که اغلب ارائه می شود نیست، اجازه دهید نگاهی دقیق تر به اصول عملکرد آنها بیندازیم.

نحوه عملکرد بسته sniffer

در ادامه این مقاله، ما فقط اسنیفرهای نرم افزاری طراحی شده برای شبکه های اترنت را در نظر خواهیم گرفت. Sniffer برنامه ای است که در سطح آداپتور شبکه NIC (کارت رابط شبکه) (لایه پیوند) کار می کند و به طور مخفیانه تمام ترافیک را رهگیری می کند. از آنجایی که sniffer ها در لایه پیوند داده مدل OSI کار می کنند، دیگر نیازی به اجرای قوانین پروتکل ندارند. سطح بالا. Sniffer ها مکانیسم های فیلتر (آدرس ها، پورت ها و غیره) را که درایورهای اترنت و پشته TCP/IP برای تفسیر داده ها استفاده می کنند، دور می زنند. اسنیفرهای بسته هر چیزی را که از طریق سیم از طریق آن وارد می شود را ضبط می کنند. Sniffers می‌تواند فریم‌ها را در قالب باینری ذخیره کند و بعداً آنها را رمزگشایی کند تا اطلاعات سطح بالاتر پنهان شده در داخل را آشکار کند (شکل 1).

برای اینکه sniffer بتواند تمام بسته های عبوری را رهگیری کند آداپتور شبکه، درایور آداپتور شبکه باید از حالت کار بی‌وقفه (حالت بی‌وقفه) پشتیبانی کند. در این حالت عملکرد آداپتور شبکه است که sniffer می تواند تمام بسته ها را رهگیری کند. این حالتعملکرد آداپتور شبکه به طور خودکار با شروع sniffer فعال می شود یا به صورت دستی توسط تنظیمات مربوطه Sniffer تنظیم می شود.

تمام ترافیک رهگیری شده به رمزگشای بسته ارسال می شود، که بسته ها را شناسایی و به سطوح مناسب سلسله مراتب تقسیم می کند. بسته به قابلیت های یک sniffer خاص، اطلاعات ارائه شده در مورد بسته ها می تواند متعاقباً تجزیه و تحلیل و فیلتر شود.

محدودیت های Sniffer

Sniffers در آن روزها که اطلاعات از طریق شبکه به صورت متن واضح (بدون رمزگذاری) مخابره می شد و شبکه های محلی بر اساس متمرکز کننده ها (هاب ها) ساخته می شدند، بزرگترین خطر را ایجاد می کردند. با این حال، آن زمان برای همیشه از بین رفته است، و امروزه استفاده از sniffers برای دسترسی به اطلاعات محرمانهکار به هیچ وجه آسان نیست.

واقعیت این است که هنگام ساخت شبکه های محلی بر اساس هاب ها، یک رسانه انتقال داده مشترک خاص وجود دارد ( کابل شبکه) و تمام گره های شبکه بسته ها را مبادله می کنند و برای دسترسی به این رسانه رقابت می کنند (شکل 2) و بسته ارسال شده توسط یک گره شبکه به تمام پورت های هاب منتقل می شود و این بسته توسط سایر گره های شبکه گوش می شود، اما فقط گره ای که به آن آدرس داده می شود آن را دریافت می کند. علاوه بر این، اگر یک sniffer بسته روی یکی از گره های شبکه نصب شده باشد، می تواند تمام بسته های شبکه مربوط به این بخش شبکه (شبکه ای که توسط یک هاب تشکیل شده است) را رهگیری کند.

سوئیچ ها هوشمندتر از هاب های پخش و ایزوله هستند ترافیک شبکه. سوئیچ آدرس دستگاه های متصل به هر پورت را می داند و بسته ها را فقط بین پورت های مورد نیاز ارسال می کند. این به شما این امکان را می‌دهد که مانند یک هاب، پورت‌های دیگر را بدون ارسال هر بسته به آن‌ها تخلیه کنید. بنابراین، بسته ای که توسط یک گره شبکه خاص ارسال می شود، تنها به پورت سوئیچ که گیرنده بسته به آن متصل است، منتقل می شود و سایر گره های شبکه قادر به تشخیص این بسته نیستند (شکل 3).

بنابراین، اگر شبکه بر اساس یک سوئیچ ساخته شده باشد، sniffer نصب شده بر روی یکی از رایانه های شبکه می تواند تنها بسته هایی را که رد و بدل می شوند، رهگیری کند. این کامپیوتربا سایر گره های شبکه در نتیجه، برای اینکه بتوان بسته هایی را که کامپیوتر یا سرور مورد علاقه مهاجم با بقیه گره های شبکه مبادله می کند، رهگیری کرد، باید Sniffer را روی این کامپیوتر (سرور) نصب کرد که در واقع اینطور نیست. ساده. با این حال، باید در نظر داشت که برخی از sniffer های بسته از راه اندازی می شوند خط فرمانو ممکن است رابط گرافیکی نداشته باشد. اصولاً چنین اسنیفرهایی می توانند از راه دور و به صورت نامرئی برای کاربر نصب و اجرا شوند.

علاوه بر این، باید در نظر داشته باشید که اگرچه سوئیچ‌ها ترافیک شبکه را ایزوله می‌کنند، اما همه سوئیچ‌های مدیریت‌شده دارای ویژگی ارسال پورت یا پورت mirroring هستند. یعنی پورت سوئیچ را می توان به گونه ای پیکربندی کرد که تمام بسته هایی که به پورت های دیگر سوئیچ می رسند روی آن کپی شوند. اگر در این حالت یک رایانه با یک ردیابی بسته به چنین درگاهی متصل شود، می تواند تمام بسته های مبادله شده بین رایانه های این بخش شبکه را رهگیری کند. با این حال، به عنوان یک قاعده، توانایی پیکربندی سوئیچ فقط برای مدیر شبکه در دسترس است. البته این بدان معنا نیست که او نمی تواند یک مهاجم باشد، اما راه های زیادی وجود دارد که یک مدیر شبکه می تواند همه کاربران را کنترل کند. شبکه محلی، و بعید است که او شما را به این روش پیچیده دنبال کند.

یکی دیگر از دلایلی که sniffer ها دیگر مانند گذشته خطرناک نیستند این است که امروزه مهمترین داده ها به صورت رمزگذاری شده منتقل می شوند. خدمات باز و رمزگذاری نشده به سرعت در حال ناپدید شدن از اینترنت هستند. به عنوان مثال، هنگام بازدید از وب سایت ها، به طور فزاینده ای مورد استفاده قرار می گیرد پروتکل SSL(لایه سوکت های امن)؛ SFTP (Secure FTP) به جای FTP باز استفاده می شود و سایر سرویس هایی که به طور پیش فرض از رمزگذاری استفاده نمی کنند به طور فزاینده ای از شبکه های خصوصی مجازی (VPN) استفاده می کنند.

بنابراین، کسانی که نگران احتمال استفاده مخرب از packet sniffers هستند، باید موارد زیر را در نظر داشته باشند. اول، برای ایجاد یک تهدید جدی برای شبکه شما، sniffers باید در خود شبکه ساکن باشد. ثانیاً، استانداردهای رمزگذاری امروزی، رهگیری اطلاعات محرمانه را بسیار دشوار می کند. بنابراین، در حال حاضر، sniffer های بسته به تدریج ارتباط خود را به عنوان ابزاری برای هکرها از دست می دهند، اما در عین حال ابزاری موثر و قدرتمند برای تشخیص شبکه ها باقی می مانند. علاوه بر این، sniffer ها می توانند با موفقیت نه تنها برای تشخیص و بومی سازی مشکلات شبکه، بلکه برای ممیزی امنیت شبکه نیز استفاده شوند. به طور خاص، استفاده از تحلیلگرهای بسته به شما امکان می دهد ترافیک غیرمجاز را شناسایی کنید، موارد غیرمجاز را شناسایی و شناسایی کنید. نرم افزار، شناسایی پروتکل های استفاده نشده برای حذف آنها از شبکه، تولید ترافیک برای تست نفوذ (تست نفوذ) برای تست سیستم حفاظتی، کار با سیستم های تشخیص نفوذ (سیستم تشخیص نفوذ، IDS).

بررسی اجمالی نرم افزار Packet Sniffers

همه اسنیفرهای نرم افزاری را می توان به طور تقریبی به دو دسته تقسیم کرد: sniffer هایی که از راه اندازی از خط فرمان پشتیبانی می کنند و sniffer هایی که دارای رابط کاربری گرافیکی. در همان زمان، ما توجه می کنیم که sniffer هایی وجود دارند که هر دوی این ویژگی ها را با هم ترکیب می کنند. علاوه بر این، Sniffer ها در پروتکل هایی که پشتیبانی می کنند، عمق تجزیه و تحلیل بسته های رهگیری شده، قابلیت پیکربندی فیلترها و امکان سازگاری با سایر برنامه ها با یکدیگر تفاوت دارند.

به طور معمول، پنجره هر sniffer با یک رابط گرافیکی از سه ناحیه تشکیل شده است. اولی خلاصه ای از بسته های ضبط شده را نمایش می دهد. به طور معمول، این ناحیه حداقل فیلدها را نمایش می دهد، یعنی: زمان ضبط بسته. آدرس های IP فرستنده و گیرنده بسته؛ آدرس های MAC مبدأ و مقصد، آدرس پورت مبدا و مقصد. نوع پروتکل (شبکه، حمل و نقل یا لایه برنامه)؛ برخی اطلاعات خلاصه در مورد داده های رهگیری شده ناحیه دوم نمایش داده می شود اطلاعات آماریدر مورد بسته انتخابی فردی و در نهایت در ناحیه سوم بسته به صورت هگزادسیمال یا به صورت کاراکتری اسکی ارائه می شود.

تقریباً تمام sniffer های بسته امکان تجزیه و تحلیل بسته های رمزگشایی شده را می دهند (به همین دلیل است که sniffer های بسته را تحلیلگر بسته یا آنالایزر پروتکل نیز می نامند). Sniffer بسته های رهگیری شده را توسط لایه ها و پروتکل ها توزیع می کند. برخی از تحلیلگرهای بسته قادر به تشخیص پروتکل و نمایش اطلاعات گرفته شده هستند. این نوع اطلاعات معمولاً در قسمت دوم پنجره sniffer نمایش داده می شود. به عنوان مثال، هر sniffer قادر به تشخیص پروتکل TCP است و sniffer های پیشرفته می توانند تعیین کنند که کدام برنامه این ترافیک را ایجاد کرده است. اکثر آنالیزورهای پروتکل بیش از 500 پروتکل مختلف را تشخیص می دهند و می توانند آنها را با نام توصیف و رمزگشایی کنند. هرچه sniffer بتواند اطلاعات بیشتری را رمزگشایی کند و روی صفحه نمایش دهد، کمتر باید به صورت دستی رمزگشایی کنید.

یکی از مشکلاتی که بسته‌ها می‌توانند با آن مواجه شوند این است که نمی‌توانند به درستی یک پروتکل را با استفاده از درگاهی غیر از درگاه پیش‌فرض شناسایی کنند. به عنوان مثال، به منظور بهبود امنیت، برخی از برنامه های معروف ممکن است برای استفاده از پورت هایی غیر از پورت های پیش فرض پیکربندی شوند. بنابراین، به جای پورت سنتی 80 که برای وب سرور رزرو شده است، سرور داده شدهمی توان مجبور به پیکربندی مجدد در پورت 8088 یا هر پورت دیگری شد. برخی از تحلیلگرهای بسته در این شرایط قادر به تعیین صحیح پروتکل نیستند و فقط اطلاعات مربوط به پروتکل سطح پایین (TCP یا UDP) را نمایش می دهند.

اسنیفرهای نرم‌افزاری وجود دارند که با ماژول‌های تحلیلی نرم‌افزاری به‌عنوان پلاگین یا ماژول‌های داخلی ارائه می‌شوند که به شما امکان می‌دهند گزارش‌هایی با اطلاعات تحلیلی مفید درباره ترافیک رهگیری شده ایجاد کنید.

یکی دیگر از ویژگی های مشخصه اکثر نرم افزارهای بسته sniffer، قابلیت پیکربندی فیلترها قبل و بعد از ضبط ترافیک است. فیلترها بسته های خاصی را از ترافیک عمومی با توجه به یک معیار مشخص جدا می کنند، که به شما امکان می دهد هنگام تجزیه و تحلیل ترافیک از شر اطلاعات غیر ضروری خلاص شوید.

طرح کلی

دنباله ای از مراحلی که برنامه ای که از کتابخانه pcap (از PacketCAPture) استفاده می کند باید برای تکمیل کار خود دنبال کند:

  • رابط شبکه ای را که باید به آن گوش داده شود، تعیین کنید. (در لینوکس ممکن است eth0 باشد، در BSD xl1).
  • pcap را مقداردهی اولیه کنید. در این حالت به کتابخانه گفته می شود که در کدام رابط به داده ها گوش خواهیم داد. امکان گوش دادن به چندین رابط به طور همزمان (در جلسات مختلف) وجود دارد.
  • در صورت لزوم، یک فیلتر ایجاد کنید (به عنوان مثال، ما فقط علاقه مند به دریافت بسته های TCP در پورت 23 هستیم)، این فیلتر را "کامپایل" کرده و آن را در یک جلسه خاص اعمال کنید.
  • به حلقه دریافت بسته بروید. پس از آن، هر زمان بسته بعدی رسید و از فیلتر مشخص شده عبور کرد، تابعی فراخوانی می شود که باید از قبل تعریف شده باشد. این تابع می تواند هر کاری که ما بخواهیم انجام دهد. می تواند بسته را تجزیه کند و به کاربر بدهد، آن را در دیسک ذخیره کند یا اصلاً کاری انجام ندهد.
  • در پایان کار، باید تمام جلسات باز را ببندید.

بیایید این مراحل را با جزئیات بررسی کنیم.

تعریف رابط

دو راه برای تعیین این که به کدام رابط گوش دهید وجود دارد.

اولین مورد این است که نام رابط توسط کاربر تنظیم می شود. برنامه زیر را در نظر بگیرید:

#عبارتند از #عبارتند از int main(int argc، char *argv) ( char *dev = argv; printf("دستگاه: %s\n"، dev); return(0); )

کاربر یک رابط را با ارسال نام آن از طریق اولین آرگومان به برنامه ما مشخص می کند. به طور طبیعی، رابط کاربری مشخص شده باید وجود داشته باشد.

راه دوم این است که نام رابط را از خود کتابخانه دریافت کنید:

#عبارتند از #عبارتند از int main() (char *dev, errbuf; dev = pcap_lookupdev(errbuf); printf("دستگاه: %s\n"، dev); return(0); )

در این مورد، pcap نام رابطی را که در اختیار دارد به ما می دهد. رشته errbuf حاوی توضیحات خطا، در صورت وجود، هنگام اجرای فراخوانی pcap_lookupdev() خواهد بود.

باز کردن یک رابط برای گرفتن بسته ها

برای ایجاد یک جلسه رهگیری ترافیک، باید تابع ()pcap_open_live را فراخوانی کنید. نمونه اولیه این تابع (از صفحه pcap man) به صورت زیر است:

pcap_t *pcap_open_live (char *دستگاه، int snaplen، int promisc، int to_ms، char *ebuf)

آرگومان اول نام دستگاهی است که در مرحله قبل تعریف کردیم. snaplen یک عدد صحیح است که حداکثر تعداد بایت های یک فریم شبکه را که توسط کتابخانه گرفته می شود را مشخص می کند. اگر promisc روی true تنظیم شود، رابط وارد حالت به اصطلاح promiscuous می شود (بسته های خطاب به ایستگاه های دیگر در شبکه رهگیری می شوند). to_ms - تایم اوت بر حسب میلی ثانیه (اگر مقدار روی صفر تنظیم شود، خواندن تا اولین خطا منهای یک رخ می دهد - به طور نامحدود). در نهایت، errbuf رشته ای است که در آن پیام خطا را دریافت می کنیم. تابع یک دسته (توضیح دهنده) از جلسه را برمی گرداند.

برای نشان دادن، یک قطعه کد را در نظر بگیرید:

#عبارتند از Pcap_t *دسته; handle = pcap_open_live(somedev, BUFSIZ, 1, 0, errbuf);

این رابطی را باز می کند که نام آن در خط Somedev مشخص شده است، و نشان می دهد که چند بایت از بسته برای ضبط (مقدار BUFSIZ در pcap.h تعریف شده است). رابط شبکه به حالت بی‌وقفه تغییر می‌کند. داده ها تا زمانی که خطایی رخ دهد خوانده می شوند. در صورت بروز خطا، می توانید توضیحات متنی آن را با استفاده از نشانگر errbuf روی صفحه نمایش دهید.

نکته ای در مورد رهگیری ترافیک در حالت های بی بند و باری: این دو روش بسیار متفاوت هستند. در مورد رهگیری ترافیک در حالت غیر بی بند و باری، گره تنها ترافیکی را دریافت می کند که به آن هدایت شده یا مربوط به آن است. فقط ترافیک به، از، و از طریق میزبان توسط برنامه ما رهگیری خواهد شد. در حالت بی‌وقفه، رابط شبکه تمام بسته‌هایی را که از طریق کابل وارد می‌شوند را می‌پذیرد. در یک محیط بدون سوئیچ، این می تواند تمام ترافیک شبکه باشد. مزیت متمایز آن این است که بسته های بیشتری را برای ضبط فراهم می کند، که ممکن است (یا نه) مفید باشد، بسته به اینکه جریان شبکه را برای چه چیزی می گیرید.

با این حال، رهگیری ترافیک در حالت غیرقانونی قابل تشخیص است. یک گره دیگر می تواند با دقت بالا تعیین کند که آیا ما از حالت promiscuous استفاده می کنیم یا خیر. همچنین، فقط در محیط‌های بدون سوئیچ (مانند هاب یا سوئیچ‌هایی که با بسته‌های arp پر شده‌اند) کار می‌کند. ثالثاً، اگر شبکه به شدت بارگذاری شود، برنامه ما از تعداد زیادی استفاده خواهد کرد منابع سیستم.

فیلترینگ ترافیک

اغلب یک رهگیر بسته برای رهگیری نه همه، بلکه فقط بسته های خاص مورد نیاز است. به عنوان مثال، مواقعی وجود دارد که می خواهیم در جستجوی رمز عبور، ترافیک پورت 23 (تلنت) را رهگیری کنیم. یا شاید بخواهیم فایلی را که در پورت 21 ارسال می شود (FTP) رهگیری کنیم. شاید ما فقط بخواهیم ترافیک DNS را ضبط کنیم (پورت UDP 53). در هر صورت، به ندرت نیاز به رهگیری همه داده ها است. توابع pcap_compile() و pcap_setfilter() برای فیلتر کردن ترافیک در نظر گرفته شده اند.

بعد از اینکه ()pcap_open_live را فراخوانی کردیم و یک جلسه ضبط عملکردی دریافت کردیم، می‌توانیم فیلتر خود را اعمال کنیم. البته می توان فیلتر را به صورت دستی با تجزیه هدرهای ETH/IP/TCP پس از دریافت بسته پیاده سازی کرد، اما استفاده از فیلتر داخلی pcap کارآمدتر و همچنین آسان تر است.

قبل از اعمال فیلتر، باید آن را "کامپایل" کنید. عبارت فیلتر در یک رشته معمولی (آرایه ای از کاراکترها) ذخیره می شود. نحو چنین عباراتی در صفحه man tcpdump (man tcpdump) به تفصیل آمده است.

تابع pcap_compile() برای کامپایل فیلتر استفاده می شود. نمونه اولیه آن به شکل زیر است:

int pcap_compile(pcap_t *p، ساخت bpf_program *fp، char *str، int optimize، bpf_u_int32 netmask)

اولین آرگومان دسته (توصیفگر) جلسه ما است (pcap_t *handle در مثال قبلی). آرگومان بعدی یک اشاره گر به ناحیه ای در حافظه است که نسخه کامپایل شده فیلتر خود را در آن ذخیره می کنیم. بعد خود عبارت فیلتر به عنوان یک رشته منظم می آید. پارامتر بعدی تعیین می کند که آیا عبارت ما باید بهینه شود یا خیر (طبق معمول، 0 به معنای "نه"، 1 به معنای "بله" است). آخرین پارامتر netmask است که فیلتر ما روی آن اعمال می شود. تابع در صورت خطا، -1 را برمی گرداند، تمام مقادیر دیگر نشان دهنده موفقیت هستند.

هنگامی که یک عبارت کامپایل شد، باید اعمال شود، که با استفاده از تابع ()pcap_setfilter انجام می شود. نمونه اولیه آن این است:

int pcap_setfilter(pcap_t *p، ساخت bpf_program *fp)

آرگومان اول دسته (دسته) جلسه ضبط بسته ما است، دومی نشانگر نسخه کامپایل شده عبارت فیلتر است (معمولاً آرگومان دوم تابع pcap_compile()).

مثال زیر استفاده از فیلتر را نشان می دهد:

#عبارتند از Pcap_t *دسته; // توصیفگر جلسه char dev = "eth0"; // رابطی که در آن به char errbuf گوش خواهیم داد. // خطای ساختار خط bpf_program filter; // عبارت کامپایل شده برای فیلتر char filter_app = "port 23"; // عبارت فیلتر bpf_u_int32 mask; // Netmask رابط ما bpf_u_int32 net; // آدرس IP رابط ما pcap_lookupnet(dev، &net، &mask، errbuf); handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf); pcap_compile(دسته، &فیلتر، فیلتر_برنامه، 0، net); pcap_setfilter(دسته، &فیلتر);

این برنامه یک sniffer را برای بسته ها به پورت 23 یا از پورت 23، در حالت غیرقانونی، روی رابط eth0 آماده می کند. مثال حاوی تابع ()pcap_lookupnet است که آدرس شبکه و ماسک شبکه را برای دستگاه داده شده به عنوان پارامتر برمی گرداند. استفاده از آن ضروری است، زیرا برای اعمال فیلتر باید آدرس و netmask را بدانیم.

ضبط بسته

دو تکنیک ضبط بسته وجود دارد. شما می توانید یک بسته را در یک زمان ضبط و پردازش کنید، یا می توانید با تنظیم یک حلقه خاص با گروهی از بسته ها کار کنید که تا زمانی که pcap تعداد بسته های مشخص شده را بگیرد اجرا می شود. برای کار در حالت اول از تابع ()pcap_next استفاده می شود. نمونه اولیه ()pcap_next:

U_char *pcap_next(pcap_t *p، ساخت pcap_pkthdr *h)

آرگومان اول، هندل جلسه ما است، دومی اشاره گر به ساختاری است که اطلاعات مربوط به بسته را ذخیره می کند، مانند زمان رهگیری بسته، طول بسته، و طول بخش جداگانه آن (مثلاً اگر بسته تکه تکه شده باشد). ()pcap_next یک اشاره گر u_char را به محل حافظه که بسته توصیف شده توسط این ساختار در آن ذخیره می شود، برمی گرداند.

نمایش استفاده از ()pcap_next برای گرفتن یک بسته:

#عبارتند از #عبارتند از int main() (pcap_t *handle; char *dev; char errbuf; // شرح خطا string struct bpf_program filter; // فیلتر کامپایل شده char filter_app = "port 23"؛ // filter bpf_u_int32 mask; // netmask bpf_u_int32 headerpstruct ; er که بسته pcap const u_char * را پر می کند. / کامپایل و اعمال فیلتر بسته pcap_compile(handle, &filter , filter_app, 0, net); pcap_setfilter(handle, &filter); // capture the packet packet = pcap_next(handle, &header); // چاپ طول آن در کنسول printf("/"Jack) p_close(handle)؛ return(0)؛ )

این برنامه بسته‌هایی را روی دستگاهی که توسط pcap_lookupdev() بازگردانده شده است، می‌گیرد و آن را در حالت پرمخاطره قرار می‌دهد. بسته ای را شناسایی می کند که از طریق پورت 23 (تلنت) می رود و اندازه آن را بر حسب بایت نمایش می دهد. فراخوانی ()pcap_close یک جلسه عکسبرداری باز را می بندد.

روش جایگزین، اگرچه درک آن دشوارتر است، اما احتمالاً مفیدتر است. بسته های بسیار کمی (در صورت وجود) وجود دارد که از ()pcap_next استفاده می کنند. در اکثر موارد، آنها از pcap_loop() یا pcap_dispatch() استفاده می کنند (که به نوبه خود از ()pcap_loop استفاده می کند. برای درک استفاده از این دو تابع، باید مفهوم توابع برگشت تماس را درک کنید.

توابع پاسخ به تماس یک تکنیک برنامه نویسی متداول است. اصل بسیار ساده است. فرض کنید برنامه ای دارید که منتظر رویدادی است. برای مثال، برای پردازش یک ضربه کلید. هر بار که یک کلید فشار داده می شود، می خواهم تابعی را فراخوانی کنم که آن رویداد را مدیریت می کند. تابعی که من استفاده می کنم تابع callback است. هر بار که کاربر کلیدی را فشار می دهد، برنامه من تابع callback را فراخوانی می کند. توابع Callback در pcap استفاده می‌شوند، اما به جای اینکه وقتی کاربر کلیدی را فشار می‌دهد، آن‌ها را هنگام دریافت بسته بعدی فراخوانی می‌کند. ()pcap_loop و ()pcap_dispatch توابعی هستند که از مکانیسم برگشت به تماس به روش مشابهی استفاده می کنند. هر دو، هر بار که pcap بسته ای را که از فیلتر عبور می کند، فراخوانی می کنند (مگر اینکه، البته، فیلتر کامپایل شده و در جلسه اعمال شود، در غیر این صورت، تمام بسته های ضبط شده به callback ها ارسال می شوند)

نمونه اولیه تابع ()pcap_loop:

int pcap_loop (pcap_t *p، int cnt، pcap_handler callback، u_char *user);

اولین آرگومان هندل جلسه ما است. عدد صحیح بعدی به pcap_loop() می‌گوید که در مجموع چند بسته باید جمع‌آوری شود (مقدار منفی به این معنی است که گرفتن بسته باید تا زمانی که خطا رخ دهد رخ دهد). آرگومان سوم نام تابع callback است (فقط نام، بدون پرانتز). آخرین آرگومان در برخی از برنامه ها استفاده می شود، اما معمولاً به سادگی روی NULL تنظیم می شود. ()pcap_dispatch تقریباً یکسان است، تنها تفاوت این است که چگونه توابع زمان‌بندی را مدیریت می‌کنند، که هنگام فراخوانی ()pcap_open_live تنظیم می‌شود. ()pcap_loop برخلاف pcap_dispatch() به سادگی از وقفه های زمانی چشم پوشی می کند. برای جزئیات بیشتر به man pcap مراجعه کنید.

قبل از اینکه مثالی از استفاده از ()pcap_loop ارائه دهیم، باید فرمت تابع callback خود را در نظر بگیریم. ما نمی توانیم خودسرانه یک نمونه اولیه تابع callback تعریف کنیم، زیرا pcap_loop () نمی داند با آن چه کند. نمونه اولیه تابع callback ما باید به صورت زیر باشد:

void got_packet (u_char *args، const struct pcap_pkthdr *header، const u_char *packet);

بیایید آن را با جزئیات بیشتری در نظر بگیریم. ابتدا تابع یک مقدار خالی (void) برمی گرداند. این منطقی است، زیرا ()pcap_loop نمی تواند بداند با مقدار بازگشتی چه کند. آرگومان اول همان آرگومان آخر pcap_loop() است. هر مقداری که به عنوان آخرین آرگومان برای ()pcap_loop استفاده شود، هر بار که از ()pcap_loop فراخوانی شود، به عنوان اولین آرگومان به تابع callback ارسال می شود. آرگومان دوم هدر pcap است که حاوی اطلاعاتی درباره زمان ضبط بسته، اندازه آن و غیره است. ساختار pcap_pkthdr در pcap.h به صورت زیر تعریف شده است:

Struct pcap_pkthdr ( struct timeval ts; // timestamp bpf_u_int32 caplen; // طول قسمت ضبط شده بسته bpf_u_int32 len; // طول کل بسته );

آخرین آرگومان تابع callback جالب ترین است. این یک اشاره گر به یک بافر است که در واقع شامل کل بسته است که با استفاده از ()pcap_loop گرفته شده است.

چگونه از متغیر بسته استفاده کنیم؟ بسته حاوی ویژگی‌های زیادی است، بنابراین همانطور که می‌توانید تصور کنید، در واقع یک رشته نیست، بلکه مجموعه‌ای از ساختارها است (به عنوان مثال، یک بسته TCP / IP حاوی سرآیند اترنت، ip-، tcp و خود داده است). پارامتر بسته که از نوع u_char است، در واقع یک نسخه سریالی از این ساختارها است. برای به دست آوردن داده های مفید از این ساختارها، باید تغییراتی را انجام دهیم.

اول از همه، باید ساختارهایی در برنامه تعریف شده داشته باشیم که از آنها استفاده خواهیم کرد. ما از ساختارهای زیر استفاده خواهیم کرد (در واقع، می‌توانیم آنها را مستقیماً از فایل‌های هدر بگیریم، اما نام فیلدهای ساختار از پلتفرم به پلتفرم دیگر متفاوت است، بنابراین برای اهداف نمایشی استفاده می‌شوند):

Struct sniff_ethernet ( u_char ether_dhost; u_char ether_shost; u_short ether_type; /* IP? ARP? RARP? etc */ ); // ساختار هدر IP sniff_ip ( #if BYTE_ORDER == LITTLE_ENDIAN u_int ip_hl:4, ip_v:4; #endif #if BYTE_ORDER == BIG_ENDIAN u_int ip_v:4, /* نسخه */ ip_hl:4; #IP_char u_int به طول u_H__/ کوتاه ip_len؛ u_short ip_id؛ u_short ip_off؛ #define IP_RF 0x8000 /* Reserved fragment flag */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments IP_RF 0x8000 /* FFMA Fragments bit-fine flag */#FFde flag partfine bit */#FFde _char ip _ttl؛ /* زمان زنده ماندن */ u_char ip_p؛ /* پروتکل */ u_short ip_sum؛ /* checksum */ struct in_addr ip_src,ip_dst؛ /* آدرس منبع و مقصد */ ); struct sniff_tcp ( u_short th_sport; u_short th_dport; tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acnowledgment number */ #if BYTE_ORDER == LITTLE_END_THIAN *:*4:un_int;) جابجایی داده */ #endif #if BYTE_ORDER == BIG_ENDIAN u_int th_off:4, /* data offset */ th_x2:4; /* (استفاده نشده) */ #endif u_char th_flags؛ #define TH_FIN 0x01 #define TH_SYN_SHF #define TH_SYN_SHF 0x08 #def ine TH_ACK 0x10 #define TH_URG 0x20 #define TH_ECE 0x40 #define TH_CWR 0x80 #define TH_FLAGS \ (TH_FIN|TH_SYN|TH_RST|\TH_ACT_sh| /* پنجره */ u_short th_ sum; /* checksum */ u_short th_urp; /* اشاره گر فوری */ );

اگر از توضیحات ساختار از فایل‌های هدر استاندارد استفاده می‌شود، گاهی اوقات برای اینکه برنامه‌ای که از توضیحات هدر TCP استفاده می‌کند بدون خطا کامپایل شود، لازم است قبل از گنجاندن فایل‌های هدر، نماد _BSD_SOURCE تعریف شود. راه جایگزین- ساختارهایی را که هدر TCP را به صورت دستی توصیف می کنند، تعریف کنید.

pcap به طور طبیعی دقیقاً از همان ساختارها هنگام گرفتن بسته ها استفاده می کند. سپس به سادگی یک رشته u_char (بافر) ایجاد می کند و داده ها را از ساختارها در آن کپی می کند. چگونه یک رشته را به ساختارها تجزیه کنیم؟ این به راحتی با اشاره گرها و تبدیل نوع انجام می شود.

ابتدا، بیایید متغیرهایی را که برای تجزیه بسته u_char به سربرگ های جداگانه نیاز داریم، اعلام کنیم:

const struct sniff_ethernet *ethernet; const struct sniff_ip *ip; ساختار const sniff_tcp *tcp; const char *payload; int size_ethernet = sizeof(struct sniff_ethernet); int size_ip = sizeof(struct sniff_ip); int size_tcp = sizeof(struct sniff_tcp);

اکنون تبدیل نوع را انجام می دهیم:

اترنت = (struct sniff_ethernet*)(packet); ip = (struct sniff_ip*) (packet + size_ethernet); tcp = (struct sniff_tcp*) (packet + size_ethernet + size_ip); محموله = (u_char *) (بسته + size_ethernet + size_ip + size_tcp);

پس از آن، می توانیم به فیلدهای تمام ساختارها به روش معمول دسترسی داشته باشیم، به عنوان مثال:

اگر (tcp->th_flags & TH_URG) ( ... ); ... printf("TTL = %d\n", ip->ip_ttl);

خاموش شدن

پس از اتمام، باید جلسه را ببندید. این کار با استفاده از تابع ()pcap_close انجام می شود.

SmartSniffبه شما اجازه می دهد تا ترافیک شبکه را رهگیری کرده و محتوای آن را در اسکی نمایش دهید. این برنامه بسته های عبوری از آداپتور شبکه را می گیرد و محتویات بسته ها را در آن نمایش می دهد فرم متن(پروتکل‌های http، pop3، smtp، ftp) و به‌صورت هگزادسیمال dump. برای گرفتن بسته‌های TCP/IP، SmartSniff از تکنیک‌های زیر استفاده می‌کند: سوکت‌های خام - سوکت‌های RAW، درایور ضبط WinCap و درایور مانیتور شبکه مایکروسافت. این برنامه از زبان روسی پشتیبانی می کند و استفاده از آن آسان است.

برنامه ردیابی بسته


SmartSniff اطلاعات زیر را نمایش می دهد: نام پروتکل، آدرس محلی و راه دور، پورت محلی و راه دور، میزبان محلی، نام سرویس، حجم داده، اندازه کل، زمان ضبط و زمان آخرین بسته، مدت زمان، آدرس MAC محلی و راه دور، کشورها و محتوای بسته داده. این برنامه دارای تنظیمات انعطاف پذیر است، عملکرد فیلتر ضبط، باز کردن پاسخ های http، تبدیل آدرس های IP، ابزار به سینی سیستم به حداقل می رسد. SmartSniff یک گزارش جریان بسته را در فرم تولید می کند صفحات HTML. امکان صادرات جریان های TCP/IP در برنامه وجود دارد.

گاهی اوقات هنگام استفاده از اینترنت، شرایطی پیش می آید که در آن ترافیک نشت یا مصرف پیش بینی نشده منابع سیستم اتفاق می افتد. برای تجزیه و تحلیل سریع و یافتن منبع مشکل، از ابزارهای شبکه ویژه استفاده کنید. یکی از آنها، WireShark، در مقاله مورد بحث قرار خواهد گرفت.

اطلاعات کلی

قبل از استفاده از WireShark، باید خود را با دامنه، عملکرد و قابلیت های آن آشنا کنید. به طور خلاصه: این برنامه به شما امکان می دهد بسته ها را در زمان واقعی در شبکه های سیمی و بی سیم رهگیری کنید. اتصالات شبکه. مورد استفاده در پروتکل های اترنت، IEEE 802.11، PPP و پروتکل های مشابه. همچنین می توانید از رهگیری ترافیک تماس VoIP استفاده کنید.

این برنامه تحت مجوز GNU GPL توزیع شده است که به معنی منبع باز و رایگان است. کد منبع. می‌توانید آن را روی بسیاری از توزیع‌های لینوکس، MacOS اجرا کنید، و همچنین نسخه‌ای برای آن وجود دارد سیستم عاملپنجره ها.

چگونه از WireShark استفاده کنیم؟

ابتدا باید آن را در سیستم نصب کنید. از آنجایی که یکی از پرکاربردترین توزیع های لینوکساوبونتو است، سپس تمام نمونه ها در آن نشان داده خواهند شد.

برای نصب کافیست دستور زیر را در کنسول تایپ کنید:

sudo apt-get install wireshark

پس از آن، برنامه در منوی اصلی ظاهر می شود. می توانید آن را از آنجا اجرا کنید. اما بهتر است این کار را از ترمینال انجام دهید، زیرا او به حقوق ابرکاربر نیاز دارد. این را می توان به صورت زیر انجام داد:

ظاهر

این برنامه دارای یک رابط گرافیکی کاربر پسند است. یک پنجره دوستانه در مقابل کاربر ظاهر می شود که به 3 قسمت تقسیم شده است. اولی به طور مستقیم به کپچر مربوط می شود، دومی مربوط به باز کردن فایل ها و نمونه ها و سومی کمک و پشتیبانی است.

بلوک Capture شامل لیستی از رابط های شبکه در دسترس برای ضبط است. وقتی مثلا eth0 را انتخاب کنید و دکمه Start را فشار دهید، فرآیند رهگیری شروع می شود.

پنجره با داده های رهگیری نیز به طور منطقی به چند قسمت تقسیم می شود. در بالا یک کنترل پنل با عناصر مختلف وجود دارد. پس از آن لیستی از بسته ها ارائه می شود. در قالب یک جدول ارائه شده است. در اینجا می توانید شماره سریال بسته، زمان رهگیری آن، آدرس خروج و دریافت را مشاهده کنید. همچنین می توانید داده های مربوط به پروتکل های مورد استفاده، طول و سایر اطلاعات مفید را حذف کنید.

در زیر لیست پنجره ای با محتویات داده های فنی بسته انتخابی وجود دارد. و حتی پایین تر، نمایشگری به شکل هگزادسیمال وجود دارد.

هر نما را می توان در یک پنجره بزرگ برای خواندن راحت تر داده ها به حداکثر رساند.

اعمال فیلترها

در طول عملیات برنامه، ده ها یا حتی صدها بسته همیشه در مقابل کاربر اجرا می شود. وجین آنها با دست بسیار دشوار و زمان بر است. بنابراین، دستورالعمل رسمی WireShark استفاده از فیلترها را توصیه می کند.

برای آنها یک فیلد ویژه در پنجره برنامه وجود دارد - فیلتر. برای پیکربندی دقیق تر فیلتر، یک دکمه Expression وجود دارد.

اما برای اکثر موارد، یک مجموعه استاندارد از فیلترها کافی است:

  • ip.dst - آدرس IP مقصد بسته.
  • ip.src - آدرس فرستنده؛
  • ip.addr - فقط هر ip.
  • ip.proto - پروتکل.

استفاده از فیلترها در WireShark - دستورالعمل

برای امتحان نحوه عملکرد برنامه با فیلترها، باید دستور خاصی را وارد کنید. به عنوان مثال، چنین مجموعه ای - ip.dst == 172.217.23.131 - تمام بسته های پروازی را به سایت Google نشان می دهد. برای مشاهده تمام ترافیک - اعم از ورودی و خروجی - می توانید دو فرمول را ترکیب کنید - ip.dst == 172.217.23.131 || ip.src == 172.217.23.131. بنابراین، معلوم شد که از دو شرط به طور همزمان در یک خط استفاده می شود.

می توانید از شرایط دیگری مانند ip.ttl استفاده کنید< 10. این دستورخروجی تمام بسته های با طول عمر کمتر از 10 خواهد بود. برای انتخاب داده ها بر اساس اندازه آنها، می توانید از این روش استفاده کنید - http.content_length > 5000.

ویژگی های اضافی

برای راحتی، WireShark راهی برای انتخاب سریع پارامترهای بسته به عنوان فیلد تجزیه شده دارد. به عنوان مثال، در یک فیلد با داده های فنی، می توانید روی شی مورد نظر کلیک راست کرده و Apply as Column را انتخاب کنید. انتقال آن به ناحیه فیلد به صورت ستونی به چه معناست.

به طور مشابه، می توانید هر پارامتری را به عنوان فیلتر انتخاب کنید. برای انجام این کار، منوی زمینه دارای آیتم Apply as Filter است.

جلسه جداگانه

می توانید از WireShark به عنوان مانیتور بین دو گره شبکه، به عنوان مثال، یک کاربر و یک سرور استفاده کنید. برای انجام این کار، بسته مورد نظر را انتخاب کنید، با منوی زمینه تماس بگیرید و روی Follow TCP Stream کلیک کنید. یک پنجره جدید کل گزارش تبادل بین دو گره را نمایش می دهد.

تشخیص

WireShark ابزار جداگانه ای برای تجزیه و تحلیل مشکلات شبکه دارد. به آن Expert Tools می گویند. می توانید آن را در گوشه پایین سمت چپ، به شکل یک نماد گرد پیدا کنید. با کلیک بر روی آن، یک پنجره جدید با چندین تب - Errors، Warnings و دیگران باز می شود. با کمک آنها، می توانید تجزیه و تحلیل کنید که کدام گره ها از کار می افتند، بسته ها به آنها نمی رسند، و مشکلات دیگر شبکه را شناسایی کنید.

ترافیک صوتی

همانطور که قبلا ذکر شد، WireShark می تواند و ترافیک صوتی. یک منوی کامل تلفن به این اختصاص داده شده است. این می تواند برای یافتن مشکلات در VoIP و حل سریع آنها استفاده شود.

مورد VoIP Calls در منوی تلفن به شما امکان می دهد تماس های برقرار شده را مشاهده کرده و به آنها گوش دهید.

صادرات اشیاء

این احتمالاً جالب ترین ویژگی برنامه است. این به شما امکان می دهد از WireShark به عنوان یک رهگیر برای فایل هایی که از طریق شبکه منتقل می شوند استفاده کنید. برای انجام این کار، باید فرآیند رهگیری را متوقف کنید و اشیاء HTTP را در منوی File صادر کنید. در پنجره ای که باز می شود، لیستی از تمام فایل های منتقل شده در طول جلسه نمایش داده می شود که می توان آنها را در یک مکان مناسب ذخیره کرد.

سرانجام

متاسفانه، نسخه فعلیپیدا کردن WireShark به زبان روسی در شبکه دشوار خواهد بود. در دسترس ترین و رایج ترین آن به زبان انگلیسی است.

در مورد نیز همینطور است دستورالعمل دقیقتوسط WireShark به زبان روسی. رسمی از توسعه دهنده به زبان انگلیسی ارائه شده است. آموزش های کوچک و مختصر زیادی در WireShark برای مبتدیان در وب وجود دارد.

با این حال، برای کسانی که برای مدت طولانی در زمینه فناوری اطلاعات کار می کنند، پرداختن به این برنامه مشکل خاصی ایجاد نخواهد کرد. آ فرصت های بزرگو عملکرد غنی تمام مشکلات یادگیری را روشن می کند.

شایان ذکر است که در برخی از کشورها استفاده از sniffer که WireShark است ممکن است غیرقانونی باشد.