احسان امجدی
کارشناس امنیت اطلاعات و ارتباطات

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

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

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

منظور از TCPdump و WinDump چیست؟

چرا از TCPdump استفاده میکنیم؟

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

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

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

TCPdump یک ابزار شنود بسته های اطلاعاتی است که توسط مدیران شبکه (بصورت مجاز) و اتکرها (بصورت غیرمجاز) برای شنود و تحلیل ترافیک موجود در شبکه استفاده میشود. در واقع دو کاربرد تحلیل اطلاعات و همچنین تشخیص وجود ارتباط بین مبداء و مقصد را میتوان علل اصلی استفاده از این ابزار دانست.

نحوه نصب در لینوکس/ یونیکس

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

نصب TCPdump از طریق RPM

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

rpm –q TCPdump

اجرای این فرمان در خروجی باید چیزی شبیه به عبارت زیر را نشان شما دهد (بسته به نوع ورژن مورد استفاده، این عبارت ممکن است کمی متفاوت باشد)

root@Ehsan:~#  rpm –q TCPdump
TCPdump-3.7.2-1.9.1

نکته: واژه RPM مختصر شده عبارت RedHat Package Management است، آپشن –q خلاصه شده کلمه query است. البته ذکر این نکته ضروریست که استفاده از rpm منوط به وجود آن بر روی سیستم عامل تان است و در غیر اینصورت باید ان دریافت و نصب کنید.بهر صورت اگر ابزار TCPdump بر روی سیستم شما نصب نباشد، در ازای اجرا کردن فرمان بالا، عبارتی مشابه عبارت زیر بشما نمایش داده میشود:

root@Ehsan:~# rpm –q TCPdump
package TCPdump is not installed

اگر پکیج TCPdump نصب نشده باشد، میتوانید آن را از طریق سورس سیستم عامل و یا Repository های مربوطه دریافت کنید. قطعا دریافت پکیج از طریق سورس سیستم عامل ساده ترین راه است که از طریق زیر انجام میشود. در مرحله نسخت باید مشخص کنیم که آیا libpcap مربوط به rpm نصب شده است یا خیر. فرض را بر این میگذاریم که نصب نشده باشد؛ پس داریم:

rpm –ivh libpcap-0.7.2-1.1386.rpm

و در ادامه ...

rpm –ivh TCPdump-3.7.2-1.9.1.rpm

با این کار میتوانیم پکیج مورد نظرمان را نصب کرده و با خیال راحت از ابزار TCPdump استفاده کنیم.

نصب TCPdump با استفاده از فرمان apt-get

اگر توزیع شما از apt-get پشتیبانی میکند، میتوانید با استفاده از این فرمان، TCPdump را نصب کنید. خوبی فرمان apt-get اینست که در صورتی که بسته مورد نظر شما برای نصب، به موارد دیگری هم وابستگی داشته باشد، آن ها را نیز برایتان انجام میدهد:

Apt-get install tcpdump

و یا در صورتی که TCPdump روی سیستم وجود دارد و میخواهید ان را آپدیت کنید:

Apt-get upgrade tcpdump

دریافت و نصب TCPdump از طریف آفلاین و سایت های منبع

ممکن است شما به CD های سیستم عامل دسترسی نداشته باشد. مشکلی وجود ندارد؛ راه جایگزین، نصب TCPdump از طریق مراجعه به آدرس http://www.TCPdump.org و پیدا کردن ورژن مورد نظرتان است. مهم است که بدانید قبل از نصب TCPdump باید libpcap را نصب کرده باشید.

