Вывести список сетевых интерфейсов, доступных системе
*nix $
tcpdump -D
WSL $
tcpdump.exe -D
CMD >
tcpdump.exe -D
PS >
tcpdump.exe -D
Выводится список доступных сетевых интерфейсов. В Windows нет интерфейса any
, объединяющего трафик со всех интерфейсов. Если запустить tcpdump.exe
без указания прослушиваемого интерфейса, то прослушиваться будет первый обнаруженный.
Указать сетевой интерфейс для прослушивания трафика по номеру интерфейса
*nix $
tcpdump -i <номер_интерфейса>
WSL $
tcpdump.exe -i <номер_интерфейса>
CMD >
tcpdump.exe -i <номер_интерфейса>
PS >
tcpdump.exe -i <номер_интерфейса>
В Windows имена интерфейсов могут быть очень длинными, например:
C:\>tcpdump -D 1.\Device\NdisWanBh (WAN Miniport (Network Monitor)) 2.\Device\{1F361AA0-9606-4422-836B-8D2465C812B6} (Realtek RTL8169/8110 Family Gigabit Ethernet NIC)
Вариант команды tcpdump.exe -i <номер_интерфейса>
значительно упрощает работу.
В Windows нет интерфейса any
, объединяющего трафик со всех интерфейсов. Если запустить tcpdump.exe
без указания прослушиваемого интерфейса, то прослушиваться будет первый обнаруженный.
Внимание: В приведённых ниже примерах интерфейс для прослушивания не указан.
*nix $
tcpdump -ttttnnvvS
WSL $
tcpdump.exe -ttttnnvvS
CMD >
tcpdump.exe -ttttnnvvS
PS >
tcpdump.exe -ttttnnvvS
Вывод IP-адреса и номер порта, временных меток в формате по умолчанию, дополнительное увеличение объема выводимой информации и порядковые номера для каждой строки дампа.
*nix $
tcpdump -nnvXSs 0 -c1 icmp
WSL $
tcpdump.exe -nnvXSs 0 -c1 icmp
CMD >
tcpdump.exe -nnvXSs 0 -c1 icmp
PS >
tcpdump.exe -nnvXSs 0 -c1 icmp
Вывод дополнительной информации (TTL, идентификация, общий размер, опции IP, контрольные суммы и т.п.) о пакете ICMP и отображение его в шестнадцатеричном виде.
*nix $
tcpdump -w capture_file.pcap
WSL $
tcpdump.exe -w capture_file.pcap
CMD >
tcpdump.exe -w capture_file.pcap
PS >
tcpdump.exe -w capture_file.pcap
Запись трафика в PCAP-файл.
*nix $
tcpdump -r capture_file.pcap
WSL $
tcpdump.exe -r capture_file.pcap
CMD >
tcpdump.exe -r capture_file.pcap
PS >
tcpdump.exe -r capture_file.pcap
Чтение трафика из PCAP-файла.
*nix $
tcpdump -C <размер_файла> -w <имя_файла>
WSL $
tcpdump.exe -C <размер_файла> -w <имя_файла>
CMD >
tcpdump.exe -C <размер_файла> -w <имя_файла>
PS >
tcpdump.exe -C <размер_файла> -w <имя_файла>
Задает проверку на размер файла перед записью каждого пакета. Если размер превышает значение заданного параметра, то tcpdump создает новый файл с префиксом в конце имени файла. <размер_файла>
задаёт размер файла в 1 000 000 байт (не 1 048 576 байт).
*nix $
tcpdump –r packets.pcap «tcp dst port 80» –w http_packets.pcap
WSL $
tcpdump.exe –r packets.pcap «tcp dst port 80» –w http_packets.pcap
CMD >
tcpdump.exe –r packets.pcap «tcp dst port 80» –w http_packets.pcap
PS >
tcpdump.exe –r packets.pcap «tcp dst port 80» –w http_packets.pcap
Объединение параметров -r
и -w
дает возможность отфильтровать данный PCAP-файл в новый PCAP-файл
*nix $
tcpdump -A
WSL $
tcpdump.exe -A
CMD >
tcpdump.exe -A
PS >
tcpdump.exe -A
Отображать отправленные и полученные пакеты в ASCII-формате.
*nix $
tcpdump -l
WSL $
tcpdump.exe -l
CMD >
tcpdump.exe -l
PS >
tcpdump.exe -l
Вывод в stdout
построчно для каждого пакета, иначе вывод происходит через буфер в 4096 байт. Удобно использовать с утилитой grep
(Linux, Windows Subsystem for Linux), FINDSTR
(CMD.EXE) или Select-String
(PowerShell).
*nix $
tcpdump portrange 21-23
WSL $
tcpdump.exe portrange 21-23
CMD >
tcpdump.exe portrange 21-23
PS >
tcpdump.exe portrange 21-23
Перехватывать трафик с указанного диапазона портов.
*nix $
tcpdump src port 443
WSL $
tcpdump.exe src port 443
CMD >
tcpdump.exe src port 443
PS >
tcpdump.exe src port 443
Перехватывать трафик по номеру порта клиента.
*nix $
tcpdump dst port 443
WSL $
tcpdump.exe dst port 443
CMD >
tcpdump.exe dst port 443
PS >
tcpdump.exe dst port 443
Перехватывать трафик по номеру порта сервера.
*nix $
tcpdump less 32
WSL $
tcpdump.exe less 32
CMD >
tcpdump.exe less 32
PS >
tcpdump.exe less 32
Перехватывать только пакеты размером менее 32
байт.
*nix $
tcpdump greater 64
WSL $
tcpdump.exe greater 64
CMD >
tcpdump.exe greater 64
PS >
tcpdump.exe greater 64
Перехватывать только пакеты размером более 64
байт.
*nix $
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
WSL $
tcpdump.exe -nnvvS src 10.5.2.3 and dst port 3389
CMD >
tcpdump.exe -nnvvS src 10.5.2.3 and dst port 3389
PS >
tcpdump.exe -nnvvS src 10.5.2.3 and dst port 3389
Перехватывать трафик от 10.5.2.3
на порт назначения 3389
.
*nix $
tcpdump -nvX src net 10.100.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
WSL $
tcpdump.exe -nvX src net 10.100.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
CMD >
tcpdump.exe -nvX src net 10.100.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
PS >
tcpdump.exe -nvX src net 10.100.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
Перехватывать трафик из сети 10.100.0.0/16
в сеть 10.0.0.0/8
или 172.16.0.0/16
.
*nix $
tcpdump -nvvXSs 1514 dst google.com and src net 172.16.0.0 and not icmp
WSL $
tcpdump.exe -nvvXSs 1514 dst google.com and src net 172.16.0.0 and not icmp
CMD >
tcpdump.exe -nvvXSs 1514 dst google.com and src net 172.16.0.0 and not icmp
PS >
tcpdump.exe -nvvXSs 1514 dst google.com and src net 172.16.0.0 and not icmp
Перехватывать пакеты подсети 172.16.0.0
на google.com
, исключая ICMP-пакеты.
*nix $
tcpdump -vv src 192.168.1.81 and not dst port 22
WSL $
tcpdump.exe -vv src 192.168.1.81 and not dst port 22
CMD >
tcpdump.exe -vv src 192.168.1.81 and not dst port 22
PS >
tcpdump.exe -vv src 192.168.1.81 and not dst port 22
Перехватывать трафик, где адрес источника – 192.168.1.81
, кроме того, который приходит на порт назначения 22
(SSH).
*nix $
tcpdump -nnv -s1514 –C 100 host 10.81.25.201 -w `hostname`_`date +%Y-%m-%d-%H.%M`.pcap
WSL $
tcpdump.exe -nnv -s1514 –C 100 host 10.81.25.201 -w `hostname`_`date +%Y-%m-%d-%H.%M`.pcap
CMD >
tcpdump.exe -nnv -s1514 –C 100 host 10.81.25.201 -w %computername%_%date%_%time:~0,2%.%time:~3,2%.pcap
PS >
tcpdump.exe -nnv -s1514 –C 100 host 10.81.25.201 -w $(HOSTNAME)_$(Get-Date -format d).pcap
Перехватывать трафик по хосту 10.81.25.201
, записать в файл (в файл включается название хоста машины и дата, что очень удобно для дальнейшего хранения).
*nix $
tcpdump ether broadcast
WSL $
tcpdump.exe ether broadcast
CMD >
tcpdump.exe ether broadcast
PS >
tcpdump.exe ether broadcast
Перехватывать все Broadcast-пакеты.
*nix $
tcpdump ether host aa:bb:cc:11:22:33
WSL $
tcpdump.exe ether host aa:bb:cc:11:22:33
CMD >
tcpdump.exe ether host aa:bb:cc:11:22:33
PS >
tcpdump.exe ether host aa:bb:cc:11:22:33
Фильтрация по MAC-адресу.
*nix $
tcpdump «tcp[13] & 32 != 0»
WSL $
tcpdump.exe «tcp[13] & 32 != 0»
CMD >
tcpdump.exe «tcp[13] & 32 != 0»
PS >
tcpdump.exe «tcp[13] & 32 != 0»
Перехватывать пакеты URGENT (URG).
*nix $
tcpdump «tcp[13] & 16 != 0»
WSL $
tcpdump.exe «tcp[13] & 16 != 0»
CMD >
tcpdump.exe «tcp[13] & 16 != 0»
PS >
tcpdump.exe «tcp[13] & 16 != 0»
Перехватывать все ACKNOWLEDGE пакеты (ACK).
*nix $
tcpdump «tcp[13] & 8 != 0»
WSL $
tcpdump.exe «tcp[13] & 8 != 0»
CMD >
tcpdump.exe «tcp[13] & 8 != 0»
PS >
tcpdump.exe «tcp[13] & 8 != 0»
Перехватывать все PUSH пакеты (PSH).
*nix $
tcpdump «tcp[13] & 4 != 0»
WSL $
tcpdump.exe «tcp[13] & 4 != 0»
CMD >
tcpdump.exe «tcp[13] & 4 != 0»
PS >
tcpdump.exe «tcp[13] & 4 != 0»
Перехватывать все RESET пакеты (RST).
*nix $
tcpdump «tcp[tcpflags] == tcp-rst»
WSL $
tcpdump.exe «tcp[tcpflags] == tcp-rst»
CMD >
tcpdump.exe «tcp[tcpflags] == tcp-rst»
PS >
tcpdump.exe «tcp[tcpflags] == tcp-rst»
Перехватывать все RESET пакеты (RST) (другая интерпретация).
*nix $
tcpdump «tcp[13] & 2 != 0»
WSL $
tcpdump.exe «tcp[13] & 2 != 0»
CMD >
tcpdump.exe «tcp[13] & 2 != 0»
PS >
tcpdump.exe «tcp[13] & 2 != 0»
Перехватывать все SYNCHRONIZE пакеты (SYN).
*nix $
tcpdump «tcp[tcpflags] == tcp-syn»
WSL $
tcpdump.exe «tcp[tcpflags] == tcp-syn»
CMD >
tcpdump.exe «tcp[tcpflags] == tcp-syn»
PS >
tcpdump.exe «tcp[tcpflags] == tcp-syn»
Перехватывать все SYNCHRONIZE пакеты (SYN) (другая интерпретация).
*nix $
tcpdump «tcp[13] & 1 != 0»
WSL $
tcpdump.exe «tcp[13] & 1 != 0»
CMD >
tcpdump.exe «tcp[13] & 1 != 0»
PS >
tcpdump.exe «tcp[13] & 1 != 0»
Перехватывать все FINISH (FIN) пакеты.
*nix $
tcpdump «tcp[tcpflags] == tcp-fin»
WSL $
tcpdump.exe «tcp[tcpflags] == tcp-fin»
CMD >
tcpdump.exe «tcp[tcpflags] == tcp-fin»
PS >
tcpdump.exe «tcp[tcpflags] == tcp-fin»
Перехватывать все FINISH (FIN) пакеты (другая интерпретация).
*nix $
tcpdump «tcp[13] = 18»
WSL $
tcpdump.exe «tcp[13] = 18»
CMD >
tcpdump.exe «tcp[13] = 18»
PS >
tcpdump.exe «tcp[13] = 18»
Перехватывать все SYNCHRONIZE- / ACKNOWLEDGE-пакеты (SYNACK).
*nix $
tcpdump «tcp[13] = 6»
WSL $
tcpdump.exe «tcp[13] = 6»
CMD >
tcpdump.exe «tcp[13] = 6»
PS >
tcpdump.exe «tcp[13] = 6»
Перехватывать пакеты с обычными комплектами RST и SYN.
*nix $
tcpdump «tcp[32:4] = 0x47455420»
WSL $
tcpdump.exe «tcp[32:4] = 0x47455420»
CMD >
tcpdump.exe «tcp[32:4] = 0x47455420»
PS >
tcpdump.exe «tcp[32:4] = 0x47455420»
Перехватывать открытый текст HTTP и получить запрос.
*nix $
tcpdump «tcp[(tcp[12] >> 2):4] = 0x5353482D»
WSL $
tcpdump.exe «tcp[(tcp[12] >> 2):4] = 0x5353482D»
CMD >
tcpdump.exe «tcp[(tcp[12] >> 2):4] = 0x5353482D»
PS >
tcpdump.exe «tcp[(tcp[12] >> 2):4] = 0x5353482D»
Перехватывать SSH-соединение на любой порт.
*nix $
tcpdump «ip[8] < 10»
WSL $
tcpdump.exe «ip[8] < 10»
CMD >
tcpdump.exe «ip[8] < 10»
PS >
tcpdump.exe «ip[8] < 10»
Перехватывать пакеты с TTL меньше 10
.
*nix $
tcpdump «ip[6] & 128 != 0»
WSL $
tcpdump.exe «ip[6] & 128 != 0»
CMD >
tcpdump.exe «ip[6] & 128 != 0»
PS >
tcpdump.exe «ip[6] & 128 != 0»
Перехватывать пакеты с установкой EVILBIT.
*nix $
tcpdump «ether[0] & 1 = 0 and ip[2:2] > 576»
WSL $
tcpdump.exe «ether[0] & 1 = 0 and ip[2:2] > 576»
CMD >
tcpdump.exe «ether[0] & 1 = 0 and ip[2:2] > 576»
PS >
tcpdump.exe «ether[0] & 1 = 0 and ip[2:2] > 576»
Перехватывать широковещательные и групповые пакеты, которые не были переданы с использованием широковещательных и групповых адресов Ethernet.
*nix $
tcpdump «port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420»
WSL $
tcpdump.exe «port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420»
CMD >
tcpdump.exe «port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420»
PS >
tcpdump.exe «port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420»
Перехватывать HTTP GET-запросы.
*nix $
tcpdump proto 11
WSL $
tcpdump.exe proto 11
CMD >
tcpdump.exe proto 11
PS >
tcpdump.exe proto 11
Перехватывать Network Voice Protocol.
*nix $
tcpdump -XX -s 0 port 23
WSL $
tcpdump.exe -XX -s 0 port 23
CMD >
tcpdump.exe -XX -s 0 port 23
PS >
tcpdump.exe -XX -s 0 port 23
Перехватывать все Telnet-сессии.
*nix $
tcpdump -T snmp
WSL $
tcpdump.exe -T snmp
CMD >
tcpdump.exe -T snmp
PS >
tcpdump.exe -T snmp
Перехватывать все SNMP-сессии.
*nix $
tcpdump -ttttxnqs 65535 port 3306
WSL $
tcpdump.exe -ttttxnqs 65535 port 3306
CMD >
tcpdump.exe -ttttxnqs 65535 port 3306
PS >
tcpdump.exe -ttttxnqs 65535 port 3306
Перехватывать все MySQL-сессии на порт 3306
.
*nix $
tcpdump port 53
WSL $
tcpdump.exe port 53
CMD >
tcpdump.exe port 53
PS >
tcpdump.exe port 53
Перехватывать все DNS-запросы на порт 53
.
*nix $
tcpdump ether proto 0x888e
WSL $
tcpdump.exe ether proto 0x888e
CMD >
tcpdump.exe ether proto 0x888e
PS >
tcpdump.exe ether proto 0x888e
Перехватывать пакеты Ethernet type EAPOL.
*nix $
tcpdump -i <номер_интерфейса> -p
WSL $
tcpdump.exe -i <номер_интерфейса> -p
CMD >
tcpdump.exe -i <номер_интерфейса> -p
PS >
tcpdump.exe -i <номер_интерфейса> -p
Указать программе, что не нужно переводить интерфейс в режим захвата. Нельзя использовать опцию -p
с фильтром ether host or ether broadcast
.
*nix $
tcpdump net <имя_сети>
WSL $
tcpdump.exe net <имя_сети>
CMD >
tcpdump.exe net <имя_сети>
PS >
tcpdump.exe net <имя_сети>
Перехватывать исходящий и входящий трафик в конкретной сети.
*nix $
tcpdump «tcp[tcpflags] & (tcp-syn | tcp-fin) != 0 and not src and dst net 127.0.0.1»
WSL $
tcpdump.exe «tcp[tcpflags] & (tcp-syn | tcp-fin) != 0 and not src and dst net 127.0.0.1»
CMD >
tcpdump.exe «tcp[tcpflags] & (tcp-syn | tcp-fin) != 0 and not src and dst net 127.0.0.1»
PS >
tcpdump.exe «tcp[tcpflags] & (tcp-syn | tcp-fin) != 0 and not src and dst net 127.0.0.1»
Перехватывать начальные и конечные пакеты (SYN и FIN-пакеты) для каждого tcp-соединения, исключая локальный хост.
*nix $
tcpdump «tcp port 80 and (((ip[2:2] – ((ip[0] & 0xf) << 2)) – ((tcp[12] & 0xf0) >> 2)) != 0)»
WSL $
tcpdump.exe «tcp port 80 and (((ip[2:2] – ((ip[0] & 0xf) << 2)) – ((tcp[12] & 0xf0) >> 2)) != 0)»
CMD >
tcpdump.exe «tcp port 80 and (((ip[2:2] – ((ip[0] & 0xf) << 2)) – ((tcp[12] & 0xf0) >> 2)) != 0)»
PS >
tcpdump.exe «tcp port 80 and (((ip[2:2] – ((ip[0] & 0xf) << 2)) – ((tcp[12] & 0xf0) >> 2)) != 0)»
Перехватывать все IPv4 HTTP-пакеты на порт и из порта 80
, то есть только пакеты с данными (отфильтровать, например, SYN, FIN и ACK-пакеты).
*nix $
tcpdump dst 10.100.0.81 and src net 10.100.0.1 and not icmp
WSL $
tcpdump.exe dst 10.100.0.81 and src net 10.100.0.1 and not icmp
CMD >
tcpdump.exe dst 10.100.0.81 and src net 10.100.0.1 and not icmp
PS >
tcpdump.exe dst 10.100.0.81 and src net 10.100.0.1 and not icmp
Перехватывать пакеты на IP-адрес 10.100.0.81
из сети 10.100.0.1
, отфильтровав ICMP-протокол.
*nix $
tcpdump «udp[17] & 0xf == 3»
WSL $
tcpdump.exe «udp[17] & 0xf == 3»
CMD >
tcpdump.exe «udp[17] & 0xf == 3»
PS >
tcpdump.exe «udp[17] & 0xf == 3»
Перехватывать все неудачные DNS-запросы.
*nix $
tcpdump -c 10000 -w outfile.pcap ((dst host w.x.y.z1 and not src host w.x.y.z2) and (dst port 8040 or dst port 8043 or dst port 8050 or dst port 8053)) and «tcp[tcpflags] & (tcp-syn | tcp-ack) != 0»
WSL $
tcpdump.exe -c 10000 -w outfile.pcap ((dst host w.x.y.z1 and not src host w.x.y.z2) and (dst port 8040 or dst port 8043 or dst port 8050 or dst port 8053)) and «tcp[tcpflags] & (tcp-syn | tcp-ack) != 0»
CMD >
tcpdump.exe -c 10000 -w outfile.pcap ((dst host w.x.y.z1 and not src host w.x.y.z2) and (dst port 8040 or dst port 8043 or dst port 8050 or dst port 8053)) and «tcp[tcpflags] & (tcp-syn | tcp-ack) != 0»
PS >
tcpdump.exe -c 10000 -w outfile.pcap ((dst host w.x.y.z1 and not src host w.x.y.z2) and (dst port 8040 or dst port 8043 or dst port 8050 or dst port 8053)) and «tcp[tcpflags] & (tcp-syn | tcp-ack) != 0»
Запись в файл outfile.pcap
текущего каталога всех SYN-, ACK-пакетов (в количестве 10000
), отправленных на w.x.y.z1
с портов 8040
, 8043
, 8050
или 8053
, кроме пакетов, принимаемых с w.x.y.z2
. Этот фильтр не перехватывает SYN/ACK, отправленные с сервера на клиент – только инициализацию SYN- и SYN/ACK с клиента, а также все остальные ACK-пакеты от клиента.
*nix $
tcpdump -i 6 «ip[0] & 15 > 5»
WSL $
tcpdump.exe -i 6 «ip[0] & 15 > 5»
CMD >
tcpdump.exe -i 6 «ip[0] & 15 > 5»
PS >
tcpdump.exe -i 6 «ip[0] & 15 > 5»
Перехватывать весь IP-трафик на интерфейсе 6
имеющий в первом байте (0) значение больше, чем пять с маской 15
(0000 1111
). В реальности данный фильтр будет показывать весь IP-трафик с заголовками больше, чем 20 байт (5 x 32bit блоки данных заголовков = 160 бит -> 160/8=20).
*nix $
tcpdump src net 67.207.148.0 mask 255.255.255.0
WSL $
tcpdump.exe src net 67.207.148.0 mask 255.255.255.0
CMD >
tcpdump.exe src net 67.207.148.0 mask 255.255.255.0
PS >
tcpdump.exe src net 67.207.148.0 mask 255.255.255.0
Перехватывать входящий трафик из конкретной сети с указанием маски подсети.
*nix $
tcpdump src net 67.207.148.0/24
WSL $
tcpdump.exe src net 67.207.148.0/24
CMD >
tcpdump.exe src net 67.207.148.0/24
PS >
tcpdump.exe src net 67.207.148.0/24
Перехватывать входящий трафик из конкретной сети в формате CIDR notation.
*nix $
tcpdump -len arp
WSL $
tcpdump.exe -len arp
CMD >
tcpdump.exe -len arp
PS >
tcpdump.exe -len arp
Перехватывать все ARP-пакеты (broadcast и не только), не производить обратное разрешение имен (DNS-resolving).
*nix $
tcpdump -en port 67 or port 68
WSL $
tcpdump.exe -en port 67 or port 68
CMD >
tcpdump.exe -en port 67 or port 68
PS >
tcpdump.exe -en port 67 or port 68
Перехватывать DHCP-пакеты.
Homepage: Official web site of tcpdump
Утилита tcpdump относится к числу так называемых «снифферов» — программ предназначенных для перехвата сетевого трафика. Одним словом, tcpdump предназначен для подслушивания. Разработан Группой сетевых исследований (Network Reseach Group, NRG) Отдела информационных и вычислительных технологий (Information and Computing Sciences Division, ICSD) в Национальной лаборатории Лоренс Беркли (Lawrence Berkeley National Laboratory, LBNL).
tcpdump не единственный Сетевые анализаторы снифферы, которым может пользоваться администратор. Кроме tcpdump можно обратить внимание на такие программы, как:
tcpdump работает при помощи интерфейса bpf (Berkeley Packet Filter). Если поддержку этого устройства отключить, сниффинг в BSD окажется невозможен. Права на запуск программы tcpdump определяются правами доступа к устройсву bpf (/dev/bpf0). Эти права можно регулировать через devfs. Если вы предоставляете, например, группе operator права на чтение из этого устройства, то это значит, что все члены этой группы смогут перехватывать любой трафик, в том числе трафик суперпользователя.
Если программа tcpdump вызвана для прослушивания некоторого интерфейса, она переводит его в «promiscuous mode» — «неразборчивый режим». В этом режиме интерфейс ловит вообще все пакеты, которые до него добрались, а не только пакеты адресованные непосредственно ему. Таким образом, если сеть собрана не на коммураторах (switch), а на репитерах (hub), то tcpdump позволит перехватить трафик между посторонними машинами, т.е. подслушать разговор двух сторонних машин. Сказанное не означает, что перехват трафика невозможен в сети собранной на коммутаторах. Впрочем, интерфейс можно и не переводить в promiscous mode, если передать программе аргумент -p.
Ключ -w применяется для записи данных в отдельный файл. Прочитать это файл можно применяя ключи -r и -X(показать заголовки), например:
# tcpdump -r tcpdumplog # tcpdump -X -r tcpdumplog
# tcpdump -i eth0 -n port 5060 -w mbill or # tcpdump -i eth0 -n -s 0 port 5060 -vvv -w /home/capture_file_name or # tcpdump -i eth0 -n host 89.31.241.2 -vvv -w /home/textcall
Анализирует траффик удаленно через SSH с помощью wireshark
ssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -
UDP трафик с и на IP xxx.xxx.xxx.251 destined for port 5060:
# tcpdump -nnvvS udp and host xxx.xxx.xxx.251 and dst port 5060
Записать в файл mbill251 весь трафик с хоста xxx.xxx.xxx.251 за исключением трафика ssh
# tcpdump -n -i eth0 host xxx.xxx.xxx.251 -vvv and not port 22 -w /home/mbill251
Прослушать порт 5060 с ip xxx.xxx.xxx.251
tcpdump -i eth0 -n -s 0 port 5060 and host xxx.xxx.xxx.251 -vvv -w /usr/local/tcpdumplog/log
tcpdump -i eth0 -n -s 0 port 1720 and host xxx.xxx.xxx.251 -vvv -w /usr/local/tcpdumplog
H.323 сигналинг ловим с двух IP. В таком виде с двух IP отказалось снимать, может быть OR нужно было поставить.
# tcpdump -i eth0 -n -s 0 port 1720 and host xxx.xxx.164.1 and host xxx.xxx.107.1 -vvv -w /usr/local/tcpdumplog/logfile
перечислить доступные интерфейсы (которые можно прослушивать при помощи опции -i)
tcpdump -D
посмотреть трафик одного хоста:
tcpdump host 1.2.3.4
посмотреть трафик на порте:
tcpdump src port 80
посмотреть IP трафик на хост:
tcpdump ip host 1.2.3.4
посмотреть ARP трафик на хост:
tcpdump arp host 1.2.3.4
посмотреть RARP трафик на хост:
tcpdump rarp host 1.2.3.4
посмотреть трафик, кроме хоста unixserver:
tcpdump not host unixserver
посмотреть трафик на server1 и server2
tcpdump host server1 or host server2
посмотреть содержимое пакетов на интерфейсе tun0 на хост ya.ru
tcpdump -X -i tun0 host ya.ru
подсмотреть номера и пароли к icq
tcpdump -X -i fxp1 port aol
посмотреть содержимое пакетов на интерфейсе tun0 на хост ya.ru, при этом прочитать из каждого пакета по 1500 байт и не преобразовывать IP в имя хоста
tcpdump -X -s 1500 -n -i tun0 host ya.ru
Примеры использования tcpdump AND OR EXCEPT
AND and or && OR or or || EXCEPT not or !
TCP traffic from 10.5.2.3 destined for port 3389:
# tcpdump -nnvvS tcp and src 10.5.2.3 and dst port 3389
Traffic originating from the 192.168 network headed for the 10 or 172.16 networks:
# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
Non-ICMP traffic destined for 192.168.0.2 from the 172.16 network:
# tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net 172.16.0.0/16 and not icmp
# tcpdump -nvvvpi rl0 tcp and not port ssh and not port smtp
Лечение: запускаем команду и ищем MAC c ошибкой
# tcpdump -vvv -n -l -e arp | grep 0.0.0.0 ... 16:43:57.407018 00:0e:89:1d:cc:87 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: arp who-has 86.90.285.175 (00:50:fc:f0:3e:e9) tell 0.0.0.0 ...
arplookup 0.0.0.0 failed: host is not on local network
Default route 0.0.0.0
# tcpdump -vvv -n -l -e arp # tcpdump -i rl1 -vvv -n -l -e arp
arpdig – dig an interface for arp responses. Выводит соответствие между IP и MAC. Пример использования:
# arpdig 195.143.151.1/28
gratuitous arp — самообращенные запросы. При таком запросе инициатор формирует пакет, где в качестве IP используется его собственный адрес.
Использование утилиты arping — Работа с ARP протоколом: очистка таблицы level «ping» utility Пример использования:
for /l %i in (1,1,254) do ping -n 1 -w 1 192.168.1.%i arp -a | find "арп"
Файлы tcpdump совместимы с wireshark. Запуская ее с параметром -w filename, мы получаем файл, содержащий нужный нам сетевой трафик. К сожалению, по умолчанию в tcpdump каждый пакет ограничивается 96ю байтами (которых, как правило, достаточно для анализа любых пакетов). Однако если нужно залезть глубже и смотреть всё содержимое пакетов, нужно использовать команду -s size (где size — размер пакетов, которые нужно ловить). Для обычного ethernet’а размер пакетов равен 1500, для «разогнанного» гигабитного etherneta — порой до 65к.
Итого, имеем следующую команду:
# tcpdump -s 1500 -w filename
И используем ее для того, чтобы можно было создать полный дамп сетевого трафика, который можно смотреть в Wireshark без сообщений вида Packet size limited during capture
Если указать -s 0 тогда размер пакета не важен будет браться все.
Утилиту tcpdump можно использовать не только в Linux, но Windows.
TCPDUMP для Windows является клоном TCPDUMP, наиболее используемого сетевого анализатора / анализатора для UNIX, скомпилированного с исходным кодом tcpdump (tcpdump.org) и пакетом SDK от Microolap Packet Sniffer (без libpcap / WinPcap).
Клон TCPDUMP для Windows можно скачать на microolap.com
Читайте также
Это мощный и универсальный инструмент, который включает в себя множество опций и фильтров. Поскольку это инструмент командной строки, он идеально подходит для работы на удаленных серверах или устройствах, для которых 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.
Материал из DiPHOST.Ru wiki system
Перейти к: навигация, поиск
Иногда возникает необходимость проанализировать сетевой трафик, чтобы, к примеру, определить источник обрывов соединений или возникающих при работе с удаленным сервером сетевых проблем.
Сдампить сетевой трафик можно при помощи программы tcpdump. Данная программа присутствует на всех UNIX-платформах. Для ОС Windows она также существует, но уже в виде платной программы. Правда, доступна и trial ( с ограниченным сроком работы ) версия.
Анализ сетевого трафика в ОС семейства Windows
ПРИМИТЕ К СВЕДЕНИЮ: Программа при работе требует прав администратора, так что перед работой с ней следует осуществить вход в систему с администраторскими правами. |
1. Загрузим дистрибутив программы со страницы http://www.microolap.com/products/network/tcpdump/download/
2. Перейдем в каталог с распакованным архивом и запустим программу cmd. Далее будем запускать tcpdump уже из окна программы cmd для наглядности.
3. Для начала следует выбрать, трафик с какого сетевого интерфейса мы будем анализировать. Для этого выполним команду
tcpdump.exe -D
Мы увидим подобный вывод программы:
1.\Device\PssdkLoopback (PSSDK Loopback Ethernet Emulation Adapter) 2.\Device\NdisWanBh (WAN Miniport (Network Monitor)) 3.\Device\{4DB7ABE2-2B1E-47E7-AA26-E24DFA511EE9} (Realtek PCIe GBE Family Controller) 4.\Device\{25DC37C7-B6B0-41F2-B54B-20AAC2961C7C} (Адаптер D-Link DFE-520TX PCI Fast Ethernet)
В нашем случае анализировать будем интерфейс представленный сетевой картой D-Link DFE-520TX
4. запустим анализатор трафика командой
tcpdump.exe -i \Device\{25DC37C7-B6B0-41F2-B54B-20AAC2961C7C}
Далее вы увидите всю сетевую активность на интерфейсе \Device\{25DC37C7-B6B0-41F2-B54B-20AAC2961C7C} в таком виде.
14:00:44.436523 IP hostname.49526 > bs.yandex.ru.80: Flags [.], ack 799, win 16368, length 0 14:00:44.437500 IP dir-320.53 > hostname.59453: 25957 1/2/0 A 195.218.200.162 (94) 14:00:44.437500 IP dir-320.53 > hostname.56044: 56218 4/4/5 A 213.180.204.25,[|domain] 14:00:44.438476 IP dir-320.53 > hostname.62680: 25927 6/4/5 CNAME[|domain] 14:00:44.438476 IP hostname.58078 > dir-320.53: 27420+ A? passport.yandex.ru. (36) 14:00:44.440429 IP hostname.58425 > dir-320.53: 64884+ A? nahodki.yandex.ru. (35) 14:00:44.440429 IP dir-320.53 > hostname.58078: 27420 4/4/5 A 87.250.250.24,[|domain] 14:00:44.442382 IP dir-320.53 > hostname.58425: 64884 5/4/5 A 213.180.204.69,[|domain]
5. Сохраняем трафик в файл
Очень удобно сохранять сетевой трафик в файл для последующего анализа. Сохранить трафик в файл можно такой командой
tcpdump.exe -i \Device\{25DC37C7-B6B0-41F2-B54B-20AAC2961C7C} -w <имя файла>
В дальнейшем, можно просматривать этот файл командой
tcpdump.exe -r <имя файла>
Категория:
- Как сделать…
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
Appearance settings