Практические примеры использования tcpdump

Oct 18, 2018 06:02 · 1988 words · 10 minute read tcpdump

Tcpdump - пакетный сниффер и главный инструмент сетевого анализа для специалистов по информационной безопасности. Рассмотрим несколько практических примеров “подслушивания” сетевого траффика.

Работает tcpdump при помощи интерфейса bpf (Berkeley Packet Filter). Если поддержку этого устройства отключить, то сниффинг в UNIX (и BSD) окажется невозможен. Установка утилиты не должна вызывать сложностей, в Debian/Ubuntu это можно сделать следующим образом:

apt install tcpdump

в RedHat/Centos:

yum install tcpdump

Если запустить утилиту tcpdump без дополнительных опций, то она начнет анализировать траффик на всех доступных сетевых интерфейсах в системе:

tcpdump

tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
16:34:25.733424 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8000.d4:ca:6d:e0:84:31.8002, length 39
16:34:25.733579 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8000.d4:ca:6d:e0:83:31.8001, length 43
^C16:34:25.733861 ARP, Probe 169.254.42.136, length 46

3 packets captured
89 packets received by filter
0 packets dropped by kernel

Несколько наиболее часто используемых опций для утилиты tcpdump:

  • -i interface - какой сетевой интерфейс будет использоваться для захвата пакетов;
  • -n - вывод IP-адреса вместо имени хоста;
  • -t - не выводить метку времени (timestamp) в каждой строке;
  • -X - вывод содержимого пакета в ASCII- и hex-формате;
  • -v, -vv, -vvv - увеличение кол-ва подробной информации;
  • -c N - завершение работы после получения N пакетов;
  • -s N - кол-во байтов пакета, которые будет обрабатывать tcpdump;
  • -S - выводить абсолютные порядковые номера;
  • -q - вывод минимума информации (имя протокола, откуда и куда шел пакет, порты и количество переданных данных);
  • -w file - запись данных tcpdump в двоичном формате в файл.

Переходим к примерам.

  1. Вывод списка доступных сетевых интерфейсов:
tcpdump -D

Результат выполнения команды:

1.en0 [Up, Running]
2.p2p0 [Up, Running]
3.awdl0 [Up, Running]
4.bridge0 [Up, Running]
5.utun0 [Up, Running]
6.en1 [Up, Running]
  1. Захват 5 пакетов на сетевом интерфейсе en0:
tcpdump -i en0 -c 5

Результат:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:48:28.391511 IP 10.0.1.72.50241 > 239.255.255.250.ssdp: UDP, length 174
16:48:28.401952 IP 10.0.0.128.54878 > google-public-dns-a.google.com.domain: 53956+ PTR? 72.1.0.10.in-addr.arpa. (40)
16:48:28.450276 IP google-public-dns-a.google.com.domain > 10.0.0.128.54878: 53956 NXDomain 0/0/0 (40)
16:48:28.452045 IP 10.0.0.128.55520 > google-public-dns-a.google.com.domain: 34082+ PTR? 250.255.255.239.in-addr.arpa. (46)
16:48:28.498491 IP google-public-dns-a.google.com.domain > 10.0.0.128.55520: 34082 NXDomain 0/1/0 (103)
5 packets captured
11 packets received by filter
0 packets dropped by kernel
  1. Выводить номер порта вместо используемого им протокола (для той же самой команды):
tcpdump -i en0 -c 5 -nn

Результат:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:50:50.933442 IP 10.0.0.92.5353 > 224.0.0.251.5353: 0 AAAA (QM)? EPSON-655-3fl.local. (37)
16:50:50.933690 IP6 fe80::148c:40ea:542c:2d8c.5353 > ff02::fb.5353: 0 AAAA (QM)? EPSON-655-3fl.local. (37)
16:50:50.934342 IP 10.0.0.237.2048 > 239.255.255.250.1900: UDP, length 101
16:50:51.138480 48:3b:38:2e:b9:12 > ff:ff:ff:ff:ff:ff Null Supervisory, Receiver not Ready, rcv seq 64, Flags [Poll], length 42
16:50:51.659581 IP 93.158.134.119.443 > 10.0.0.128.51991: Flags [P.], seq 481586204:481586235, ack 4042079405, win 147, options [nop,nop,TS val 1448581989 ecr 1232876532], length 31
5 packets captured
10 packets received by filter
0 packets dropped by kernel
  1. Информация о входящих пакетах на всех интерфейсах на порту 53:
tcpdump dst port 53

Результат выполнения:

tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
16:59:30.701385 IP 10.0.0.128.rockwell-csp2 > google-public-dns-a.google.com.domain: 38769+ A? clients4.google.com. (37)
16:59:30.707188 IP 10.0.0.128.49702 > google-public-dns-a.google.com.domain: 904+ PTR? 128.0.0.10.in-addr.arpa. (41)
16:59:38.394251 IP 10.0.0.128.33399 > google-public-dns-a.google.com.domain: 52728+ A? www.linkedin.com. (34)
16:59:39.167025 IP 10.0.0.128.neto-wol-server > google-public-dns-a.google.com.domain: 13145+ A? static.licdn.com. (34)
...
  1. Информация о пакетах на всех интерфейсах и всех портах, кроме 53:
tcpdump not port 53

Результат:

tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
17:02:36.066118 IP 10.0.1.50.mdns > 224.0.0.251.mdns: 0 [2n] [1au] ANY (QM)? Apple-TV.local. (105)
17:02:36.066457 IP6 apple-tv.local.mdns > ff02::fb.mdns: 0 [2n] [1au] ANY (QM)? Apple-TV.local. (105)
17:02:36.168069 IP 10.0.1.199.mdns > 224.0.0.251.mdns: 0 [1a] A (QM)? EPSON-655-3fl.local. (53)
17:02:36.168076 ARP, Probe 169.254.137.194, length 46
17:02:36.168433 IP 10.0.0.195.mdns > 224.0.0.251.mdns: 0 [1a] A (QM)? EPSON-655-3fl.local. (53)
17:02:36.168968 IP 10.0.0.75.56487 > 239.255.255.250.ssdp: UDP, length 174
17:02:36.312474 IP 10.0.0.128.mdns > 224.0.0.251.mdns: 0 PTR (QU)? 194.137.254.169.in-addr.arpa. (46)
17:02:36.312525 IP6 ealebed-macbook.local.mdns > ff02::fb.mdns: 0 PTR (QU)? 194.137.254.169.in-addr.arpa. (46)
17:02:36.373393 IP 10.0.0.110.mdns > 224.0.0.251.mdns: 0 [1a] A (QM)? EPSON-655-3fl.local. (53)
17:02:36.475371 IP 10.0.1.50.mdns > 224.0.0.251.mdns: 0 [2n] [1au] ANY (QM)? Apple-TV.local. (105)
17:02:36.475793 IP6 apple-tv.local.mdns > ff02::fb.mdns: 0 [2n] [1au] ANY (QM)? Apple-TV.local. (105)
17:02:36.476560 IP6 apple-tv.local.mdns > ff02::fb.mdns: 0*- [0q] 1/0/1 PTR 70-35-60-63.1 Apple TV._sleep-proxy._udp.local. (101)
17:02:36.476563 ARP, Probe 169.254.137.194, length 46
17:02:36.782405 IP 10.0.1.50.mdns > 224.0.0.251.mdns: 0*- [0q] 2/0/2 (Cache flush) AAAA fe80::1001:93a7:a8fe:7374, (Cache flush) A 10.0.1.50 (119)
17:02:36.782823 IP6 apple-tv.local.mdns > ff02::fb.mdns: 0*- [0q] 2/0/2 (Cache flush) AAAA fe80::1001:93a7:a8fe:7374, (Cache flush) A 10.0.1.50 (119)
...
  1. Информация о пакетах, переданных по протоколу icmp (в соседней консоли запускаем ping 8.8.8.8):
tcpdump -i en0 -c 5 -nn icmp

Результат:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:05:06.344119 IP 10.0.0.128 > 8.8.8.8: ICMP echo request, id 54073, seq 0, length 64
17:05:06.394107 IP 8.8.8.8 > 10.0.0.128: ICMP echo reply, id 54073, seq 0, length 64
17:05:07.348516 IP 10.0.0.128 > 8.8.8.8: ICMP echo request, id 54073, seq 1, length 64
17:05:07.397421 IP 8.8.8.8 > 10.0.0.128: ICMP echo reply, id 54073, seq 1, length 64
17:05:08.352231 IP 10.0.0.128 > 8.8.8.8: ICMP echo request, id 54073, seq 2, length 64
5 packets captured
425 packets received by filter
0 packets dropped by kernel
  1. Записываем перехваченные пакеты в файл для дальнейшего анализа:
tcpdump -i en0 -c 5 -nn tcp -w packets-record.cap -s 0

Сами пакеты будут записаны в файл, в консоли увидим:

tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
5 packets captured
44 packets received by filter
0 packets dropped by kernel
  1. Читаем информацию из файла:
tcpdump -r packets-record.cap

Результат:

reading from file packets-record.cap, link-type EN10MB (Ethernet)
17:08:21.821325 IP 10.0.0.128.51852 > ec2-107-23-203-104.compute-1.amazonaws.com.https: Flags [P.], seq 601162185:601162473, ack 2264508809, win 4096, options [nop,nop,TS val 1233987441 ecr 638699261], length 288
17:08:21.979792 IP ec2-107-23-203-104.compute-1.amazonaws.com.https > 10.0.0.128.51852: Flags [.], ack 288, win 422, options [nop,nop,TS val 638702514 ecr 1233987441], length 0
17:08:21.979796 IP ec2-107-23-203-104.compute-1.amazonaws.com.https > 10.0.0.128.51852: Flags [P.], seq 1:326, ack 288, win 422, options [nop,nop,TS val 638702514 ecr 1233987441], length 325
17:08:21.979868 IP 10.0.0.128.51852 > ec2-107-23-203-104.compute-1.amazonaws.com.https: Flags [.], ack 326, win 4085, options [nop,nop,TS val 1233987599 ecr 638702514], length 0
17:08:22.697706 IP s167i.storage.yandex.net.https > 10.0.0.128.52124: Flags [.], ack 246357771, win 12, options [nop,nop,TS val 663985568 ecr 1233984018], length 0
  1. Более подробная информация о пакетах:
tcpdump -i en0 -c 5 -ttttnnvvS

Результат:

tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
2018-09-14 17:10:21.273159 IP (tos 0x0, ttl 2, id 21387, offset 0, flags [DF], proto UDP (17), length 160)
    10.0.1.63.42699 > 239.255.255.250.1900: [udp sum ok] UDP, length 132
2018-09-14 17:10:21.886917 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8000.d4:ca:6d:e0:84:31.8002, length 39
	message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
	root-id 8000.d4:ca:6d:e0:84:31, root-pathcost 0, port-role Designated
2018-09-14 17:10:21.886926 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8000.d4:ca:6d:e0:83:31.8001, length 43
	message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
	root-id 8000.d4:ca:6d:e0:83:31, root-pathcost 0, port-role Designated
2018-09-14 17:10:22.091541 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.1.126 tell 10.0.0.222, length 46
2018-09-14 17:10:22.296521 IP (tos 0x0, ttl 2, id 21580, offset 0, flags [DF], proto UDP (17), length 161)
    10.0.1.63.42699 > 239.255.255.250.1900: [udp sum ok] UDP, length 133
5 packets captured
5 packets received by filter
0 packets dropped by kernel
  1. Пакеты, полученные с определенного ip-адреса:
tcpdump -i en0 -c 5 -ttttnnvvS src host 8.8.8.8

Результат:

tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
2018-09-14 17:14:29.214585 IP (tos 0x0, ttl 108, id 51066, offset 0, flags [none], proto UDP (17), length 118)
    8.8.8.8.53 > 10.0.0.128.20936: [udp sum ok] 45411 q: A? chatenabled.mail.google.com. 2/0/0 chatenabled.mail.google.com. CNAME b.googlemail.l.google.com., b.googlemail.l.google.com. A 172.217.16.7 (90)
2018-09-14 17:15:00.959303 IP (tos 0x0, ttl 45, id 20470, offset 0, flags [none], proto UDP (17), length 102)
    8.8.8.8.53 > 10.0.0.128.61834: [udp sum ok] 32755 q: A? contacts.google.com. 2/0/0 contacts.google.com. CNAME plus.l.google.com., plus.l.google.com. A 172.217.16.14 (74)
2018-09-14 17:15:01.030383 IP (tos 0x0, ttl 108, id 63166, offset 0, flags [none], proto UDP (17), length 132)
    8.8.8.8.53 > 10.0.0.128.61171: [udp sum ok] 9697 q: A? static-asm-skype.trafficmanager.net. 2/0/0 static-asm-skype.trafficmanager.net. CNAME neu1-authgw.cloudapp.net., neu1-authgw.cloudapp.net. A 52.178.207.179 (104)
2018-09-14 17:15:01.545424 IP (tos 0x0, ttl 45, id 26902, offset 0, flags [none], proto UDP (17), length 152)
    8.8.8.8.53 > 10.0.0.128.65448: [udp sum ok] 3071 q: A? 1180c.ec.azureedge.net. 3/0/0 1180c.ec.azureedge.net. CNAME lb.apr-1180c.edgecastdns.net., lb.apr-1180c.edgecastdns.net. CNAME cs10.wpc.v0cdn.net., cs10.wpc.v0cdn.net. A 68.232.34.200 (124)
2018-09-14 17:15:02.933648 IP (tos 0x0, ttl 108, id 56826, offset 0, flags [none], proto UDP (17), length 102)
    8.8.8.8.53 > 10.0.0.128.11992: [udp sum ok] 46837 q: A? flant.ru. 3/0/0 flant.ru. A 46.4.70.143, flant.ru. A 88.99.236.188, flant.ru. A 176.9.67.92 (74)
