شما برای مطالعه این مقاله فقط 6 دقیقه وقت نیاز دارید

tcpdump-command-in-linux

آموزش نصب دستور tcpdump در لینوکس و نحوه استفاده از آن

5/5 - (1 امتیاز)

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

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

کاربردهای دستور tcpdump در لینوکس

  • نمایش رابط های شبکه در دسترس
  • ضبط و نمایش ترافیک شبکه در فرمت های مختلف
  • فیلتر کردن ترافیک بر اساس پارامترهای مختلف
  • ضبط تعداد محدودی از بسته ها
  • بررسی ترافیک شبکه بین دو میزبان خاص
  • ذخیره کردن پکت ها در فایل خروجی
  • خطایابی و دیباگ شبکه

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

پیش نیازهای استفاده از ابزار tcpdump

  • سیستم یا سرور لینوکس
  • دسترسی به ترمینال
  • دسترسی به حساب کاربری sudo
  • اتصال اینترنتی پایدار یا دسترسی به شبکه lan
  • نصب بودن دستور tcpdump 

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

نصب tcpdump در توزیع های مختلف لینوکس

دستور نصب tcpdump در توزیع های مبتنی بر دبیان مثل اوبونتو

sudo apt install tcpdump

دستور نصب tcpdump در توزیع های مبتنی بر RedHat مثل CentOS و فدورا

sudo yum install tcpdump

یا

sudo dnf install tcpdump

دستور نصب tcpdump در توزیع آرچ لینوکس 

sudo pacman -S tcpdump

دستور نصب tcpdump در توزیع OpenSUSE

sudo zypper install tcpdump

سینتکس دستور tcpdump در لینوکس

سینتکس پایه دستور tcpdump به صورت زیر است:

tcpdump [options] [filters]

options این امکان را به شما می دهند که رفتار دستور tcpdump را کنترل کنید.

filters هم برای اعمال یک سری فیلترهای خاص در خروجی tcpdump استفاده می شود.

آپشن های دستور tcpdump

آپشنکاربرد
A-نمایش پکت ها با فرمت ASCII
c-تعیین تعداد پکت ها
D-نمایش لیست رابط های شبکه در دسترس
i-تعیین رابط شبکه موردنظر برای مانیتور ترافیک
n-غیرفعال کردن تبدیل آدرس آی پی به اسم دامنه یا شماره پورت به اسم پورت
w-ذخیره خروجی tcpdump در یک فایل با فرمت pcap.
r-خواندن فایل خروجی tcpdump

مثال های کاربردی برای دستور tcpdump در لینوکس

این مثال ها به صورت مبتدی تا پیشرفته مرتب شده اند و با بررسی و امتحان کردن آنها می توانید نحوه کار کردن با این دستور را به طور کامل یاد بگیرید:

مانیتور پکت های مربوط به رابط شبکه فعلی

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

sudo tcpdump

فرمت خروجی این دستور به صورت زیر است:

<timestamp> <interface>: <source IP>.<source port> > <destination IP>.<destination port>: <protocol> <additional info>

timestamp : زمان دقیق ارسال یا دریافت بسته

interface : اسم رابط شبکه

source IP و destination IP : آدرس آی پی مبدا و مقصد بسته

source port و destination port : شماره پورت مبدا و مقصد بسته

protocol : پروتکل استفاده شده در بسته مثل TCP و UDP

additional info : اطلاعات بیشتر مثل فلگ ها یا وضعیت بسته

یک نمونه از خروجی دستور tcpdumpخروجی دستور tcpdump در لینوکس

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

برای اینکه پکت های ارسالی/دریافتی مربوط به یک اینترفیس خاص را مانیتور کنید، کافیست از آپشن i استفاده کنید و اسم اینترفیس را هم به دستور اضافه کنید:

sudo tcpdump -i wlo1

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

sudo tcpdump -D

حالا این شما هستید که باید اینترفیس موردنظر را انتخاب کنید و در دستور لحاظ کنید.

البته با دستور زیر می توانید پکت های مربوط به تمام رابط ها را ببینید:

sudo tcpdump -i any

نمایش تعداد خاصی از پکت ها

دستور tcpdump به طور پیش فرض تمام بسته های مربوط به رابط موردنظر را ضبط می کند و تا زمانی که با کلید ترکیبی Ctrl + C آن را متوقف نکرده اید، بدون هیچ محدودیتی به کار خود ادامه می دهد.

اگر نیاز به این دارید که برای تعداد پکت ها یک محدودیت لحاظ کنید، می توانید از آپشن c استفاده کنید.

sudo tcpdump -i eth0 -c 50

این دستور، فقط ۵۰ پکت اول رابط eth0 را نمایش می دهد و سپس متوقف می شود.

جلوگیری از DNS lookup در خروجی tcpdump

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

مثلاً به جای آدرس 172.112.12.16، example.com را نشان می دهد یا به جای ۸۰، http را نشان می دهد.

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

sudo tcpdump -n

نمایش خروجی با فرمت ASCII

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

sudo tcpdump -A -i eth0

در این حالت، با چنین خروجی مواجه خواهید شد:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

09:31:31.347508 IP 192.168.0.2.ssh > 192.168.0.1.nokia-ann-ch1: Flags [P.], seq 3329372346:3329372542, ack 4193416789, win 17688, length 196

M.r0...vUP.E.X.......~.%..>N..oFk.........KQ..)Eq.d.,....r^l......m\[email protected]_..J....i.*.....2f.mQH...Q.c...6....9.v.gb........;..4.).UiCY]..9..x.)..Z.XF....'|..E......M..u.5.......ul

