استفاده از ابزار tcpdump - حلقه ارتباطی ابر آروان

ابر آروان

زیرساخت یکپارچه ابری

۲۶ شهریور ۱۳۹۸

استفاده از ابزار tcpdump

tcpdump ابزاری متن باز و رایگان برای مانیتور و تجزیه‌وتحلیل ترافیک TCP/IP در شبکه است که در command line اجرا و به‌وسیله‌ی بسیاری از توزیع‌های مبتنی‌بر Linux مانند Unix، CentOS و… پشتیبانی می‌شود. در این مطلب در قالب مثال‌هایی به شیوه‌ی استفاده از ابزار tcpdump پرداخته شده است.

 

شیوه‌ی نصب ابزار tcpdump

ابزار tcpdump، روی بسیاری از نسخه‌های مبتنی‌بر Linux قابلیت نصب دارد. دستور نصب tcpdump در توزیع‌های مختلف عبارت‌ است از:

CentOS و REHL:

sudo yum install tcpdump

Fedora:

sudo dnf install tcpdump

Ubuntu و Debian:

sudo apt-get install tcpdump

استفاده از  tcpdump : کاربردهای مختلف

ابزار tcpdump گزینه‌های بسیاری برای مانیتور بسته‌های شبکه ارایه می‌کند که در ادامه در قالب مثال‌هایی به آن‌ها پرداخته می‌شود. این مثال‌ها روی توزیع Ubuntu 18.04 پیاده‌سازی شده‌اند.

  • با کمک گزینه‌ی –h می‌توان نسخه‌ی tcpdump و گزینه‌های مختلف آن را مشاهده کرد.
tcpdump -h

استفاده از tcpdump - تصویر 1

چون برای استفاده از tcpdump نیاز به دسترسی root است، استفاده از sudo پیش از دستور tcpdump ضروری است.

  • با استفاده از دستور زیر می‌توان فهرست اینترفیس‌های مختلف موجود روی دستگاه را مشاهده و اینترفیس مناسب را انتخاب کرد. گزینه‌ی any از تمام اینترفیس‌ها برای کپچر پکت‌ها استفاده می‌کند.
sudo tcpdump -D

استفاده از tcpdump - تصویر 2

  • اگر از گزینه‌ی any استفاده شود، ابزار tcpdump به‌شکل پی‌درپی log انداخته و برای توقف روند لاگ‌اندازی آن باید از Ctrl + c استفاده کرد.

استفاده از tcpdump - تصویر 3

  • برای مشخص کردن تعداد پکت‌هایی که باید کپچر شوند، می‌توان از گزینه‌ی –c استفاده کرد.
sudo tcpdump –i any –c 4‎

استفاده از tcpdump - تصویر 4

  • گزینه –n مانع از تبدیل IP و port مبدا و مقصد به اسامی آن‌ها می‌شود.

استفاده از tcpdump - تصویر 5

  • اگر در انتهای دستور پیش از گزینه‌ی –s [byte_size] استفاده شود، می‌توان سایز پکت‌های در حال کپچر را از مقدار پیش‌فرض 262144 تغییر داد و مقداری دل‌خواه را برای سایز آن‌ها به بایت مشخص کرد.

استفاده از tcpdump - تصویر 6

  • در حالت پیش‌فرض، در بسته‌های متوالی یک جریان، تنها برای پکت اول sequence number و acknowledge number نشان داده می‌شود. با استفاده از گزینه –S این حالت غیرفعال و برای تمام پکت‌ها sequence و acknowledge نمایش داده می‌شود.

  • برای ذخیره کردن داده‌های capture شده می‌توان از دستور زیر استفاده کرد.
sudo tcpdump –i any –c 10 –w capture.pcap

  • از دستور زیر برای خواندن فایل‌های pcap ذخیره شده استفاده می‌شود.
