Tcpdump или анализ сетевого трафика

zhenshen

Вселенское Зло
Одной из самых мощных и распространенных (из коробки) программ для перехвата и анализа сетевого трафика является tcpdump.
Приведем примеры ее применения.

Опции захвата трафика.
В простейшем случае достаточно указать интерфейс для анализа трафика:

Код:
tcpdump -i INTERFACE
Можно отключить преобразования IP адресов в доменные имена:

Код:
tcpdump -n
Ограничение числа перехватываемых пакетов:

Код:
tcpdump -c PACKET_COUNT
Запись в файл:

Код:
tcpdump -w FILE_NAME
Чтение из файла:

Код:
tcpdump -r FILE_NAME
Отметим, что для воспроизведения записанного файла в сеть можно использовать отдельную утилиту tcpreplay (не входящую в комплект tcpdump):

Код:
tcpreplay FILE_NAME
Вывод данных канального уровня (например, mac адреса и прочее):

Код:
tcpdump -e
Вывод дополнительной информации (например, TTL, опции IP):

Код:
tcpdump -v
Увеличение размера захватываемых пакетов (больше 68 байт по умолчанию):

Код:
tcpdump -s SNAP_LEN
Опции фильтрации трафика.
Можно осуществлять фильтрацию на канальном уровне. Для выделения Ethernet фреймов используются следующие конструкции:

Код:
tcpdump ether { src | dst | host } MAC_ADDRESS
tcpdump ether { broadcast | multicast }
Примеры:

Код:
# tcpdump -n -i vlan0 ether src 0:2:b3:d8:d8:2c
# tcpdump -n -e -i vlan0 ether broadcast
Просмотр фреймов 802.1Q можно осуществить следующими способами (на интерфейсе с виланами):

Код:
tcpdump -i INTERFACE vlan
Примеры:

Код:
# tcpdump -n -e -i fxp0 vlan
# tcpdump -n -e -i fxp0 vlan 100
# tcpdump -n -e -i fxp0 ether proto 0x8100
Фильтрация по IP протоколу:

Код:
tcpdump { arp | rarp | ip | tcp | udp | icmp | wlan | multicast | broadcast } 1
Примеры:
1
Код:
# tcpdump -n -i fxp0 ip
# tcpdump -n -i fxp0 tcp
# tcpdump -n -i fxp0 udp
Фильтрация по IP адресам:

Код:
tcpdump { src | dst } { net | host | port }
Примеры:

Код:
# tcpdump -n -i fxp0 src 195.12.66.1
# tcpdump -n -i fxp0 dst 195.12.66.65
# tcpdump -n -i fxp0 host 195.12.66.1
# tcpdump -n -i fxp0 port 25
# tcpdump -n -i fxp0 dst 195.12.66.1 and port 53
Фильтрация по размеру пакетов:

Код:
tcpdump { less | greater } PACKET_SIZE
Существуют расширенные возможности по фильтрации пакетов TCP с флагами. Заголовок TCP пакета состоит из 20 октетов. Поле битов управления (флагов) TCP содержится в октете номер 13. Соответственно под флаги отводятся следующие битовые позиции в 13 байте (по возрастанию степени 2): FIN (1), SYN(2), RST(4), PSH(8), ACK(16), URG(32), ECE(64), CWR(128).

Таким образом, например, для пакетов только с флагом SYN октет номер 13 заголовка TCP должен содержать значение 2. И соответствующий фильтр будет выглядеть так:

Код:
# tcpdump -n -i em0 'tcp[13] == 2'
Для перехвата пакетов только с флагами SYN и ACK (значения битовых позиций 2 и 16) можно использовать следующую конструкцию:

Код:
# tcpdump -n -i em0 'tcp[13] == 18'
Для того, чтобы анализировать передаваемые данные по протоколу TCP, можно использовать tcpflow:

Код:
# tcpflow -c -i ep0 host 197.144.69.44 and port 80
 

Сверху