09:31:31.347760 IP 192.168.0.1.nokia-ann-ch1 > 192.168.0.2.ssh: Flags [.], ack 196, win 64351, length 0

M....vU.r1~P.._..........

^C09:31:31.349560 IP 192.168.0.2.46393 > b.resolvers.Level3.net.domain: 11148+ PTR? 1.0.168.192.in-addr.arpa. (42)

E..F..@[email protected]+............1.0.168.192.in-addr.arpa.....

3 packets captured

11 packets received by filter

0 packets dropped by kernel

اگر خط به خط بررسی کنید:

کلیک کنید  روش های افزایش امنیت سرور ویندوز و لینوکس

listening on eth0 : دستور tcpdump به اینترفیس eth0 گوش می دهد. 

link-type EN10MB (Ethernet) : نوع لینک اترنت است.

capture size 65535 bytes : کل سایز ضبط شده از بسته ها، 65535 است.

هر خطی که با تایم استمپ شروع می شود، اطلاعات مربوط به بسته ضبط شده را نشان می دهد و با توجه به این که ۳ پکت ضبط شده است (3 packets captured)، سه خط داریم که با تایم استمپ شروع شده است و اطلاعات خاص خود را دارند.

اطلاعاتی مثل مبدا و مقصد پکت (198.168.0.2ssh > 192.168.0.1.nokia-ann-ch1) و فلگ ها که با بررسی دقیق تر می توانید به اطلاعات مفیدتری برسید.

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

tcpdump -XX -i eth0

فیلتر کردن خروجی tcpdump

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

با استفاده از قابلیت فیلترسازی tcpdump می توانید هر چیزی که نیاز دارید را در خروجی ببینید.

فیلتر با نوع پروتکل

برای این کار کافیست اسم پروتکل موردنظر خود را به عنوان فیلتر یا filters به دستور tcpdump اضافه کنید:

sudo tcpdump -n tcp

sudo tcpdump -n udp

sudo tcpdump -n icmp

sudo tcpdump -n arp

sudo tcpdump -n ip

sudo tcpdump -n ipv6

اگر می خواهید به جای اسم پروتکل، شماره پروتکل را در دستور tcpdump لحاظ کنید، کافیست از آپشن proto استفاده کنید:

sudo tcpdump -n proto 17

فیلتر با هاست

برای ضبط پکت های مربوط به یک هاست خاص، می توانید آدرس آی پی آن را به صورت زیر به دستور tcpdump اضافه کنید:

sudo tcpdump -n host 192.168.1.185

این دستور به طور خاص به دنبال پکت هایی است که آدرس مبدا یا مقصد آن، 192.168.1.185 است.

فیلتر با پورت

اگر می خواهید پکت های ارسالی/دریافتی از پورت موردنظر را بررسی کنید، می توانید فیلتر را بر اساس port اعمال کنید:

sudo tcpdump -n port 22

یا

sudo tcpdump -n port SSH

اگر رنج خاصی از پورت ها را در نظر دارید، می توانید دستور tcpdump را به صورت زیر اجرا کنید:

sudo tcpdump -n portrange 110-150

فیلتر با آدرس مبدا و مقصد

برای اینکه فیلترینگ را بر اساس آدرس آی پی یا پورت مبدا یا مقصد انجام دهید، می توانید از پارامترهای src و dst استفاده کنید:

sudo tcpdump -n src host 192.168.1.185

sudo tcpdump -n dst port 80

استفاده ترکیبی از فیلترها

برای این کار می توانید از عملگرهای(||) and (&&) or و (!) not استفاده کنید. برای مثال، اگر می خواهید ترافیک مربوط به هاست مبدا 192.168.1.185 با پروتکل tcp و پورت 80 را در خروجی tcpdump ببینید، می توانید از دستور زیر استفاده کنید:

sudo tcpdump -n src host 192.168.1.185 and tcp port 80

یا برای مانیتور تمام پکت های مربوط به مبدا 192.168.1.185 به جز پکت های مربوط به پورت ۲۲ را ببینید، می توانید از دستور زیر استفاده کنید:

sudo tcpdump -n src host 192.168.1.185 and not dst port 22

اگر در مورد نحوه استفاده از or هم نیاز به مثال دارید، مثلاً اگر می خواهید پکت های مربوط به پورت مقصد ۴۴۳ هر دو پروتکل tcp یا udp را در خروجی ببینید، می توانید دستور tcpdump را به صورت زیر اجرا کنید:

sudo tcpdump -n dst port 443 and (tcp or udp)

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

ذخیره خروجی tcpdump در یک فایل

یکی از مفیدترین ویژگی های tcpdump این است که می توانید بسته های خروجی را در یک فایل ذخیره کنید تا بعداً از آنها برای انجام تحلیل های متنوع کمک بگیرید.

برای این کار باید از آپشن w استفاده کنید:

sudo tcpdump -n -w data.pcap

این دستور در مسیر فعلی ترمینال یک فایل به اسم data.pcap ایجاد می کند (data اختیاری است ولی هر اسمی که می گذارید باید با پسوند pcap. باشد) ولی خروجی آن را به شما نشان نمی دهد.

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

sudo tcpdump -r data.pcap

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

سخن آخر

دستور tcpdump در لینوکس برای ضبط پکت های مربوط به رابط شبکه موردنظر استفاده می شود که با استفاده از آپشن های آن هم می توانید خروجی را به شکل دلخواه فیلتر کنید. 

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید