Команда tcpdump также называется анализатором пакетов.
Команда tcpdump будет работать на большинстве разновидностей операционной системы UNIX. tcpdump позволяет сохранять захваченные пакеты, так что мы можем использовать захваченный пакет для дальнейшего анализа. Сохраненный файл может быть просмотрен той же командой tcpdump. Мы также можем использовать программное обеспечение с открытым исходным кодом, как Wireshark для чтения файлов tcpdump PCAP.
На этом уроке мы рассмотрим некоторые практические примеры того, как использовать команду tcpdump.
1. Захват пакетов от конкретного интерфейса локальных сетей с использованием tcpdump -i
При выполнении команды tcpdump без какого-либо варианта, он будет захватывать все пакеты, проходящие через все интерфейсы. Опция -i команды tcpdump, позволяет фильтровать по определенному интерфейсу Ethernet.
$ tcpdump -i eth1 12:59:41.967250 ARP, Request who-has free.msk.ispsystem.net tell gw.msk.ispsystem.net, length 46 12:59:41.967257 ARP, Request who-has reserve.scoffserver.ru tell gw.msk.ispsystem.net, length 46 12:59:41.969692 IP andreyex.ru.44141 > wdc-ns1.ispsystem.net.domain: 14799+ PTR? 184.48.146.82.in-addr.arpa. (44) ...
В этом примере, tcpdump захватил все пакеты потока в интерфейсе eth1 и отображает в стандартном выводе.
2. Захват только N-ое число пакетов с помощью tcpdump -c
При выполнении команды tcpdump дает пакеты, пока вы не отмените команду tcpdump. Используя опцию -c вы можете указать количество пакетов для захвата.
$ tcpdump -c 2 -i eth0 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:01:35.165898 ARP, Request who-has 213.159.211.80 tell gw.msk.ispsystem.net, length 46 13:01:35.170637 IP andreyex.ru.35123 > wdc-ns1.ispsystem.net.domain: 7254+ PTR? 80.211.159.213.in-addr.arpa. (45) 2 packets captured 7 packets received by filter 0 packets dropped by kernel
Команда tcpdump захватили только 2 пакета от интерфейса eth0.
3. Выод на дисплей перехваченных пакетов в ASCII, используя tcpdump -a
Следующий синтаксис tcpdump печатает пакет в ASCII.
$ tcpdump -A -i eth0 13:03:06.516709 IP 213.132.93.178.25321 > andreyex.ru.vlsi-lm: Flags [.], ack 3120779210, win 254, length 0 E..($.@.u..B..].....b...%.=...O.P....... 13:03:06.517120 IP andreyex.ru.35313 > wdc-ns1.ispsystem.net.domain: 13562+ PTR? 178.93.132.213.in-addr.arpa. (45) E..I9.@.@........x.....5.5[F4............178.93.132.213.in-addr.arpa..... 13:03:06.517523 IP wdc-ns1.ispsystem.net.domain > andreyex.ru.35313: 13562 NXDomain 0/1/0 (103) D...ns1.?.n2.x.......
4. Вывод на дисплей перехваченных пакетов в HEX и ASCII с использованием tcpdump -xx
Некоторые пользователи могли бы анализировать пакеты в шестнадцатеричных значениях. tcpdump предоставляет возможность печатать пакеты в обоих форматах ASCII и HEX.
$tcpdump -XX -i eth0 13:04:55.671670 ARP, Request who-has ns-24.ru tell gw.msk.ispsystem.net, length 46 0x0000: ffff ffff ffff 288a 1cea fff0 0806 0001 ......(......... 0x0010: 0800 0604 0001 288a 1cea fff0 5057 c401 ......(.....PW.. 0x0020: 0000 0000 0000 5057 c50a 0000 0000 0000 ......PW........ 0x0030: 0000 0000 0000 0000 4af9 3265 ........J.2e 13:04:55.673089 ARP, Request who-has free.msk.ispsystem.net tell gw.msk.ispsystem.net, length 46 0x0000: ffff ffff ffff 288a 1cea fff0 0806 0001 ......(......... 0x0010: 0800 0604 0001 288a 1cea fff0 5292 3001 ......(.....R.0. 0x0020: 0000 0000 0000 5292 31af 0000 0000 0000 ......R.1....... 0x0030: 0000 0000 0000 0000 ee11 d278
5. Захват пакетов и запись в файл с помощью tcpdump -w
tcpdump позволяет сохранить пакеты в файл, а затем вы можете использовать файл пакетов для дальнейшего анализа.
$ tcpdump -w 08232010.pcap -i eth0 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes ^C6239 packets captured 7052 packets received by filter 811 packets dropped by kernel
Опция -w записывает пакеты в указанный файл. Расширение файла должно быть .pcap, который может быть прочитан любым протоколом сетевого
анализатора.
6. Чтение пакетов из сохраненного файла с помощью tcpdump -r
Вы можете прочитать захваченный файл PCAP и просматривать пакеты для анализа, как показано ниже.
$tcpdump -tttt -r 08232010.pcap reading from file 08232010.pcap, link-type EN10MB (Ethernet) 2017-04-07 13:06:28.035332 IP 213.132.93.178.25557 > andreyex.ru.vlsi-lm: Flags [.], ack 2280823022, win 252, length 0 2017-04-07 13:06:28.036239 IP 213.132.93.178.25558 > andreyex.ru.vlsi-lm: Flags [.], ack 1395913898, win 252, length 0 2017-04-07 13:06:28.037210 IP 213.132.93.178.25557 > andreyex.ru.vlsi-lm: Flags [.], ack 427, win 257, length 0 2017-04-07 13:06:28.038258 IP 213.132.93.178.25558 > andreyex.ru.vlsi-lm: Flags [.], ack 149, win 252, length 0 2017-04-07 13:06:28.053807 IP 213.132.93.178.25558 > andreyex.ru.vlsi-lm: Flags [P.], seq 0:1056, ack 149, win 252, length 1056 2017-04-07 13:06:28.053850 IP andreyex.ru.vlsi-lm > 213.132.93.178.25558: Flags [.], ack 1056, win 352, length 0
7. Захват пакетов с IP-адреса с помощью tcpdump -n
Во всех приведенных выше примерах, он печатает пакеты с адресом DNS, но не адрес IP. Следующий пример захватывает пакеты и отображает IP-адрес участвующей машины.
$ tcpdump -n -i eth0 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:09:44.819573 IP 213.132.93.178.25691 > 213.159.209.228.vlsi-lm: Flags [.], ack 1414291154, win 257, length 0 13:09:44.820282 IP 213.132.93.178.25691 > 213.159.209.228.vlsi-lm: Flags [.], ack 427, win 255, length 0 13:09:44.824067 IP 213.132.93.178.25690 > 213.159.209.228.vlsi-lm: Flags [.], ack 1150807970, win 253, length 0
8. Захват пакетов с надлежащей временной меткой с использованием считываемой tcpdump -tttt
$ tcpdump -n -tttt -i eth0 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 2017-04-07 13:10:23.336752 ARP, Request who-has 213.159.210.195 tell 213.159.210.1, length 46 2017-04-07 13:10:23.338998 ARP, Request who-has 212.109.196.195 tell 212.109.196.1, length 46 2017-04-07 13:10:23.339009 ARP, Request who-has 80.87.202.158 tell 80.87.202.1, length 46 2017-04-07 13:10:23.339011 ARP, Request who-has 188.120.248.196 tell 188.120.248.1, length 46 2017-04-07 13:10:23.339013 ARP, Request who-has 212.109.197.156 tell 212.109.196.1, length 46
9. Пакеты прочитанные больше, чем n байт
Вы можете получить больше пакетов, чем n числа байтов, используя фильтр «greater» через команду tcpdump
$ tcpdump -w g_1024.pcap greater 1024
10. Получение пакетов только определенного типа протокола
Вы можете получить пакеты в зависимости от типа протокола. Вы можете указать один из этих протоколов – fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp и udp. Следующий пример захватывает только пакеты arp, протекающие через интерфейс eth0.
$ tcpdump -i eth0 arp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:11:31.451191 ARP, Request who-has ark-hoster.ru tell gw.msk.ispsystem.net, length 46 13:11:31.456275 ARP, Request who-has aitkblack.fvds.ru tell gw.msk.ispsystem.net, length 46 13:11:31.463781 ARP, Request who-has e-sro.su tell gw.msk.ispsystem.net, length 46 13:11:31.464276 ARP, Request who-has yaroslav.fvds.ru tell gw.msk.ispsystem.net, length 46
11. Чтение пакетов меньше, чем n байтов
Вы можете получить только пакеты меньше, чем n байтов, используя фильтр «less» с помощью команды tcpdump
$ tcpdump -w l_1024.pcap less 1024
12. Прием пакетов потоков на определенный порт, используя порт tcpdump
Если вы хотите знать все пакеты, полученные по определенному порту на компьютере, вы можете использовать команду tcpdump, как показано ниже.
$ tcpdump -i eth0 port 22 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel
В данном случае порт 22 отключен.
13. Захват пакетов для конкретного адресата ip-адреса и порта
Эти пакеты будут иметь номера источника и назначения ip-адреса и порт. Используя tcpdump мы можем применить фильтры на источнике или назначения IP и номер порта. Следующая команда перехватывает поток пакетов в eth0, с конкретного IP-адреса назначения и номера порта 22.
$ tcpdump -w xpackets.pcap -i eth0 dst 10.181.140.216 and port 22
14. Захват пакетов TCP между двумя узлами
Если два различных процесса из двух разных машин общается по протоколу TCP, мы можем захватить эти пакеты с помощью tcpdump, как показано ниже.
$tcpdump -w comm.pcap -i eth0 dst 16.181.170.246 and port 22
Вы можете открыть файл comm.pcap, используя любой сетевой инструмент анализатора протокола для отладки потенциальных проблем.
15. Фильтр пакетов tcpdump – захват всех, кроме пакетов arp и rarp
В команде tcpdump, вы можете указать условие “and”, “or” и “not” для фильтрации пакетов.
$ tcpdump -i eth0 not arp and not rarp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:13:42.454613 IP 213.132.93.178.25885 > andreyex.ru.vlsi-lm: Flags [.], ack 1557656178, win 253, length 0 13:13:42.455558 IP 213.132.93.178.25885 > andreyex.ru.vlsi-lm: Flags [.], ack 427, win 257, length 0 13:13:42.458275 IP andreyex.ru.https > crawl-66-249-64-254.googlebot.com.39708: Flags [.], ack 1382390548, win 252, options [nop,nop,TS val 32239888 ecr 36826 85903], length 0