sudo tcpdump –r capture.pcap

  • گزینه –c، هنگام ذخیره‌ی بسته‌ها در فایل هم قابلیت استفاده دارد. در این حالت، به اندازه‌ی عدد مشخص شده جلوی گزینه –c، بسته‌ها در فایل ذخیره می‌شوند.

  • از گزینه –c هنگام خواندن یک فایل نیز می‌توان استفاده کرد. در این حالت، تنها به اندازه‌ی عدد مشخص شده جلوی –c، از ابتدای فایل مورد نظر روی صفحه ترمینال نمایش داده می‌شود.

  • با گزینه –C می‌توان بیش‌ترین حجم فایلی که اطلاعات در آن ذخیره می‌شود را تعیین کرد. دقت کنید که حجم مشخص شده در مقابل –C در واحد مگابایت است. برای نمونه، -C 2 بیان‌گر آن است که بیش‌ترین حجم فایل ۲ مگابایت است.
sudo tcpdump –i any –w capture.pcap -v –C 2‎

  • از گزینه –C می‌توان برای تقسیم کردن یک فایل با حجم بالا به قطعات برابر و کوچک‌تر استفاده کرد.

  • در ابزار tcpdump فیلترهایی وجود دارد که با استفاده از آن‌ها می‌توان پکت‌هایی با ویژگی مشخص را capture کرد. فیلتر براساس host یکی از کاربردی‌ترین آن‌هاست. با استفاده از این فیلتر، پکت‌هایی که یکی از طرفین آن‌ها (مبدا یا مقصد) IP مشخص شده باشد، capture می‌شوند.
sudo tcpdump –i any –c 5 host [IP] -n

  • امکان محدود کردن فیلتر host بیش از این نیز وجود دارد. با استفاده از گزینه‌ی src، تنها پکت‌هایی که IP مشخص شده، مبدا آن‌ها باشد، فیلتر می‌شوند. فیلترهای مشابه دیگری مانند فیلتر net یا port نیز می‌توانند با src محدود شوند.

  • فیلتر دیگر مشابه src، گزینه‌ی dst است. با استفاده از این گزینه، تنها بسته‌هایی capture می‌شوند که IP مشخص شده، مقصد آن‌ها باشد. فیلترهای مشابه دیگری مانند فیلتر net یا port نیز می‌توانند با dst محدود شوند.

  • یک فیلتر کاربردی دیگر، فیلتر net است. با استفاده از این فیلتر می‌توان با کمک netmask، پکت‌هایی را فیلتر کرد که IP آن‌ها، زیرمجموعه‌ای از مجموعه IP اعلام شده باشد. برای نمونه، در خروجی نشان‌ داده شده در تصویر زیر، IPهای 172.x.x.x فیلتر می‌شوند.

نمونه‌ی دیگر:

sudo tcpdump –i any –c 5 net 172.131 -n
  • در فیلترها می‌توان از دستورات منطقی مانند and، or، not و مشابه آن‌ها استفاده کرد.

  • برای کپچر پکت‌های یک پروتکل روی یک پورت خاص از گزینه‌ی port استفاده می‌شود. برای نمونه port 80 مربوط به HTTP و یا port 443 مربوط به HTTPS است.
sudo tcpdump –i any –c [count] -n port [port_number]‎

  • در ابزار tcpdump می‌توان فیلتر‌های مختلف را با هم ترکیب کرد و با ساختن یک عبارت که داخل ” ” قرار می‌گیرد یک فیلتر جدید ساخت.

  • از گزینه –e برای نمایش ترافیک میان مبدا و مقصد براساس آدرس لایه دوم شبکه استفاده می‌شود.

  • یکی از انواع فیلترهای مورد استفاده، فیلتر براساس TCP Flags است.
sudo tcpdump –i any –c [count] " tcp[tcpflags] & tcp-(1 of 7 flags) != 0"‎

  • از انواع دیگر فیلترها می‌توان به فیلتر براساس نوع پروتکل‌ اشاره کرد. برای نمونه icmp، tcp و udp از جمله این موارد هستند.

  • از گزینه –A برای نمایش پکت‌ها به‌شکل ASCII استفاده می‌شود.

  • گزینه –t اطلاعات مربوط به timestamp را پنهان می‌کند.

  • گزینه‌ی –tt، timestamp را به‌شکل فاصله‌ی زمانی از تاریخ 1 January 1970 نمایش می‌دهد.

  • گزینه –ttt زمان بسته را به‌شکل فاصله‌ی زمانی آن از بسته قبلی نمایش می‌دهد.

  • گزینه –tttt زمان بسته را به کامل‌ترین شکل (شامل سال، ماه، روز، ساعت، دقیقه، ثانیه و نانوثانیه) نمایش می‌دهد.

  • گزینه –ttttt زمان بسته را به‌شکل فاصله‌ی زمانی آن از بسته‌ی اول نمایش می‌دهد.

  • گزینه‌های –v ، -vv و –vvv به ترتیب اطلاعات بیش‌تری درباره‌ی بسته‌ها نمایش می‌دهند.

  • استفاده از گزینه –q بر خلاف –v و امثال آن، اطلاعات بسته‌ها را کم‌تر و خلاصه‌تر نشان می‌دهد.

  • گزینه -# برای هر پکت شماره‌ی مربوط به آن را لحاظ و نمایش می‌دهد.

  • گزینه –x اطلاعات پکت‌ها را به‌شکل hexadecimal نمایش ‌می‌دهد. اما اطلاعات link level header را نشان نمی‌دهد.

  • گزینه –xx اطلاعات پکت‌ها را به‌شکل hexadecimal نمایش ‌می‌دهد. در این حالت برای هر بسته، اطلاعات link level header نیز نمایش داده می‌شود.

  • گزینه –L تمام انواع لینک داده‌های موجود برای یک اینترفیس را نمایش می‌دهد.

  • گزینه –X تمام امکانات –x را داشته و علاوه‌بر hexadecimal، اطلاعات را به‌شکل ASCII نیز نمایش می‌دهد.

  • گزینه –XX تمام امکانات –xx را دارد و علاوه‌بر hexadecimal، اطلاعات را به‌شکل ASCII نیز نمایش می‌دهد.

  • هنگام استفاده از گزینه –vv یا –vvv اطلاعاتی درباره checksum هر بسته و درست یا نادرست بودن آن نمایش داده می‌شود. با استفاده از گزینه –K می‌توان آن را غیرفعال کرد.

  • با استفاده از گزینه –Q می‌توان بسته‌های ورودی یا خروجی را کپچر کرد. اگر پس از آن عبارت in درج شود، پکت‌های ورودی کپچر و اگر از out استفاده شود، پکت‌های خروجی کپچر می‌شوند.

  • با گزینه‌ی –a می‌توان آدرس‌های شبکه و broadcast را به نام تبدیل کرد.

  • با استفاده از فیلتر less می‌توان تنها پکت‌هایی را که اندازه‎ای کم‌تر از مقدار مشخص شده دارند، capture کرد.

  • با استفاده از فیلتر greater می‌توان تنها پکت‌هایی را که اندازه‎ای بیش‌تر از مقدار مشخص شده دارند، capture کرد.

  • گزینه –W تعداد فایل‌هایی که قرار است ایجاد شوند را محدود می‌کند. برای نمونه، اگر هنگام استفاده از –C برای محدود کردن حجم فایل‌ها از –W نیز استفاده شود، تعداد فایل‌ها بیش‌تر از مقدار تعیین شده نخواهد شد. در نمونه‌ی زیر، پس از کامل شدن حجم دو فایل، باقی پکت‌ها روی فایل اول نوشته می‌شوند.

  • گزینه –T با مشخص کردن نوع پروتکل، پکت‌ها را با همان نوع خاص تفسیر می‌کند.
sudo tcpdump –i any –c [count] –T [type]‎

  • درنهایت با استفاده از گزینه –F می‌توان فیلترهای مورد نظر را از یک فایل متنی خوانده و به ابزار tcpdump داد.
sudo tcpdump –i any –c [count] –w [name].pcap –F [file_name]‎

× برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید