آموزش TCPDUMP با مثال – ۵۰ راه برای جداسازی ترافیک

آموزش tcpdump با مثال – ۵۰ راه برای جداسازی ترافیک

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

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

TCP Header
THE TCP HEADER

tcpdump ابزاری است که هر فردی برای تحلیل و تجزیه بسته های شبکه باید یاد بگیرد.

اجازه دهید با یک دستور مقدماتی که ترافیک HTTPS را نمایش می دهد، شروع کنیم:

tcpdump -nnSX port 443
۰۴:۴۵:۴۰٫۵۷۳۶۸۶ IP 78.149.209.110.27782 > 172.30.0.144.443: Flags [.], ack 
۲۷۸۲۳۹۰۹۷, win 28, options [nop,nop,TS val 939752277 ecr 1208058112], length 0
    ۰x0000:  4500 0034 0014 0000 2e06 c005 4e8e d16e  E..4........N..n
    ۰x0010:  ac1e 0090 6c86 01bb 8e0a b73e 1095 9779  ....l......>...y
    ۰x0020:  8010 001c d202 0000 0101 080a 3803 7b55  ............8.{U
    ۰x0030:  4801 8100

خروجی فوق بخشی از ترافیک HTTPS را به صورت hex نمایش می دهد که البته رمز شده است. به یاد داشته باشید که دستور بالا را با هر پورتی که مورد نظر خودتان هست می توانید اجرا نمایید.

با استفاده از گزینه nn- پورتها و hostname ها resolve نمی شوند. با استفاده از گزینه S- تمام بسته را دریافت می کنید. با استفاده از گزینه X- خروجی hex را دریافت می نمایید.

اگر بخواهید تنها یک بسته را دریافت کنید از گزینه c 1- استفاده کنید و اگر خواستار دریافت تعداد مشخص n بسته هستید از c n- استفاده کنید.

مثال ها

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

همه چیز روی یک Interface

با استفاده از دستور زیر می توانید تما ترافیک روی یک interface را ببینید و متوجه شوید چه چیزی در حال رخ دادن است:

tcpdump -i eth0

اگر دوست دارید ترافیک تمام interface ها را ببینید، از گزینه i any- استفاده نمایید.

جستجوی ترافیک بر اساس IP

یکی از رایجترین پرس و جوها، استفاده از گزینه host است. مثلا با استفاده از دستور زیر می توان ترافیک به/از آدرس ۱٫۱٫۱٫۱ را مشاهده نمود:

tcpdump host 1.1.1.1
۰۶:۲۰:۲۵٫۵۹۳۲۰۷ IP 172.30.0.144.39270 > one.one.one.one.domain: 
۱۲۷۹۰+ A? google.com. 
(۲۸) ۰۶:۲۰:۲۵٫۵۹۴۵۱۰ IP one.one.one.one.domain > 172.30.0.144.39270: 
۱۲۷۹۰ ۱/۰/۰ A 172.217.15.78 (44)

پالایش مبدا و یا مقصد

اگر می خواهید ترافیک را فقط در یک جهت مشاهده نمایید می توانید از گزینه های src و یا dst استفاده نمایید:

tcpdump src 1.1.1.1 
tcpdump dst 1.0.0.1

جستجوی بسته ها بر اساس Network

برای جستجوی بسته هایی که از یک شبکه و یا زیرشبکه خاص وارد می شوند و یا به آن ارسال می شوند، از گزینه net استفاده نمایید:

tcpdump net 1.2.3.0/24

شما به خوبی می توانید این دستور را با گزینه های src و dst ترکیب کنید.

دریافت محتوای بسته ها به صورت Hex

وقتی می خواهید محتوای بسته ها را در جستجوی خود ببینید استفاده از خروجی hex مفید است، خصوصا زمانی که می خواهید چند بسته را به عنوان نمونه به صورت دقیق تر بررسی نمایید.

tcpdump -c 1 -X icmp
A SINGLE ICMP PACKET VISIBLE IN HEX
A SINGLE ICMP PACKET VISIBLE IN HEX

نمایش ترافیک مربوط به یک پورت خاص

برای نمایش ترافیک یک پورت خاص می توانید از گزینه port استفاده کنید که پس از آن هم شماره پورت مورد نظر را مشخص می نمایید.

tcpdump port 3389 
tcpdump src port 1025

نمایش ترافیک یک پروتکل

اگر در جستجوی نوع مشخصی از ترافیک هستید، می توانید از tcp, udp, icmp و خیلی گزینه های دیگر استفاده نمایید.

tcpdump icmp

نمایش ترافیک فقط برای IP6

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

tcpdump ip6

جستجوی ترافیک با محدوده پورت

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

tcpdump portrange 21-23

جستجوی ترافیک بر مبنای اندازه بسته

اگر به دنبال بسته هایی با اندازه ای مشخص هستید می توانید از این گزینه ها استفاده کنید. می توانید از گزینه less، greater و یا نمادهای مرتبط با آنها که در ریاضیات انتظار دارید؛ بهره ببرید.

tcpdump less 32 
tcpdump greater 64 
tcpdump <= 128

خواندن/نوشتن ترافیک از/در فایل

اغلب مفید است که ترافیک ضبط شده، به منظور تحلیل بیشتر در آینده، در یک فایل ذخیره شود. این فایل ها تحت عنوان فایل های (PCAP (PEE-cap شناخته می شوند. و توسط صدها نرم افزار مختلف از قبیل ابزارهای تحلیل شبکه، سیستم های تشخیص نفوذ و البته خود tcpdump قابل پردازش هستند. مطابق دستور زیر می توانید ترافیک را در فایلی با نام capture_file با استفاده از گزینه w- ذخیره نمایید:

tcpdump port 80 -w capture_file

با استفاده از گزینه r- می توانید فایل های PCAP را بخوانید. توجه داشته باشید که می توانید از دستورات معمول tcpdump در هنگام خواندن فایل استفاده نمایید؛ شما تنها به این واقعیت محدود شده اید که نمی توانید آنچه در حال حاضر در فایل وجود ندارد را پردازش و ضبط نمایید.

tcpdump -r capture_file

یک گام به جلو

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

گزینه های بیشتر

راه های دیگری برای به کارگیری tcpdump وجود دارد که به آنها اشاره ای می کنیم:

  • X- : محتوای بسته ها را در قالب hex و ascii نمایش می دهد.
  • XX- : همانند X- است اما علاوه بر آن Ethernet header را نیز نمایش می دهد.
  • D- : لیست تمام رابط ها (interfaces) را نمایش می دهد.
  • l- : خروجی به صورت خط قابل خواندن ( Line-readable ) برای مشاهده مانند چیزی که ذخیره شده است و یا برای ارسال به دستورات دیگر.
  • q- : از نمایش خروجی های اضافه جلوگیری می کند.
  • t- : برچسب های زمانی خوانا برای انسان را در خروجی نمایش می دهد.
  • tttt- : برچسب های زمانی را با بالاترین درجه خوانایی برای انسان در خروجی نمایش می دهد.
  • i eth0- : به واسط eth0 گوش می کند.
  • vv- : خروجی مفصل تری را نشان می دهد.
  • c- : تنها تعداد x بسته را دریافت کرده و سپس متوقف می شود.
  • e- : سرآیند (ethernet) را نیز دریافت می کنید.
  • q- : اطلاعات پروتکل کمتری را نمایش می دهد.
  • E- : ترافیک IPSEC را با یک کلید رمزنگاری، از حالت رمز شده خارج می کند.

همه چیز در مورد ترکیب دستورات

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

  1. AND 
    and یا &&
  2. OR 
    or یا ||
  3. EXCEPT 
    not یا !

نمایش خروجی خام

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

tcpdump -ttnnvvS

در ادامه مثال های بیشتری از ترکیب دستورات را نمایش می دهیم.

از یک IP مشخص به مقصد یک پورت خاص

بیایید ترافیکی که از آدرس ۱۰٫۵٫۲٫۳ به هر هاستی با شماره پورت ۳۳۸۹ ارسال می شود را مشاهده کنیم:

tcpdump -nnvvS src 10.5.2.3 and dst port 3389

از یک شبکه به شبکه دیگر

تمام ترافیک که از شبکه *.*.۱۹۲٫۱۶۸ می آید و به شبکه های *.۱۰ یا *.*.۱۷۲٫۱۶ ارسال می شود را به صورت hex و بدون هیچ گونه وضوح و با یک درجه از تفصیل نمایش می دهیم.

tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

ترافیک غیر از ICMP به یک آدرس مشخص

دستور زیر تمام ترافیکی که به آدرس ۱۹۲٫۱۶۸٫۰٫۲ ارسال می شود و از نوع ICMP نیست را نمایش می دهد.

tcpdump dst 192.168.0.2 and src net and not icmp

ترافیک از یک هاست مشخص که به یک پورت خاص نیست

دستور زیر تمام ترافیک از یک هاست خاص را نمایش می دهد که از نوع SSH نیست (فرض کرده ایم که از پورت پیش فرض استفاده شده است)

tcpdump -vv src mars and not dst port 22

همانطور که می بینید شما می توانید پرس و جوی خود را برای هر آنچه به آن نیاز دارید انجام دهید. نکته مهم این است که ابتدا دقیقا بدانید چه چیزی می خواهید و سپس ساختار دستوری مناسب برای جداسازی ترافیک مورد نظر خود را بنویسید.
به یاد داشته باشید، زمانی که تصمیم دارید جست و جوهای پیچیده ای بنویسید؛ ممکن است نیاز داشته باشید که گزینه های خود را در نقل قول های تکی (single quotes) گروه بندی کنید. استفاده از نقل قول تکی به tcpdump اعلام می کند که کاراکترهای ویژه معینی را نادیده بگیرد. در مثال زیر کاراکترهای “( )” این وضعیت را دارند. این روش می تواند برای گروه بندی عبارات دیگری نظیر host، net، port و … مورد استفاده قرار بگیرد.

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

جداسازی TCP Flags

شما همچنین می توانید از فیلترها برای جداسازی بسته ها بر اساس پرچم های TCP استفاده نمایید.

جداسازی با پرچم RST

tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'

فیلترهای بالا بسته های مختلفی را پیدا می کنند چرا که [tcp[13 به اندیس ۱۳ از سرآیند TCP رجوع می کند. عدد نشان دهنده محل در بایت است و ۰=! به این معنی است که پرچم مورد نظر برابر با ۱ است و به عبارتی روشن است.

جداسازی با پرچم SYN

tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'

جداسازی بسته هایی که هر دو پرچم SYN و ACK برای آنها تنظیم شده است

tcpdump 'tcp[13]=18'

تنها پرچم های PSH، RST، SYN و FIN در فیلد پرچم های خروجی tcpdump نمایش داده می شوند. پرچم های URG و ACK نمایش داده می شوند اما در جای دیگری غیر از فیلد پرچم ها در خروجی نشان داده می شوند.

جداسازی با پرچم URG

tcpdump 'tcp[13] & 32!=0'
tcpdump 'tcp[tcpflags] == tcp-urg'

جداسازی با پرچم ACK

tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'

جداسازی با پرچم PSH

tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-psh'

جداسازی با پرچم FIN

tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'

مثال هایی از دستورات روزانه

حالا که با تئوری کار آشنا شدید، مثال هایی از دستورهایی می آوریم که می توانید انواع مختلفی از ترافیک را با آنها به دست بگیرید.

پرچم SYN و RST تنظیم شده است

tcpdump 'tcp[13] = 6'

از آنجایی که tcpdump می تواند محتوای خروجی را در قالب ASCII نمایش دهد، شما می توانید با استفاده از ابزارهای دیگر خط فرمان نظیر grep برای جستجوی متن کامل محتوا استفاده نمایید.
گزینه l- به شما این امکان را می دهد که ترافیک را همانگونه که دریافت می کنید مشاهده کنید و این زمانی که آن را به دستوری همچون grep ارسال می کنید کمک کننده است.

HTTP User Agents

tcpdump -vvAls0 | grep 'User-Agent:'

درخواست های GET

tcpdump -vvAls0 | grep 'GET'

پیدا کردن Host سرآیند HTTP

tcpdump -vvAls0 | grep 'Host:'

پیدا کردن کوکی های HTTP

tcpdump -vvAls0 | grep 'Set-Cookie|Host:|Cookie:'

پیدا کردن ارتباطات SSH

tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'

پیدا کردن ترافیک DNS

tcpdump -vvAs0 port 53

پیدا کردن ترافیک FTP

tcpdump -vvAs0 port ftp or ftp-data

پیدا کردن ترافیک NTP

tcpdump -vvAs0 port 123

یافتن کلمات عبور در متن کامل

tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

پیدا کردن ترافیک با Evil bit

بیتی در سرآیند IP وجود دارد که هیچگاه توسط نرم افزارهای قانونی تنظیم نمی شود و “Evil Bit” نامیده می شود. یک فیلتر بامزه وجود دارد که بسته هایی که این بیت را تغییر داده اند نمایش می دهد.

tcpdump 'ip[6] & 128 != 0'

خلاصه

در پایان نکات زیر قابل بیان هستند:

  • tcpdump یک ابزار ارزشمند برای هر کسی است که در زمینه شبکه و یا امنیت اطلاعات فعالیت می کند.
  • به دلیل ارتباطی که با ترافیک برقرار می کند به همراه دقت بالایی که در بررسی بسته ها ارائه می کند، آن را به یکی از بهترین ابزارهای ممکن برای یادگیری TCP/IP تبدیل می کند.
  • تحلیل گرهای پروتکل نظیر Wireshark عالی هستند، اما اگر می خواهید به راستی به مهارت استادی در بررسی بسته ها دست پیدا کنید باید ابتدا با tcpdump آغاز کنید.

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

منبع: A tcpdump Tutorial with Examples — ۵۰ Ways to Isolate Traffic
ترجمه: سیدمحمدحسین طباطبایی بالا

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *