Оригинальная ссылка:Пример учебника по Tcpdump
Основное содержание этой статьи переведено с《Примеры TCPDump》.
tcpdump
Это мощный инструмент захвата сетевых пакетов, который используетlibpcap
Библиотека для захвата сетевых пакетов, эта библиотека доступна почти во всех Linux/Unix. Знакомство с использованием tcpdump может помочь вам анализировать и отлаживать сетевые данные.Эта статья представит его использование в различных сценариях на конкретных примерах. Независимо от того, являетесь ли вы системным администратором, программистом, облачным инженером или инженером yaml, освоение tcpdump может дать вам большую власть, продвижение по службе и увеличение заработной платы.
1. Основной синтаксис и использование
tcpdump
Обычно используются следующие параметры:
$ tcpdump -i eth0 -nn -s0 -v port 80
-
-i: выберите интерфейс для захвата, обычно карта Ethernet или беспроводная карта, или это может быть
vlan
или другой специальный интерфейс. Нет необходимости указывать, если в этой системе есть только один сетевой интерфейс. - -nn: один n означает, что имя домена не разрешено, и IP отображается напрямую, два n означают, что имя домена и порт не разрешены. Это не только удобно для просмотра IP-адресов и номеров портов, но также очень эффективно при извлечении больших объемов данных, поскольку разрешение доменных имен может замедлить сканирование.
-
-s0: tcpdump будет перехватывать только перед
96
Содержимое байтов, чтобы перехватить все содержимое сообщения, вы можете использовать-s number
,number
Это количество байт сообщения, которое вы хотите перехватить.Если оно равно 0, это означает, что перехватывается все содержимое сообщения. -
-v: использовать
-v
,-vv
и-vvv
для отображения более подробной информации, обычно дополнительной информации, относящейся к конкретному протоколу. -
port 80
: это общий фильтр портов, который означает только сканирование80
Трафик на порту, обычно HTTP.
Введем еще несколько часто используемых параметров:
-
-p: Не переводите сетевой интерфейс в неразборчивый режим. По умолчанию при использовании tcpdump для захвата пакетов сетевой интерфейс переходит в неразборчивый режим. Как правило, компьютерные сетевые карты работают в неслучайном режиме, в это время сетевая карта принимает данные только с адреса назначения сетевого порта, который указывает на себя. Когда сетевая карта работает в неразборчивом режиме, сетевая карта захватывает все данные с интерфейса и передает их соответствующему драйверу. Если на коммутаторе, к которому подключено устройство, включен неразборчивый режим, используйте
-p
возможность эффективно фильтровать шум. -
-e: Отображает информацию о слое канала передачи данных. По умолчанию tcpdump не отображает информацию о канальном уровне, используйте
-e
Параметры могут отображать MAC-адреса источника и получателя, а также информацию о тегах VLAN. Например:
$ tcpdump -n -e -c 5 not ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br-lan, link-type EN10MB (Ethernet), capture size 262144 bytes
18:27:53.619865 24:5e:be:0c:17:af > 00:e2:69:23:d3:3b, ethertype IPv4 (0x0800), length 1162: 192.168.100.20.51410 > 180.176.26.193.58695: Flags [.], seq 2045333376:2045334484, ack 3398690514, win 751, length 1108
18:27:53.626490 00:e2:69:23:d3:3b > 24:5e:be:0c:17:af, ethertype IPv4 (0x0800), length 68: 220.173.179.66.36017 > 192.168.100.20.51410: UDP, length 26
18:27:53.626893 24:5e:be:0c:17:af > 00:e2:69:23:d3:3b, ethertype IPv4 (0x0800), length 1444: 192.168.100.20.51410 > 220.173.179.66.36017: UDP, length 1402
18:27:53.628837 00:e2:69:23:d3:3b > 24:5e:be:0c:17:af, ethertype IPv4 (0x0800), length 1324: 46.97.169.182.6881 > 192.168.100.20.59145: Flags [P.], seq 3058450381:3058451651, ack 14349180, win 502, length 1270
18:27:53.629096 24:5e:be:0c:17:af > 00:e2:69:23:d3:3b, ethertype IPv4 (0x0800), length 54: 192.168.100.20.59145 > 192.168.100.1.12345: Flags [.], ack 3058451651, win 6350, length 0
5 packets captured
Показать строку ASCII
-A
указать использованиеASCII
Строка выводит все данные сообщения, что может упростить чтение и использование.grep
и другие инструменты для анализа вывода.-X
Указывает, что как шестнадцатеричный, так иASCII
Строка выводит все данные сообщения. Эти два параметра нельзя использовать вместе. Например:
$ tcpdump -A -s0 port 80
Захват данных для определенного протокола
Вы можете следить за именем протокола, чтобы фильтровать трафик определенного протокола.В качестве примера возьмем UDP, вы можете добавить параметр udp илиprotocol 17
, обе команды означают одно и то же.
$ tcpdump -i eth0 udp
$ tcpdump -i eth0 proto 17
Точно так же tcp иprotocol 6
значит то же самое.
Получить данные для определенного хоста
использовать фильтрhost
Может сканировать трафик для определенных целевых и исходных IP-адресов.
$ tcpdump -i eth0 host 10.10.1.1
также можно использоватьsrc
илиdst
Захватите только источник или пункт назначения:
$ tcpdump -i eth0 dst 10.10.1.20
Записать очищенные данные в файл
При использовании tcpdump для перехвата пакетов данных вывод по умолчанию будет выводиться на экран по умолчанию.Вы увидите много данных, мигающих строка за строкой в порядке и формате, и уже слишком поздно, чтобы увидеть весь контент. Однако tcpdump предоставляет функцию сохранения перехваченных данных в файл для последующего анализа с помощью других графических инструментов (таких как wireshark, Snort).
-w
Опции используются для вывода дейтаграмм в файл:
$ tcpdump -i eth0 -s0 -w test.pcap
режим линейного буфера
Если вы хотите передать захваченные данные другим инструментам для обработки в режиме реального времени, вам нужно использовать-l
возможность включить режим линейного буфера (или использовать-c
возможность включить режим буферизации пакетов). использовать-l
Возможность немедленно отправить вывод другим командам, которые немедленно ответят.
$ tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
Комбинированные фильтры
Настоящая сила фильтров заключается в том, что вы можете комбинировать их по своему усмотрению, а логика их соединения обычно используется.与/AND/&&
,或/OR/||
и非/not/!
.
and or &&
or or ||
not or !
2. Фильтры
Что касается фильтра tcpdump, то здесь его необходимо представить отдельно.
Количество сетевых пакетов на машине аномально велико.Во многих случаях речь идет только о дейтаграммах, связанных с конкретными проблемами (например, данные о посещении определенного веб-сайта, пакеты тайм-аута icmp и т. д.), и эти данные только приходится на небольшой промежуток времени часть. Перехват всех данных и получение из них нужной информации, несомненно, является трудоемкой и кропотливой работой. А tcpdump обеспечивает гибкий синтаксис для точного перехвата интересующих дейтаграмм, упрощая анализ. Эти операторы, которые выбирают пакеты, являются фильтрами!
Фильтр хостов
Host filter используется для фильтрации пакетов данных хоста. Например:
$ tcpdump host 1.2.3.4
Эта команда захватит все сообщения, отправленные на хост1.2.3.4
или от хозяина1.2.3.4
исходящий трафик. Если вы хотите перехватывать только трафик с этого хоста, вы можете использовать следующую команду:
$ tcpdump src host 1.2.3.4
Сетевой фильтр
Сетевой фильтр используется для фильтрации данных определенного сегмента сети с помощьюCIDRмодель. Можно использовать четверные (x.x.x.x), тройные (x.x.x), двойные (x.x) и унарные (x) числа. Четверка указывает на определенный хост, а тройка указывает на то, что маска подсети255.255.255.0
, два кортежа означают, что маска подсети255.255.0.0
, кортеж, указывающий, что маска подсети255.0.0.0
. Например,
Захватить все сегменты сети, отправленные на192.168.1.x
или из сегмента сети192.168.1.x
Исходящий трафик:
$ tcpdump net 192.168.1
Захватить все сегменты сети, отправленные на10.x.x.x
или из сегмента сети10.x.x.x
Исходящий трафик:
$ tcpdump net 10
Как и в случае с фильтром Host, здесь также можно указать источник и место назначения:
$ tcpdump src net 10
Также можно использовать формат CIDR:
$ tcpdump src net 172.16.0.0/12
Прото фильтр
Протофильтр используется для фильтрации данных определенного протокола, ключевое словоproto
, можно опустить. proto может сопровождаться номером протокола или именем протокола, поддержкаicmp
, igmp
, igrp
, pim
, ah
, esp
, carp
, vrrp
, udp
иtcp
. Поскольку обычное имя протокола является зарезервированным полем, оно должно быть экранировано одной или двумя обратными косыми чертами (/) в зависимости от типа оболочки при использовании с директивой proto. Оболочка в Linux должна быть экранирована двумя обратными косыми чертами, MacOS нужен только один.
Например, для перехвата пакетов протокола icmp:
$ tcpdump -n proto \\icmp
# 或者
$ tcpdump -n icmp
Фильтр портов
Фильтр порта используется для фильтрации пакетов данных, проходящих через порт, ключевое словоport
. Например:
$ tcpdump port 389
3. Разберитесь с выводом tcpdump
Перехват данных — это только первый шаг.Второй шаг — понять данные.Смысл каждой части вывода команды tcpdump объясняется ниже.
21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64)
192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 0
21:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44)
124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 0
21:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40)
192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0
Самой основной и наиболее важной информацией является адрес/порт источника и адрес/порт назначения дейтаграммы.В первой дейтаграмме приведенного выше примера IP-адрес источника равен192.168.1.106
, исходный порт56166
, адрес назначения124.192.132.54
, порт назначения80
.>
Символы представляют направление данных.
Кроме того, указанные выше три фрагмента данных по-прежнему представляют собой процесс трехэтапного рукопожатия протокола tcp.SYN
сообщение, которое можно передатьFlags [S]
видеть. Ниже приведены флаги общих TCP-пакетов:
-
[S]
: SYN (начать соединение) -
[.]
: нет флага -
[P]
: PSH (Push-данные) -
[F]
: FIN (концевое соединение) -
[R]
: RST (сброс соединения)
И вторые данные[S.]
выражатьSYN-ACK
,этоSYN
Ответное сообщение на сообщение.
4. Примеры
Ниже приведены некоторые конкретные примеры, каждый из которых может использовать несколько методов для получения одного и того же вывода. Используемый метод зависит от желаемого вывода и трафика в сети. Когда мы устраняем неполадки, мы обычно просто хотим получить то, что хотим, чего можно добиться с помощью фильтров и вывода ASCII в сочетании с конвейерами и такими инструментами, как grep, cut, awk и т. д.
Например, при очистке пакетов HTTP-запросов и ответов флаг можно снять, удаливSYN/ACK/FIN
для фильтрации шума, но есть более простой способ, который состоит в том, чтобыgrep
. Достигая цели, мы должны выбрать самый простой и эффективный метод. Давайте посмотрим пример.
Извлечь пользовательский агент HTTP
Извлеките HTTP User-Agent из заголовка HTTP-запроса:
$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"
пройти черезegrep
Можно извлечь как пользовательский агент, так и имя хоста (или другие заголовки):
$ tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'
Сканировать только трафик HTTP GET и POST
Захватите трафик HTTP GET:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
Также можно перехватывать трафик запросов HTTP POST:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
Примечание. Этот метод не может гарантировать захват действительного трафика данных HTTP POST, поскольку запрос POST будет разделен на несколько пакетов TCP.
Шестнадцатеричный код в двух приведенных выше выражениях будет таким же, как в запросах GET и POST.ASCII
Совпадение строк. Например,tcp[((tcp[12:1] & 0xf0) >> 2):4]
сначала будетОпределяем расположение интересующих нас байтов(после заголовка TCP), а затем выберите 4 байта, которые мы хотим сопоставить.
Извлечь URL-адрес HTTP-запроса
Извлеките имя хоста и путь HTTP-запроса:
$ tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
POST /wp-login.php HTTP/1.1
Host: dev.example.com
GET /wp-login.php HTTP/1.1
Host: dev.example.com
GET /favicon.ico HTTP/1.1
Host: dev.example.com
GET / HTTP/1.1
Host: dev.example.com
Извлечь пароль из запроса HTTP POST
Извлеките пароль и имя хоста из запроса HTTP POST:
$ tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:25:54.799014 IP 10.10.1.30.39224 > 10.10.1.125.80: Flags [P.], seq 1458768667:1458770008, ack 2440130792, win 704, options [nop,nop,TS val 461552632 ecr 208900561], length 1341: HTTP: POST /wp-login.php HTTP/1.1
.....s..POST /wp-login.php HTTP/1.1
Host: dev.example.com
.....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1
Извлечь куки
извлекатьSet-Cookie
(файлы cookie на стороне сервера) иCookie
(Клиентский файл cookie):
$ tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Host: dev.example.com
Cookie: wordpress_86be02xxxxxxxxxxxxxxxxxxxc43=admin%7C152xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfb3e15c744fdd6; _ga=GA1.2.21343434343421934; _gid=GA1.2.927343434349426; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_86be654654645645645654645653fc43=admin%7C15275102testtesttesttestab7a61e; wp-settings-time-1=1527337439
Захват пакетов ICMP
Просмотреть все пакеты ICMP в сети:
$ tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:34:21.590380 IP 10.10.1.217 > 10.10.1.30: ICMP echo request, id 27948, seq 1, length 64
11:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 64
11:34:27.680307 IP 10.10.1.159 > 10.10.1.1: ICMP 10.10.1.189 udp port 59619 unreachable, length 115
Захват ICMP-пакетов, отличных от ECHO/REPLY
Исключая пакеты типа эха и ответа, захваченные пакеты не включают стандартныеping
Сумка:
$ tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:37:04.041037 IP 10.10.1.189 > 10.10.1.20: ICMP 10.10.1.189 udp port 36078 unreachable, length 156
Получение электронной почты по протоколу SMTP/POP3
Тело и другие данные электронной почты могут быть извлечены. Например, чтобы извлечь только получателей писем:
$ tcpdump -nn -l port 25 | grep -i 'MAIL FROM\|RCPT TO'
Захват запросов и ответов от служб NTP
$ tcpdump dst port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:02:19.112502 IP test33.ntp > 199.30.140.74.ntp: NTPv4, Client, length 48
21:02:19.113888 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48
21:02:20.150347 IP test33.ntp > 216.239.35.0.ntp: NTPv4, Client, length 48
21:02:20.150991 IP 216.239.35.0.ntp > test33.ntp: NTPv4, Server, length 48
Захват запросов и ответов от служб SNMP
С помощью службы SNMP специалисты по тестированию на проникновение могут получить большой объем информации об устройствах и системе. Среди этой информации системная информация является наиболее важной, например, версия операционной системы, версия ядра и т. д. Быстрый сканер с использованием протокола SNMPonesixtyone
, вы можете увидеть информацию о целевой системе:
$ onesixtyone 10.10.1.10 public
Scanning 1 hosts, 1 communities
10.10.1.10 [public] Linux test33 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64
Может быть захвачен tcpdumpGetRequest
иGetResponse
:
$ tcpdump -n -s0 port 161 and udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:39:13.725522 IP 10.10.1.159.36826 > 10.10.1.20.161: GetRequest(28) .1.3.6.1.2.1.1.1.0
23:39:13.728789 IP 10.10.1.20.161 > 10.10.1.159.36826: GetResponse(109) .1.3.6.1.2.1.1.1.0="Linux testmachine 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64"
вырезать pcap-файл
При захвате большого объема данных и записи в файл его можно автоматически разрезать на несколько файлов одинакового размера. Например, следующая команда означает создание нового файла каждые 3600 секунд.capture-(hour).pcap
, размер каждого файла не превышает200*1000000
байт:
$ tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200
Эти файлы называютсяcapture-{1-24}.pcap
, через 24 часа предыдущий файл будет перезаписан.
Захватить трафик IPv6
может пройти фильтрip6
для захвата трафика IPv6, и вы можете указать протокол, например TCP:
$ tcpdump -nn ip6 proto 6
Чтение дейтаграмм IPv6 UDP из ранее сохраненного файла:
$ tcpdump -nr ipv6-test.pcap ip6 proto 17
Обнаружить сканирование портов
В следующем примере вы обнаружите, что источник и место назначения захваченных пакетов остаются неизменными с флагами[S]
и[R]
, которые сопоставляются с рядом, казалось бы, случайных портов назначения. при отправкеSYN
После этого, если порт целевого хоста не открыт, он вернетRESET
. ЭтоNmap
Стандартная практика для других инструментов сканирования портов.
$ tcpdump -nn
21:46:19.693601 IP 10.10.1.10.60460 > 10.10.1.199.5432: Flags [S], seq 116466344, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693626 IP 10.10.1.10.35470 > 10.10.1.199.513: Flags [S], seq 3400074709, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
21:46:19.693762 IP 10.10.1.10.44244 > 10.10.1.199.389: Flags [S], seq 2214070267, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 0
21:46:19.693783 IP 10.10.1.10.35172 > 10.10.1.199.1433: Flags [S], seq 2358257571, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.693826 IP 10.10.1.10.33022 > 10.10.1.199.49153: Flags [S], seq 2406028551, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
21:46:19.695567 IP 10.10.1.10.55130 > 10.10.1.199.49154: Flags [S], seq 3230403372, win 29200, options [mss 1460,sackOK,TS val 3547090334 ecr 0,nop,wscale 7], length 0
21:46:19.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 0
21:46:19.695608 IP 10.10.1.10.33460 > 10.10.1.199.49152: Flags [S], seq 3289070068, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 0
21:46:19.695637 IP 10.10.1.10.34940 > 10.10.1.199.1029: Flags [S], seq 140319147, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 0
21:46:19.695664 IP 10.10.1.10.45648 > 10.10.1.199.5060: Flags [S], seq 2203629201, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695775 IP 10.10.1.10.49028 > 10.10.1.199.2000: Flags [S], seq 635990431, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
21:46:19.695790 IP 10.10.1.199.2000 > 10.10.1.10.49028: Flags [R.], seq 0, ack 635990432, win 0, length 0
Фильтрация результатов тестирования сценария Nmap NSE
Тестовый скрипт Nmap NSE в этом примереhttp-enum.nse
Действительный URL-адрес, используемый для обнаружения служб HTTP.
На хосте, где выполняются скриптовые тесты:
$ nmap -p 80 --script=http-enum.nse targetip
На целевом хосте:
$ tcpdump -nn port 80 | grep "GET /"
GET /w3perl/ HTTP/1.1
GET /w-agora/ HTTP/1.1
GET /way-board/ HTTP/1.1
GET /web800fo/ HTTP/1.1
GET /webaccess/ HTTP/1.1
GET /webadmin/ HTTP/1.1
GET /webAdmin/ HTTP/1.1
Сканирование DNS-запросов и ответов
Исходящий трафик на Google Public DNSDNS
Запросы и ответы на записи могут быть перехвачены через tcpdump:
$ tcpdump -i wlp58s0 -s0 port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:19:06.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44)
14:19:07.022618 IP google-public-dns-a.google.com.domain > test.53852: 26977 1/0/1 A 216.58.203.110 (60)
Захват действительных пакетов HTTP
Захватите действительные HTTP-пакеты порта 80, за исключением пакетов процесса установления TCP-соединения (SYN/FIN/ACK):
$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Перенаправить вывод в Wireshark
как правилоWireshark
(или tshark) легче анализировать протоколы прикладного уровня, чем tcpdump. Общая практика заключается в том, чтобы сначала использовать удаленный сервер.tcpdump
захватите данные и запишите их в файл, затем скопируйте файл на локальную рабочую станцию с помощьюWireshark
анализировать.
Существует также более эффективный способ отправки захваченных данных в Wireshark в режиме реального времени через ssh-соединение для анализа. Взяв в качестве примера систему MacOS, вы можете использоватьbrew cask install wireshark
установить, а затем проанализировать его с помощью следующей команды:
$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -
Например, если вы хотите проанализировать протокол DNS, вы можете использовать следующую команду:
$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - port 53' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -
Захваченные данные:
-c
Возможность ограничить размер очищаемых данных. Если вы не ограничиваете размер, вы можете пройти толькоctrl-c
чтобы остановить парсинг, который отключает не только tcpdump, но и wireshark.
Найдите IP с наибольшим количеством пакетов
Чтобы узнать IP-адрес, который отправляет наибольшее количество пакетов за определенный период времени, или найти IP-адрес, который отправляет наибольшее количество пакетов из группы пакетов, вы можете использовать следующую команду:
$ tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
200 packets captured
261 packets received by filter
0 packets dropped by kernel
108 IP 10.10.211.181
91 IP 10.10.1.30
1 IP 10.10.1.50
-
cut -f 1,2,3,4 -d '.': от
.
является разделителем, выведите первые четыре столбца каждой строки. То есть IP-адрес. - sort | uniq -c: сортировать и считать
- sort -nr: сортировать в обратном порядке по значению
Возьмите имя пользователя и пароль
В этом примере основное внимание уделяется стандартному текстовому протоколу, фильтрующему пакеты, связанные с именем пользователя и паролем:
$ tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '
Захват DHCP-пакетов
В последнем примере захватываются пакеты запроса и ответа службы DHCP, 67 — это порт DHCP, а 68 — порт клиента.
$ tcpdump -v -n port 67 or 68
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:37:50.059662 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none]
Client-Ethernet-Address 00:0c:xx:xx:xx:d5
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
Requested-IP Option 50, length 4: 10.10.1.163
Hostname Option 12, length 14: "test-ubuntu"
Parameter-Request Option 55, length 16:
Subnet-Mask, BR, Time-Zone, Default-Gateway
Domain-Name, Domain-Name-Server, Option 119, Hostname
Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route
NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252
14:37:50.059667 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:xx:xx:xx:d5, length 300, xid 0xc9779c2a, Flags [none]
Client-Ethernet-Address 00:0c:xx:xx:xx:d5
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: Request
Requested-IP Option 50, length 4: 10.10.1.163
Hostname Option 12, length 14: "test-ubuntu"
Parameter-Request Option 55, length 16:
Subnet-Mask, BR, Time-Zone, Default-Gateway
Domain-Name, Domain-Name-Server, Option 119, Hostname
Netbios-Name-Server, Netbios-Scope, MTU, Classless-Static-Route
NTP, Classless-Static-Route-Microsoft, Static-Route, Option 252
14:37:50.060780 IP (tos 0x0, ttl 64, id 53564, offset 0, flags [none], proto UDP (17), length 339)
10.10.1.1.67 > 10.10.1.163.68: BOOTP/DHCP, Reply, length 311, xid 0xc9779c2a, Flags [none]
Your-IP 10.10.1.163
Server-IP 10.10.1.1
Client-Ethernet-Address 00:0c:xx:xx:xx:d5
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 10.10.1.1
Lease-Time Option 51, length 4: 86400
RN Option 58, length 4: 43200
RB Option 59, length 4: 75600
Subnet-Mask Option 1, length 4: 255.255.255.0
BR Option 28, length 4: 10.10.1.255
Domain-Name-Server Option 6, length 4: 10.10.1.1
Hostname Option 12, length 14: "test-ubuntu"
T252 Option 252, length 1: 10
Default-Gateway Option 3, length 4: 10.10.1.1
5. Резюме
Эта статья в основном знакомитtcpdump
Базовый синтаксис и использование , а также несколько примеров, демонстрирующих его мощную функцию фильтрации. Сочетание tcpdump и wireshark может быть более мощным, и в этой статье также показано, как элегантно и плавно объединить tcpdump и wireshark. Если вам нужна дополнительная информация, вы можете проверить tcpdumpman
руководство.
Публичный аккаунт WeChat
Отсканируйте QR-код ниже, чтобы подписаться на официальную учетную запись WeChat, и ответьте на официальную учетную запись ◉Добавить группу◉, чтобы присоединиться к нашей облачной коммуникационной группе и обсудить облачные технологии с Сунь Хунляном, директором Чжаном, Ян Мином и другими важными шишками.