Како ухватити и анализирати мрежни саобраћај помоћу тцпдумп-а?

тцпдумп је невероватан алат командне линије за њушкање мреже. То је индустријски стандард за хватање и анализу ТЦП/ИП пакета.

Алат тцпдумп може бити од велике помоћи при решавању проблема са умрежавањем. Пакети се могу сачувати у датотеку и касније анализирати. Добра је идеја да повремено покренете ову алатку да бисте надгледали своју мрежу.

Како изгледа тцпдумп излаз?

тцпдумп омогућава вам да испитате заглавља ТЦП/ИП пакета. Штампа једну линију за сваки пакет, а команда наставља да ради све док не притиснете Цтрл+Ц да бисте прекинули.

Хајде да испитамо једну линију из примера излаза:

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

Свака линија укључује

  • Уник временска ознака (20:58:26.765637)
  • протокол (ИП)
  • изворно име хоста или ИП и број порта (10.0.0.50.80)
  • одредишно име хоста или ИП и број порта (10.0.0.1.53181)
  • ТЦП заставице (заставице [F.]). Заставице означавају стање везе. Ово може укључивати више од једне вредности, као у овом примеру [F.] за ФИН-АЦК. Ово поље може имати следеће вредности:
    • С – СИН. Први корак у успостављању везе.
    • Ф – ФИН. Прекидање везе.
    • . – АЦК. Пакет потврде је успешно примљен.
    • П – ПУСХ. Говори примаоцу да обрађује пакете уместо да их баферује.
    • Р – РСТ. Комуникација је прекинута.
  • Редни број података у пакету. (сек 1)
  • Број потврде (потврда 2)
  • Величина прозора (победа 453). Број бајтова доступних у баферу за пријем. Након тога следе ТЦП опције.
  • Дужина корисног оптерећења података. (дужина 0)

Инсталација

На Дебиан дистрибуцијама тцпдумп се може инсталирати помоћу АПТ команде:

# apt install tcpdump -y

На РПМ дистрибуцијама тцпдумп се може инсталирати са ИУМ:

# yum install tcpdump -y

Или користите ДНФ ако је РХЕЛ 8

# dnf install tcpdump -y

опције команде тцпдумп

Морате бити роот да бисте покренули тцпдумп. Укључује многе опције и филтере. Покретање тцпдумп без икаквих опција ће ухватити све пакете који теку кроз подразумевани интерфејс.

Да видите листу мрежних интерфејса доступних на систему и на којима тцпдумп може да ухвати пакете.

# 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]

Ово је посебно корисно на системима који немају команду за листање интерфејса.

  13 СМТП алата за дијагностицирање и тестирање сигурности е-поште

Да бисте ухватили пакете који теку кроз одређени интерфејс, користите ознаку -и са именом интерфејса. Без -и интерфејса тцпдумп ће покупити први мрежни интерфејс на који наиђе.

# 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

Ознака -в повећава информације које видите о пакетима, -вв вам даје још више детаља.

Подразумевано, тцпдумп решава ИП адресе у имена хостова и такође користи имена услуга уместо бројева портова. Ако је ДНС покварен или не желите да тцпдумп врши тражење имена, користите опцију -н.

# 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, користите ознаку -ц:

#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 -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 -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

хост филтер

Да бисте ухватили све пакете који долазе или одлазе са хоста са ИП адресом 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

Да бисте ухватили пакете одређеног типа протокола, на пример, ицмп, на етх1 интерфејсу:

# 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

Комбиновање израза филтера

Можете комбиновати ове изразе филтера са АНД, ОР и НОТ операторима. Ово ће вам омогућити да пишете команде које могу прецизније изоловати пакете:

Пакети са одређене ИП адресе и намењени за одређени порт:

# 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

Да бисте ухватили све пакете осим ИЦМП-а, користите НОТ оператор:

# tcpdump -i eth1 not icmp

Чување заглавља пакета у датотеку

Пошто излаз тцпдумп може прилично брзо да скролује поред екрана, можете да сачувате заглавља пакета у датотеку са заставицом -в. Датотеке за чување излаза користе пцап формат и имају екстензију .пцап.

  Како скупити и сакрити групе картица у Гоогле Цхроме-у

ПЦАП је скраћеница за хватање пакета. Следећа команда чува 10 линија излаза на етх1 интерфејсу у ицмп.пцап.

# 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

Ову датотеку можете прочитати са -р заставицом:

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

Преглед детаља пакета

До сада смо видели само заглавља пакета, за преглед садржаја пакета користите опцију -А. Ово штампа садржај пакета у АСЦИИ формату, што може бити од помоћи у решавању проблема са мрежом. Такође -Кс заставица се може користити за приказ излаза у хексадецималном формату. Ово можда неће бити од велике помоћи ако је веза шифрована.

# 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

Закључак

тцпдумп је лако подесити, а када разумете излаз, различите ознаке и филтере, може се користити за решавање проблема са умрежавањем и обезбеђење ваше мреже.