ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
контакт-центра
 онтакт - центр как канал продаж и маркетинговой коммуникации ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

22 минуты чтени€

Tcpdump - это утилита командной строки, котора€ позвол€ет вам захватывать и анализировать сетевой трафик, проход€щий через вашу систему. ќн часто используетс€ дл€ устранени€ неполадок в сети, а также дл€ обеспечени€ безопасности.

«ахват пакетов с tcpdump

Ёто мощный и универсальный инструмент, который включает в себ€ множество опций и фильтров. ѕоскольку это инструмент командной строки, он идеально подходит дл€ работы на удаленных серверах или устройствах, дл€ которых GUI недоступен, дл€ сбора данных, которые могут быть проанализированы позже, поскольку результаты можно сохран€ть в отдельный файл. ќн также может быть запущен в фоновом режиме или как запланированное задание с использованием таких инструментов, как cron.

¬ этой статье мы рассмотрим некоторые из наиболее распространенных функций tcpdump.


”становка Tcpdump

Tcpdump включен в несколько дистрибутивов Linux, так что скорее всего, он у вас уже установлен. ѕроверьте, установлен ли tcpdump в вашей системе, например, с помощью командыwhich:

which tcpdump

ћы должны получить примерно такой вывод:

/usr/sbin/tcpdump

≈сли tcpdump не установлен, вы можете установить его, но использу€ менеджер пакетов вашего дистрибутива.

¬ CentOS или Red Hat Enterprise Linux:

sudo yum install -y tcpdump

ƒл€ Ubuntu and Debian:

sudo apt update && sudo apt install tcpdump

ƒл€ Arch Linux:

sudo pacman -S tcpdump

Tcpdump требует libpcap, который €вл€етс€ библиотекой дл€ захвата сетевых пакетов. ≈сли он не установлен, он будет автоматически добавлен как зависимость.


«ахват пакетов с Tcpdump

—интаксис Tcpdump выгл€дит следующим образом:

tcpdump [options] [expression]
  •  оманда options позвол€ют вам контролировать поведение команды.
  • ‘ильтр expression определ€ет какие пакеты будут захвачены

ƒл€ захвата пакетов дл€ траблшутинга или анализа tcpdump требуютс€ повышенные разрешени€, поэтому в следующих примерах большинство команд имеют префикс sudo.

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

sudo tcpdump -D
1.eth0
2.virbr0
3.eth1
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]

¬ приведенном выше примере вы можете увидеть все интерфейсы, доступные на компьютере. —пециальный интерфейс any позвол€ет захватывать на всех активных интерфейсах.

ƒавайте использовать его, чтобы поймать немного пакетов:

sudo tcpdump -i any
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3770820720:3770820916, ack 3503648727, win 309, options [nop,nop,TS val 76577898 ecr 510770929], length 196
09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 391, options [nop,nop,TS val 510771017 ecr 76577898], length 0
09:56:18.295058 IP rhel75.59883 > gateway.domain: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43)
09:56:18.310225 IP gateway.domain > rhel75.59883: 2486 NXDomain* 0/1/0 (102)
09:56:18.312482 IP rhel75.49685 > gateway.domain: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44)
09:56:18.322425 IP gateway.domain > rhel75.49685: 34242 NXDomain* 0/1/0 (103)
09:56:18.323164 IP rhel75.56631 > gateway.domain: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44)
09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 196:584, ack 1, win 309, options [nop,nop,TS val 76577928 ecr 510771017], length 388
09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 584, win 411, options [nop,nop,TS val 510771047 ecr 76577928], length 0
09:56:18.335569 IP gateway.domain > rhel75.56631: 29904 NXDomain* 0/1/0 (103)
09:56:18.336429 IP rhel75.44007 > gateway.domain: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45)
09:56:18.336655 IP gateway.domain > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65)
09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 584:1644, ack 1, win 309, options [nop,nop,TS val 76577942 ecr 510771047], length 1060

---- SKIPPING LONG OUTPUT -----