5 packets captured
1099 packets received by filter
0 packets dropped by kernel
  1. Пакеты, отправленные на определенный ip-адрес:
tcpdump -i en0 -c 5 -ttttnnvvS dst host 8.8.8.8

Результат:

tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
2018-09-14 17:17:31.501414 IP (tos 0x0, ttl 255, id 10013, offset 0, flags [none], proto UDP (17), length 80)
    10.0.0.128.57664 > 8.8.8.8.53: [udp sum ok] 14939+ A? gs-loc-new.ls-apple.com.akadns.net. (52)
2018-09-14 17:17:32.490921 IP (tos 0x0, ttl 64, id 52451, offset 0, flags [none], proto UDP (17), length 68)
    10.0.0.128.43217 > 8.8.8.8.53: [udp sum ok] 6632+ A? storage.mds.yandex.net. (40)
2018-09-14 17:17:32.767095 IP (tos 0x0, ttl 64, id 49578, offset 0, flags [none], proto UDP (17), length 68)
    10.0.0.128.55720 > 8.8.8.8.53: [udp sum ok] 3143+ A? storage.mds.yandex.net. (40)
2018-09-14 17:17:33.769442 IP (tos 0x0, ttl 64, id 50447, offset 0, flags [none], proto ICMP (1), length 56)
    10.0.0.128 > 8.8.8.8: ICMP 10.0.0.128 udp port 55720 unreachable, length 36
	IP (tos 0x0, ttl 45, id 17556, offset 0, flags [none], proto UDP (17), length 84)
    8.8.8.8.53 > 10.0.0.128.55720: [no cksum] [|domain]
2018-09-14 17:17:34.438324 IP (tos 0x0, ttl 64, id 43433, offset 0, flags [none], proto UDP (17), length 71)
    10.0.0.128.51895 > 8.8.8.8.53: [udp sum ok] 55021+ A? s23vla.storage.yandex.net. (43)
5 packets captured
244 packets received by filter
0 packets dropped by kernel
  1. Пакеты (входящие и исходящие) от определенного хоста:
tcpdump -i en0 -c 5 -ttttnnvvS host 8.8.8.8

Результат:

tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
2018-09-14 17:27:27.825506 IP (tos 0x0, ttl 64, id 25419, offset 0, flags [none], proto UDP (17), length 61)
    10.0.0.128.22110 > 8.8.8.8.53: [udp sum ok] 55278+ A? ssl.gstatic.com. (33)
2018-09-14 17:27:27.871838 IP (tos 0x0, ttl 45, id 50798, offset 0, flags [none], proto UDP (17), length 77)
    8.8.8.8.53 > 10.0.0.128.22110: [udp sum ok] 55278 q: A? ssl.gstatic.com. 1/0/0 ssl.gstatic.com. A 172.217.16.3 (49)
2018-09-14 17:27:33.255311 IP (tos 0x0, ttl 255, id 22154, offset 0, flags [none], proto UDP (17), length 80)
    10.0.0.128.55402 > 8.8.8.8.53: [udp sum ok] 19893+ A? gs-loc-new.ls-apple.com.akadns.net. (52)
2018-09-14 17:27:34.089989 IP (tos 0x0, ttl 108, id 40535, offset 0, flags [none], proto UDP (17), length 133)
    8.8.8.8.53 > 10.0.0.128.55402: [udp sum ok] 19893 q: A? gs-loc-new.ls-apple.com.akadns.net. 3/0/0 gs-loc-new.ls-apple.com.akadns.net. CNAME gs-loc.ls-apple.com.akadns.net., gs-loc.ls-apple.com.akadns.net. A 17.134.127.223, gs-loc.ls-apple.com.akadns.net. A 17.134.126.34 (105)
2018-09-14 17:27:43.508417 IP (tos 0x0, ttl 64, id 63649, offset 0, flags [none], proto UDP (17), length 69)
    10.0.0.128.49142 > 8.8.8.8.53: [udp sum ok] 11740+ A? pollserver.lastpass.com. (41)
5 packets captured
504 packets received by filter
0 packets dropped by kernel
  1. Пакеты на определенном диапазоне портов:
tcpdump -i en0 -c 5 -nns 0 portrange 80-443

Результат:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
17:29:53.147192 IP 10.0.0.73.137 > 10.0.3.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
17:29:53.147923 IP 10.0.2.164.137 > 10.0.3.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
17:29:53.247888 IP 10.0.1.62.137 > 10.0.3.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
17:29:53.248148 IP 10.0.0.111.137 > 10.0.3.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
17:29:53.249846 IP 10.0.0.179.137 > 10.0.3.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
5 packets captured
13 packets received by filter
0 packets dropped by kernel

Больше информации об использовании данной утилиты можно найти здесь и здесь.

tweet Share