Анализ сетевого трафика позволяет выявить такие существующие в сети проблемы или симптомы, как повторная передача, застрявшее TCP-окно, широковещательный шторм): tcpdump, wireshark (ethereal), snoop.
ifconfig, netstat, /proc/net.
Утилита tcpdump позволяет наблюдать за существующим сетевым трафиком, дешифрует заголовки и данные пакетов, позволяет сохранять трафик в файл для последующего анализа. Требует наличия библиотеки libpcap. В командной строке может задаваться фильтр пакетов. Ключи (версия 3.9.4):
- -A (выдавать весь пакет, кроме канального заголовка, в текстовом виде)
- -c число-пакетов (прекратить работу после захвата указанного числа пакетов)
- -C МБ (максимальный размер файла для сохранения трафика, при превышении создаётся следующий файл)
- -d (вывести фильтр в гуманном виде)
- -dd (вывести фильтр в виде кода на C)
- -D (вывести список доступных сетевых интерфейсов)
- -e (вывести канальный заголовок)
- -E spi@IP-адрес алгоритм:пароль (дешифровать пакеты IPsec ESP для указанного адреса с указанным spi (Security Parameter Index))
- -f (не преобразовывать нелокальные IP-адреса в имена)
- -F имя-файла (прочитать фильтр из файла)
- -i имя-интерфейса-или-номер (можно указывать псевдоинтерфейс "any", но из него можно читать только свои пакеты)
- -l (буферизовать вывод)
- -L (вывести список известных типов канала для указанного интерфейса)
- -m имя-модуля (загрузить описание SNMP MIB модуля)
- -M пароль (используется для верификации подписанных TCP пакетов по RFC-2385)
- -n (не преобразовывать IP-адреса в имена)
- -nn (не преобразовывать номера портов и протоколов в имена)
- -N (не выводить домены в именах хостов)
- -O (не использовать оптимизатор фильтров)
- -p (не переводить интерфейс в режим прослушивания чужих пакетов; однако, интерфейс уже может быть в этом режиме)
- -q (выводить меньше информации)
- -r имя-файла (читать из файла ранее сохранённый там трафик; стандартный ввод: "-")
- -S (выводить абсолютные номера последовательности TCP)
- -s байт (68; захватывать указанное число байт; 0 - весь пакет)
- -T тип (задать явно тип пакета: rpc, rtp, rtcp, snmp, tftp и др.)
- -t (не выводить временные отметки)
- -tt (выводить временные отметки в необработанном виде)
- -ttt (выводить временные отметки относительно предыдущей строки)
- -u (выводить NFS в необработанном виде)
- -U (выводить в файл попакетно)
- -v (выводить больше информации: TTL, длина; проверка контрольных сумм IP и ICMP)
- -vv (ещё больше информации: декодирование NFS и SMB)
- -vvv
- -w имя-файла (выводить захваченные пакеты в файл; стандартный вывод: "-")
- -W макс-число-файлов (в дополнение к ключу "-C"; затем запись идёт опять в первый файл)
- -x (вывести содержимое пакета, кроме канального заголовка, в 16-ричном виде)
- -xx (вывести содержимое пакета в 16-ричном виде)
- -X (вывести содержимое пакета, кроме канального заголовка, в 16-ричном и текстовом виде)
- -XX (вывести содержимое пакета в 16-ричном и текстовом виде)
- -y (установить тип канала; см. -L)
- -Z имя (-Z pcap; сменить пользователя после запуска)
Фильтр представляет собой логической выражение ("and" или "&&", "or" или "||", "not" или "!", можно использовать скобки), составленое из следующих примитивов (в реальности, язык туманен и неоднозначен, развитые правила умолчания привели к необходимости ключа '-d'; кстати, заметьте 'or' и 'and' между 'src' и 'dst' ;):
- [ dst | src | src or dst | src and dst ] host имя-или-адрес
- {ether | wlan | ip | arp | rarp | tcp | udp} { dst | src | src or dst | src and dst } [host] имя-или-адрес
- gateway имя-или-адрес (эквивалент: ether host MAC-адрес and not host имя-или-адрес)
- [dst | src | src or dst | src and dst ] net { адрес-сети [mask маска] | адрес-сети/длина }
- { dst | src | src or dst | src and dst } port номер-порта
- { dst | src | src or dst | src and dst } portrange от-до
- { less | greater } размер-пакета (равенство также устраивает; "len <= размер")
- ip proto { tcp | udp | icmp | icmp6 | igmp | igrp | pim | ah | esp | vrrp } (ключевые слова tcp, udp и icmp необходимо предварять символом '\')
- ether proto имя-протокола (ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, netbeui; ключевые слова необходимо предварять символом '\')
- { ether | ip } {broadcast | multicast}
- vlan [идентификатор]
- mpls
- pppoed (PPP-over-Ethernet Discovery)
- pppoes (PPP-over-Ethernet Session)
- выражение1 операция-отношения выражение2
Операции отношения: >, <, >=, <=, =, !=.
Выражения строятся из целых констант без знака, вычислительных операций (+, -, *, /, &, |, <<, >>), оператора len (длина пакета) и вырезок из пакета:
протокол '[' выражение-смещения : размер ']'
Для некоторых выражений имеются сокращения: icmptype (и значения), icmpcode, tcpflags (и значения).
Вариант для MS Windows - windump (winpcap).
Графическая программа захвата и анализа пакетов wireshark (до размолвки ethereal).
- Network Performance Open Source Toolkit: Using Netperf, tcptrace, NISTnet, and SSFNet. 2003. Blum R.