09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 1752016, win 1444, options [nop,nop,TS val 510772067 ecr 76578948], length 0
^C
9003 packets captured
9010 packets received by filter
7 packets dropped by kernel

 люч -i показывает что мы захватываем пакеты с определенного (хоть и псевдо) интерфейса. ¬ы можете прервать захват, нажав Ctrl + C.

 ак вы видите, мы перехватили OVER 9000 пакетов. Ќо так много нам не нужно „тобы ограничить количество перехваченных пакетов и остановить tcpdump, используйте параметр -c:

sudo tcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: Flags [P.], seq 3772575680:3772575876, ack 3503651743, win 309, options [nop,nop,TS val 81689848 ecr 515883153], length 196
11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: Flags [.], ack 196, win 1443, options [nop,nop,TS val 515883235 ecr 81689848], length 0
11:21:30.244442 IP rhel75.43634 > gateway.domain: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43)
11:21:30.244829 IP gateway.domain > rhel75.43634: 57680 NXDomain 0/0/0 (43)
11:21:30.247048 IP rhel75.33696 > gateway.domain: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44)
5 packets captured
12 packets received by filter
0 packets dropped by kernel

¬ этом случае tcpdump прекратил захват автоматически после захвата п€ти пакетов. Ёто полезно в разных сценари€х - например, если вы устран€ете неполадки с подключением и захватываете несколько начальных пакетов, этого достаточно. Ёто еще более полезно, когда мы примен€ем фильтры дл€ захвата определенных пакетов.

ѕо умолчанию tcpdump разрешает (ресолвит) IP-адреса и порты в имена, как показано в предыдущем примере. ќднако при устранении неполадок в сети часто проще использовать IP-адреса и номера портов. ќтключите разрешение имен, использу€ опцию -n и разрешение портов с -nn:

sudo tcpdump -i any -c5 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 166198580:166198776, ack 2414541257, win 309, options [nop,nop,TS val 615664 ecr 540031155], length 196
23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 196, win 1377, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 372
23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: Flags [.], ack 568, win 1400, options [nop,nop,TS val 540031229 ecr 615664], length 0
23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: Flags [P.], seq 568:908, ack 1, win 309, options [nop,nop,TS val 615664 ecr 540031229], length 340
5 packets captured
6 packets received by filter
0 packets dropped by kernel

 ак показано выше, вывод захвата теперь отображает IP-адреса и номера портов. Ёто также не позвол€ет tcpdump выдавать DNS-запросы, что помогает снизить сетевой трафик при устранении неполадок в сети.

“еперь, когда вы можете захватывать сетевые пакеты, давайте рассмотрим, что означает этот вывод.


ѕонимание формата вывода

Tcpdump способен захватывать и декодировать множество различных протоколов, таких как TCP, UDP, ICMP и многие другие. ’от€ мы не можем охватить все их здесь, чтобы помочь вам начать, давайте рассмотрим пакет TCP. ¬ы можете найти более подробную информацию о различных форматах протокола на страницах руководства tcpdump. “ипичный пакет TCP, захваченный tcpdump, выгл€дит следующим образом:

08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 372

ѕол€ могут различатьс€ в зависимости от типа отправл€емого пакета, но общий формат tcpdump выгл€дит так:

