كيفية التقاط وتحليل حركة مرور الشبكة باستخدام برنامج tcpdump؟

tcpdump هي أداة سطر أوامر رائعة لاستنشاق الشبكة. إنه معيار صناعي لالتقاط حزم TCP / IP وتحليلها.

يمكن أن تكون أداة tcpdump مفيدة جدًا عند حل مشكلات الشبكات. يمكن حفظ الحزم في ملف وتحليلها لاحقًا. من الجيد تشغيل هذه الأداة من حين لآخر لمراقبة شبكتك.

كيف يبدو الناتج tcpdump؟

tcpdump يسمح لك بفحص رؤوس حزم TCP / IP. يقوم بطباعة سطر واحد لكل حزمة ، ويستمر تشغيل الأمر حتى تضغط على Ctrl + C للإنهاء.

دعنا نفحص سطرًا واحدًا من مثال الإخراج:

20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

يتضمن كل سطر

  • الطابع الزمني لـ Unix (20: 58: 26.765637)
  • بروتوكول (IP)
  • اسم مضيف المصدر أو IP ورقم المنفذ (10.0.0.50.80)
  • اسم مضيف الوجهة أو IP ورقم المنفذ (10.0.0.1.53181)
  • إشارات TCP (أعلام [F.]). تشير الأعلام إلى حالة الاتصال. يمكن أن يتضمن هذا أكثر من قيمة واحدة ، كما في هذا المثال [F.] لـ FIN-ACK. يمكن أن يحتوي هذا الحقل على القيم التالية:
    • S – SYN. الخطوة الأولى في إنشاء الاتصال.
    • F – FIN. إنهاء الاتصال.
    • . – ACK. تم استلام حزمة الإقرار بنجاح.
    • ف – دفع. يخبر المتلقي بمعالجة الحزم بدلاً من تخزينها مؤقتًا.
    • R – RST. توقف الاتصال.
  • رقم تسلسل البيانات في الحزمة. (فيما يليها 1)
  • رقم الإقرار (ack 2)
  • حجم النافذة (فوز 453). عدد البايتات المتوفرة في المخزن المؤقت للاستلام. يتبع ذلك خيارات TCP.
  • طول حمولة البيانات. (الطول 0)

تثبيت

في التوزيعات المبنية على دبيان ، يمكن تثبيت tcpdump باستخدام الأمر APT:

# apt install tcpdump -y

في التوزيعات المستندة إلى RPM ، يمكن تثبيت tcpdump مع YUM:

# yum install tcpdump -y

أو باستخدام DNF إذا RHEL 8

# dnf install tcpdump -y

خيارات الأمر tcpdump

يجب أن تكون جذرًا لتشغيل tcpdump. يتضمن العديد من الخيارات والفلاتر. سيؤدي تشغيل tcpdump بدون أي خيارات إلى التقاط جميع الحزم المتدفقة عبر الواجهة الافتراضية.

لمشاهدة قائمة واجهات الشبكة المتاحة على النظام والتي يمكن لـ tcpdump التقاط الحزم عليها.

# tcpdump -D

أو

# Tcpdump --list-interfaces
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]

هذا مفيد بشكل خاص على الأنظمة التي ليس لديها أمر لسرد الواجهات.

لالتقاط الحزم المتدفقة عبر واجهة معينة ، استخدم العلامة -i مع اسم الواجهة. بدون الواجهة -i ، ستلتقط tcpdump أول واجهة شبكة تصادفها.

# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64
01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64
01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64

يزيد العلم -v من المعلومات التي تراها حول الحزم ، ويمنحك -vv مزيدًا من التفاصيل.

  كيفية إضافة الموسيقى إلى Tik Tok Post

بشكل افتراضي ، يحل tcpdump عناوين IP لأسماء المضيف ويستخدم أيضًا أسماء الخدمة بدلاً من أرقام المنافذ. إذا كان DNS معطلاً أو كنت لا تريد أن يقوم tcpdump بإجراء عمليات البحث عن الاسم ، فاستخدم الخيار -n.