Libpcap یک فایل کتابخانه ای ست که مکانیسم های فیلترینگ پکت مبتنی بر (BSD packet filter (BPF را در خود دارد. برای دریافت و نصب این فایل به آدرس http://freshmeat.net/projects/libpcap و یا همان ادرس http://www.TCPdump.org مراجعه کنید. TCPdump بدون این فایل فقط یک ابزار است و کاری نمیتواند انجام دهد. فایل های مورد نظر را دانلود کرده و در یک دایرکتوری موقت ذخیره کنید. در صفحه شل به مسیر دایرکتوری موقت رفته و دستور زیر را تایپ کنید:

Tar –zxvf libpcap-0.8.3.tar.gz

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

Tar –zxvf TCPdump-3.8.3.tar.gz

نکته: "tar"، یک برنامه آرشیوی مانند winzip در ویندوز است که برای ذخیره سازی و استخراج فایل ها از فایل های آرشیو شده یا tarfile ها طراحی شده است. خوب با این کار توانستیم فایل های مورد نظرمان را از حالت آرشیوی خارج کنیم و آن ها را برای ادامه کار آماده کنیم. بعد از ان که این مراحل را پشت سر گذاشتید، میتوانید دایرکتوری های libpcap-0.8.3 و TCPdump-3.8.3 را مشاهده کنید. اول به مسیر دایرکتوری libpcap-0.8.3 رفته و دستورات زیر را اجرا میکنیم:

./configure
./make or make
./make install or make install

نکته: برای این کار حتما باید از یوزر root استفاده کنید و یا ان که دسترسی آن را داشته باشید.همین کار را برای TCPdump-3.8.3 در مسیر آن اجرا کنید. این کار باعث میشود تا libpcap و TCPdump را نصب کنید. حالا آماده هستید تا از این ابزار استفاده کنید.

آموزش شنود ترافیک شبکه با TCPDump

بعد از نصب TCPdump باید با آن چه‌کاری را انجام دهیم؟ در اکثر توزیع های یونیکس//لینوکس، برای استقاده و اجرای TCPdump نیاز به سطح دسترسی root دارید؛ بخاطر انکه دسترسی و خواندن پکت ها دسترسی ای میخواهد که دیوایس فقط ان را به root میدهد. در ویندوز هم اگر WinDump را نصب کرده اید، برای استفاده از آن خودتان را اماده کنید. برای اجرای TCPdump//WinDump، فقط کافیست عبارت زیر را تایپ کنید:

TCPdump

root@Ehsan:~# TCPdump
TCPdump: listening on eth0

0 packets received by filter
0 packets dropped by kernel
…

WinDump

C:\Users\Ehsan\Desktop\WinDump>WinDump.exe
WinDump.exe: listening on \Device\NPF_{11FB32C3-7A19-4106-949D-6824D157C848}

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

C:\Users\Ehsan\Desktop\WinDump>WinDump –D
1.	\Device\NPF_{ 11FB32C3-7A19-4106-949D-6824D157C848} (Belkin 11mbps
Wireless Notbook Network Adapter (Microsofts packet scheduler) )
2.	\Device\NPF_{ 152FB32C3-7J12-9606-949D-6824D157Vg675} (Intel® PRO/100 VE Network Connection  (Microsofts packet scheduler) )
3.	\Device\NPF_{ 152UK672C3-7J12-9606-949D-6824D1YT78645} (VMWare Virtual Ethernet Adapter)
4.	\Device\NPF_{ 152UK672C3-7J12-9606-949D-6824D1YT58Okjh} (VMWare Virtual Ethernet Adapter)

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

Ifconfig

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

WinDump –i 1

C:\Users\Ehsan\Desktop\WinDump>WinDump –i 1
WinDump: listening on \Device\NPF_{5864H-45Hgh-ABgh654-917hgTY5264}

TCPdump –i eth0

root@Ehsan:~# TCPdump -i eth0
TCPdump: listening on eth0

0 packets received by filter
0 packets dropped by kernel

برای انکه بتوانید انواع ترافیکی که مد نظرتان است را انتخاب کنید، میتوانید ان را بعد از نام اینترفیس، مشخص کنید. در این مثال ما میخواهیم ترافیک TCP را مشاهده کنیم:

root@Ehsan:~# TCPdump -i eth0 tcp

یا

C:\Users\Ehsan\Desktop\WinDump>WinDump -i 1 tcp

بسیارخوب. توانستیم مشکل فیلترکردن را حل کنیم. اما با این حال هنوز هم حجم دیتایی که به خروجی میآید بسیار زیاد است و نمیتوان گفت که خروجی ما بهینه شده است. TCPdump بما آپشنی میدهد که بوسیله ان میتوانیم رکوردهای موجود در خروجی را به فرمت باینری درآورده و با dump (ذخیره) کردن ان ها، در فرصت مناسب آن ها را بخوانیم. ما این کار را با آپشن "w filename-" انجام میدهیم.

root@Ehsan:~# TCPdump -i eth0 –f myfiltrer.txt –w LSOoutput
TCPdump: listening on eth0

118 packets received by filter
0 packets dropped by kernel

یا

C:\Users\Ehsan\Desktop\WinDump>WinDump -i 1 –f myfiltrer.txt –w LSOoutput
WinDump: listening on \Device\NPF_{5864H-45Hgh-ABgh654-917hgTY5264}
45 packets received by filter
0 packets dropped by kernel

با این کار میتوانید ترافیک موجود در خروجی را بشکل باینری به خروجی ببرید و با استفاده از آپشن r filename- در زمان دلخواه ان ها را مطالعه کنید. در دو آپشن بالا w- مخفف write و r- مخفف read است.

root@Ehsan:~# TCPdump -i eth0 –f myfiltrer.txt –r LSOoutput
09:26:54.194409 192.168.64.128.32856 > 66-193-231.87.dimenoc.com.http: S
170526548523:170526548523 (0) win 5840 < mss 1460,sackOK,timestamp 308912,nop,wscal 0> (DF)
---- EDITED----
root@Ehsan:~#

یا

C:\Users\Ehsan\Desktop\WinDump>WinDump -i 1 –f myfiltrer.txt –r LSOoutput
09:26:54.194409 192.168.64.128.32856 > 66-193-231.87.dimenoc.com.http: S
170526548523:170526548523 (0) ack 985 632525 win 5840 < mss 1460,sackOK,timestamp 308912,nop,wscal 0> (DF)
---EDITED---
C:\Users\Ehsan\Desktop\WinDump>

مانا باشید.


احسان امجدی
احسان امجدی

کارشناس امنیت اطلاعات و ارتباطات

احسان امجدی ، مشاور امنیت اطلاعات و ارتباطات و تست نفوذ سنجی ، هکر کلاه سفید ، مدرس دوره های تخصصی امنیت اطلاعات و شبکه ، تخصص در حوزه های سرویس های مایکروسافت ، Routing و Switching ، مجازی سازی ، امنیت اطلاعات و تست نفوذ ، کشف جرائم رایانه ای و سیستم عامل لینوکس ، متخصص در حوزه SOC و ...

نظرات