[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]
  • ѕервое поле, 08:41:13.729687, представл€ет метку времени полученного пакета согласно местным часам, в форматечасы:минуты:секунды.фракци€ где фракци€ - доли секунды с полуночи.
  • «атем IP представл€ет протокол сетевого уровн€ - в данном случае IPv4. ƒл€ пакетов IPv6 это значение IP6.
  • —ледующее поле, 192.168.64.28.22, - это IP-адрес и порт источника. ƒалее следуют IP-адрес и порт назначени€ (разделенные точкой), представленные как 192.168.64.1.41916.
  • ѕосле источника и назначени€ вы можете найти флаги TCP Flags [P.]. “ипичные значени€ дл€ этого пол€ включают в себ€:
    • [.] - ACK (Acknowledgment)
    • [S] - SYN (Start Connection)
    • [P] - PSH (Push Data)
    • [F] - FIN (Finish Connection)
    • [R] - RST (Reset Connection)
    • [S.] - SYN-ACK (SynAcK Packet)
  • ƒалее идет пор€дковый номер данных, содержащихс€ в пакете. ƒл€ первого захваченного пакета это абсолютное число. ѕоследующие пакеты используют относительное число, чтобы упростить отслеживание. ¬ этом примере последовательность seq 196:568, что означает, что этот пакет содержит байты с 196 по 568 этого потока.
  • «а этим следует номер подтверждени€: ack 1. ¬ данном случае это 1, поскольку сторона отправл€ет данные. ƒл€ стороны, получающей данные, это поле представл€ет следующий ожидаемый байт (данные) в этом потоке. Ќапример, номер Ack дл€ следующего пакета в этом потоке будет 568.
  • —ледующее поле - это размер окна win 309, который представл€ет количество байтов, доступных в приемном буфере, за которыми следуют такие параметры TCP, как MSS (максимальный размер сегмента - Maximum Segment Size) или масштаб окна. nop - заполнение, используемое дл€ того, чтобы сделать заголовок TCP кратным 4 байтам. TS val - это временна€ метка TCP. ecr - обозначает эхо-ответ.
  • Ќаконец, у нас есть длина пакета, length 372, котора€ представл€ет длину в байтах данных полезной нагрузки. ƒлина - это разница между последним и первым байтами пор€дкового номера.

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


‘ильтраци€ пакетов

 ак упоминалось выше, tcpdump может перехватывать слишком много пакетов, некоторые из которых даже не св€заны с проблемой, которую вы устран€ете. Ќапример, если вы устран€ете проблему с подключением к веб-серверу, вас не интересует трафик SSH, поэтому удаление пакетов SSH из выходных данных облегчает работу с реальной проблемой.

ќдной из самых мощных функций tcpdump €вл€етс€ его способность фильтровать захваченные пакеты с использованием различных параметров, таких как IP-адреса источника и назначени€, порты, протоколы и так далее. ƒавайте рассмотрим некоторые из наиболее распространенных.

ѕротокол

ƒл€ фильтрации пакетов на основе протокола, указав протокол в командной строке. Ќапример, перехватывайте ICMP-пакеты только с помощью этой команды:

sudo tcpdump -i any -c5 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

¬ другом терминале попробуйте пропинговать другой компьютер:

ping wiki.merionet.ru
PING wiki.merionet.ru(54.204.39.132) 56(84) bytes of data.
64 bytes from ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132): icmp_seq=1 ttl=47 time=39.6 ms

¬ернувшись в захват tcpdump, обратите внимание, что tcpdump захватывает и отображает только пакеты, св€занные с ICMP. ¬ этом случае tcpdump не отображает пакеты разрешени€ имен, которые были сгенерированы при разрешении имени wiki.merionet.ru:

09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 1, length 64
09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 1, length 64
09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 2, length 64
09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP echo reply, id 20361, seq 2, length 64
09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP echo request, id 20361, seq 3, length 64
5 packets captured
5 packets received by filter
0 packets dropped by kernel

Ћибо, если вы знаете идентификатор протокола, то вы можете использовать фильтр proto. Ќапример, дл€ OSFP пакетов:

sudo tcpdump -n proto 89

’ост

ќграничьте захват только пакетами, относ€щимис€ к определенному хосту, использу€ фильтр host:

sudo tcpdump -i any -c5 -nn host 54.204.39.132
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [S], seq 1375157070, win 29200, options [mss 1460,sackOK,TS val 122350391 ecr 0,nop,wscale 7], length 0
09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [S.], seq 1935542841, ack 1375157071, win 28960, options [mss 1460,sackOK,TS val 522713542 ecr 122350391,nop,wscale 9], length 0
09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122350437 ecr 522713542], length 0
09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122350438 ecr 522713542], length 112: HTTP: GET / HTTP/1.1
09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: Flags [.], ack 113, win 57, options [nop,nop,TS val 522713552 ecr 122350438], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

¬ этом примере tcpdump захватывает и отображает только пакеты с хоста 54.204.39.132 и на него.

“акже можно фильтровать не только по одному хосту, но и по целым подсет€м. ƒл€ этого нужно использовать фильтр net. Ќапример, чтобы вывести только пакеты, относ€щиес€ только к 192.168.1.0/24, нужно использовать:

sudo tcpdump -n net 192.168.1

ѕорт

ƒл€ фильтрации пакетов на основе желаемой услуги или порта используйте фильтр port. Ќапример, перехватите пакеты, относ€щиес€ к веб-службе HTTP c 80 порта, с помощью этой команды:

sudo tcpdump -i any -c5 -nn port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [S], seq 1745665159, win 29200, options [mss 1460,sackOK,TS val 122599140 ecr 0,nop,wscale 7], length 0
09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [S.], seq 4063583040, ack 1745665160, win 28960, options [mss 1460,sackOK,TS val 522775728 ecr 122599140,nop,wscale 9], length 0
09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 122599183 ecr 522775728], length 0
09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 122599184 ecr 522775728], length 112: HTTP: GET / HTTP/1.1
09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: Flags [.], ack 113, win 57, options [nop,nop,TS val 522775739 ecr 122599184], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

„тобы захватывать траффик с диапазона портов используйте фильтр portrange, после которого через дефис укажите желаемый диапазон:

sudo tcpdump -n portrange 11128-11142

IP адрес или им€ хоста отправител€ или получател€

¬ы также можете фильтровать пакеты на основе IP-адреса источника или назначени€ или имени хоста при помощи фильтра src, после которого нужно указать адрес отправител€. Ќапример, дл€ захвата пакетов с хоста 192.168.122.98:

sudo tcpdump -i any -c5 -nn src 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:02:15.220824 IP 192.168.122.98.39436 > 192.168.122.1.53: 59332+ A? wiki.merionet.ru. (32)
10:02:15.220862 IP 192.168.122.98.39436 > 192.168.122.1.53: 20749+ AAAA? wiki.merionet.ru. (32)
10:02:15.364062 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [S], seq 1108640533, win 29200, options [mss 1460,sackOK,TS val 122825713 ecr 0,nop,wscale 7], length 0
10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [.], ack 669337581, win 229, options [nop,nop,TS val 122825758 ecr 522832372], length 0
10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 122825759 ecr 522832372], length 112: HTTP: GET / HTTP/1.1
5 packets captured
5 packets received by filter
0 packets dropped by kernel

ќбратите внимание, что tcpdump захватывает пакеты с исход€щим IP-адресом 192.168.122.98 дл€ нескольких служб, таких как разрешение имен (порт 53) и HTTP (порт 80). ѕакеты ответов не отображаютс€, так как их исходный IP адрес у них отличаетс€.

» наоборот, вы можете использовать фильтр dst дл€ фильтрации по IP-адресу или имени хоста:

sudo tcpdump -i any -c5 -nn dst 192.168.122.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48)
10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32)
10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [S.], seq 3474204576, ack 3256851264, win 28960, options [mss 1460,sackOK,TS val 522874425 ecr 122993922,nop,wscale 9], length 0
10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [.], ack 113, win 57, options [nop,nop,TS val 522874436 ecr 122993972], length 0
10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 522874437 ecr 122993972], length 642: HTTP: HTTP/1.1 302 Found
5 packets captured
5 packets received by filter
0 packets dropped by kernel

—ложные выражени€

¬ы также можете комбинировать фильтры с помощью логических операторов and, or и not дл€ создани€ более сложных выражений. Ќапример, чтобы отфильтровать пакеты с IP-адреса источника 192.168.122.98 и только служебного HTTP, используйте эту команду:

sudo tcpdump -i any -c5 -nn src 192.168.122.98 and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:08:00.472696 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [S], seq 2712685325, win 29200, options [mss 1460,sackOK,TS val 123170822 ecr 0,nop,wscale 7], length 0
10:08:00.516118 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 268723504, win 229, options [nop,nop,TS val 123170865 ecr 522918648], length 0
10:08:00.516583 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [P.], seq 0:112, ack 1, win 229, options [nop,nop,TS val 123170866 ecr 522918648], length 112: HTTP: GET / HTTP/1.1
10:08:00.567044 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 123170916 ecr 522918661], length 0
10:08:00.788153 IP 192.168.122.98.39342 > 54.204.39.132.80: Flags [F.], seq 112, ack 643, win 239, options [nop,nop,TS val 123171137 ecr 522918661], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

¬ы можете создавать более сложные выражени€, группиру€ фильтр с круглыми скобками. ¬ этом случае заключите все выражение фильтра в кавычки, чтобы оболочка не перепутала их с выражени€ми оболочки:

sudo tcpdump -i any -c5 -nn "port 80 and (src 192.168.122.98 or src 54.204.39.132)"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [S], seq 871108679, win 29200, options [mss 1460,sackOK,TS val 123327951 ecr 0,nop,wscale 7], length 0
10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [S.], seq 854753193, ack 871108680, win 28960, options [mss 1460,sackOK,TS val 522957932 ecr 123327951,nop,wscale 9], length 0
10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 0
10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 123328000 ecr 522957932], length 112: HTTP: GET / HTTP/1.1
10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: Flags [.], ack 113, win 57, options [nop,nop,TS val 522957942 ecr 123328000], length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

¬ этом примере мы фильтруем пакеты только дл€ службы HTTP (порт 80) и исход€щих IP-адресов 192.168.122.98 или 54.204.39.132. Ёто быстрый способ изучени€ обеих сторон одного и того же потока.


ѕроверка содержимого пакета

¬ предыдущих примерах мы провер€ли только заголовки пакетов на наличие информации, такой как источник, адресаты, порты и так далее. »ногда это все, что нам нужно дл€ устранени€ проблем с сетевым подключением. ќднако иногда нам необходимо проверить содержимое пакета, чтобы убедитьс€, что в отправл€емом сообщении содержитс€ то, что нам нужно, или что мы получили ожидаемый ответ. „тобы увидеть содержимое пакета, tcpdump предоставл€ет два дополнительных флага: -X дл€ печати содержимого в шестнадцатеричном формате (HEX) и -A дл€ печати содержимого в ASCII.

Ќапример, проверьте HTTP-содержимое веб-запроса следующим образом:

sudo tcpdump -i any -c10 -nn -A port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [S], seq 2546602048, win 29200, options [mss 1460,sackOK,TS val 133625221 ecr 0,nop,wscale 7], length 0
E..<..@.@.....zb6.'....P...@......r............
............................
13:02:14.910734 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [S.], seq 1877348646, ack 2546602049, win 28960, options [mss 1460,sackOK,TS val 525532247 ecr 133625221,nop,wscale 9], length 0
E..<..@./..a6.'...zb.P..o..&...A..q a..........
.R.W.......     ................
13:02:14.910832 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 133625260 ecr 525532247], length 0
E..4..@.@.....zb6.'....P...Ao..'...........
.....R.W................
13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 133625261 ecr 525532247], length 112: HTTP: GET / HTTP/1.1
E.....@.@..1..zb6.'....P...Ao..'...........
.....R.WGET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: wiki.merionet.ru
Connection: Keep-Alive

................
13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [.], ack 113, win 57, options [nop,nop,TS val 525532257 ecr 133625261], length 0
E..4.F@./.."6.'...zb.P..o..'.......9.2.....
.R.a....................
13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 525532258 ecr 133625261], length 642: HTTP: HTTP/1.1 302 Found
E....G@./...6.'...zb.P..o..'.......9.......
.R.b....HTTP/1.1 302 Found
Server: nginx
Date: Sun, 29 Sep 2019 17:02:14 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 207
X-Content-Type-Options: nosniff
Location: https://wiki.merionet.ru/
Cache-Control: max-age=1209600
Expires: Sun, 07 Oct 2018 17:02:14 GMT
X-Request-ID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d
X-Varnish: 632951979
Age: 0
Via: 1.1 varnish (Varnish/5.2)
X-Cache: MISS
Connection: keep-alive

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://wiki.merionet.ru/">here</a>.</p>
</body></html>
................
13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 133625304 ecr 525532258], length 0
E..4..@.@.....zb6.'....P....o..............
.....R.b................
13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 133625545 ecr 525532258], length 0
E..4..@.@.....zb6.'....P....o..............
.....R.b................
13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 525532329 ecr 133625545], length 0
E..4.H@./.. 6.'...zb.P..o..........9.I.....
.R......................
13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 133625586 ecr 525532329], length 0
E..4..@.@.....zb6.'....P....o..............
.....R..................
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Ёто полезно дл€ устранени€ проблем с вызовами API, при условии, что вызовы используют простой HTTP. ƒл€ зашифрованных соединений этот вывод менее полезен.