# tcpdump -n
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100

لالتقاط مجموعة من الخطوط فقط ، على سبيل المثال 5 ، استخدم العلامة -c:

#tcpdump -c 5
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100
5 packets captured

يستخدم الإخراج tcpdump الافتراضي طوابع زمنية Unix. لالتقاط الحزم ذات الطابع الزمني الذي يمكن للبشر قراءته:

# tcpdump -tttt
2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36
2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36
2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
2020-07-06 04:30:12.204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36

تعبيرات مرشح tcpdump

تعبيرات عامل التصفية تحدد رؤوس الحزمة التي سيتم عرضها. إذا لم يتم تطبيق أي مرشحات ، فسيتم عرض جميع رؤوس الحزم. المرشحات شائعة الاستخدام هي port، host، src، dst، tcp، udp، icmp.

  Xbox Series X مقابل Xbox Series S: أيهما يجب أن تشتريه؟

مرشح المنفذ

استخدم مرشح المنفذ لعرض الحزم التي تصل إلى منفذ معين:

# Tcpdump -i eth1 -c 5 port 80
23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0
23:54:24.978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0

مرشح المضيف

لالتقاط جميع الحزم التي تصل إلى المضيف أو تغادر منه بعنوان IP 10.0.2.15:

# tcpdump host 10.0.2.15
03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36
03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36
03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 72:108, ack 1, win 37232, length 36

لالتقاط حزم من نوع بروتوكول معين ، على سبيل المثال ، icmp ، على واجهة eth1:

# tcpdump -i eth1 icmp
04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64
04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64
04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64
04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64
04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64

الجمع بين تعبيرات المرشح

يمكنك دمج تعبيرات المرشح هذه مع عوامل التشغيل AND و OR و NOT. سيمكنك هذا من كتابة أوامر يمكنها عزل الحزم بدقة أكبر:

الحزم من IP محدد والمخصصة لمنفذ معين:

# tcpdump -n -i eth1 src 10.0.0.1 and dst port 80
00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0
00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0
00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1
00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0

لالتقاط جميع الحزم باستثناء ICMP ، استخدم عامل التشغيل NOT:

# tcpdump -i eth1 not icmp

حفظ رؤوس الحزم في ملف

نظرًا لأن إخراج tcpdump يمكن أن يمر عبر الشاشة بسرعة كبيرة ، يمكنك تخزين رؤوس الحزم في ملف بعلامة -w. تستخدم ملفات حفظ الإخراج تنسيق pcap ولها امتداد .pcap.

  كيفية إضافة Google DNS على جهاز iPhone الخاص بك

يرمز PCAP إلى التقاط الحزم. يحفظ الأمر التالي 10 سطور من الإخراج على واجهة eth1 إلى icmp.pcap.

# tcpdump -i eth1 -c 10 -w icmp.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

يمكنك قراءة هذا الملف بعلامة -r:

tcpdump -r icmp.pcap
reading from file icmp.pcap, link-type EN10MB (Ethernet)
05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64
05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64
05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64
05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64
05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 35, length 64

عرض تفاصيل الحزمة

حتى الآن ، رأينا فقط رؤوس الحزمة ، لعرض محتويات الحزمة ، استخدم الخيار -A. يؤدي هذا إلى طباعة محتويات الحزمة في ASCII ، والتي يمكن أن تساعد في استكشاف أخطاء الشبكة وإصلاحها. يمكن أيضًا استخدام علامة -X لعرض الإخراج بتنسيق سداسي عشري. قد لا يكون هذا مفيدًا كثيرًا إذا كان الاتصال مشفرًا.

# tcpdump -c10 -i eth1 -n -A port 80
23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1
E..'[email protected]@.%.
...
..2...P..M.
uE............
.6.}.Q.bGET / HTTP/1.1
Host: 10.0.0.50
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT

استنتاج

من السهل إعداد tcpdump ، وبمجرد فهمك للإخراج والأعلام والفلاتر المختلفة ، يمكن استخدامه لحل مشكلات الشبكة وتأمين شبكتك.