—охранение файл

ƒруга€ полезна€ функци€, предоставл€ема€ tcpdump, - это возможность сохран€ть захват в файл, чтобы вы могли проанализировать результаты позже. Ёто позвол€ет вам захватывать пакеты в пакетном режиме, например, ночью и провер€ть результаты утром. Ёто также помогает, когда слишком много пакетов дл€ анализа, поскольку захват в реальном времени может происходить слишком быстро.

„тобы сохранить пакеты в файл, а не отображать их на экране, используйте параметр -w:

sudo tcpdump -i any -c10 -nn -w webserver.pcap port 80
[sudo] password for ricardo:
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Ёта команда сохран€ет выходные данные в файле с именем webserver.pcap. –асширение .pcap расшифровываетс€ как Ђpacket captureї и €вл€етс€ соглашением дл€ этого формата файла.

 ак показано в этом примере, на экране ничего не отображаетс€, и захват завершаетс€ после захвата 10 пакетов, согласно опции -c10. ≈сли вы хотите получить обратную св€зь, чтобы гарантировать захват пакетов, используйте опцию -v.

Tcpdump создает файл в двоичном формате, поэтому вы не можете просто открыть его в текстовом редакторе. „тобы прочитать содержимое файла, выполните tcpdump с опцией -r:

tcpdump -nn -r webserver.pcap
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [S], seq 3709732619, win 29200, options [mss 1460,sackOK,TS val 135708029 ecr 0,nop,wscale 7], length 0
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 0
13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [P.], seq 1:113, ack 1, win 229, options [nop,nop,TS val 135708068 ecr 526052949], length 112: HTTP: GET / HTTP/1.1
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 643, win 239, options [nop,nop,TS val 135708109 ecr 526052959], length 0
13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [F.], seq 113, ack 643, win 239, options [nop,nop,TS val 135708327 ecr 526052959], length 0
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0
13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: Flags [.], ack 644, win 239, options [nop,nop,TS val 135708371 ecr 526053025], length 0

ѕоскольку вы больше не захватываете пакеты непосредственно из сетевого интерфейса, sudo не требуетс€ дл€ чтени€ файла.

¬ы также можете использовать любой из фильтров, которые мы обсуждали, чтобы отфильтровать содержимое из файла, так же, как и с данными в реальном времени. Ќапример, проверьте пакеты в файле захвата с исход€щего IP-адреса 54.204.39.132, выполнив эту команду:

tcpdump -nn -r webserver.pcap src 54.204.39.132
reading from file webserver.pcap, link-type LINUX_SLL (Linux cooked)
13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [S.], seq 1999298316, ack 3709732620, win 28960, options [mss 1460,sackOK,TS val 526052949 ecr 135708029,nop,wscale 9], length 0
13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [.], ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 0
13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [P.], seq 1:643, ack 113, win 57, options [nop,nop,TS val 526052959 ecr 135708068], length 642: HTTP: HTTP/1.1 302 Found
13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: Flags [F.], seq 643, ack 114, win 57, options [nop,nop,TS val 526053025 ecr 135708327], length 0

≈сли вы хотите запустить tcpdump в фоновом режиме, добавьте & в конце команды.


«аключение

Ёти основные функции tcpdump помогут вам начать работу с этим мощным и универсальным инструментом. „тобы узнать больше, посетите веб-сайт tcpdump и справочные страницы.

»нтерфейс командной строки tcpdump обеспечивает большую гибкость дл€ захвата и анализа сетевого трафика. ≈сли вам нужен графический инструмент дл€ понимани€ более сложных потоков, посмотрите на Wireshark.

ќдним из преимуществ Wireshark €вл€етс€ то, что он может читать файлы .pcap, захваченные tcpdump. ¬ы можете использовать tcpdump дл€ захвата пакетов на удаленной машине, у которой нет графического интерфейса пользовател€, и проанализировать файл результатов с помощью Wireshark.


ѕолезна ли ¬ам эта стать€?