tcpdump — UNIX утилита, позволяющая перехватывать и анализировать сетевой трафик, проходящий через компьютер, на котором запущена данная программа. Работает в командной строке, при этом не хуже Wireshark.
Wireshark — анализатор сетевого трафика
PktMon — анализатор сетевого трафика
netsh trace — анализатор сетевого трафика
Для Windows есть клон под названием WinDump, использующий библиотеку WinPcap.
Пример вывода:
# tcpdump -c 3 -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 16:37:04.377578 IP postfix02.local.60408 > dns00.local.domain: 15157+ MX? mail.ru. (25) 16:37:04.378106 IP dns00.local.domain > postfix02.local.60408: 15157 1/3/5 MX mxs.MAIL.ru. 10 (203) 16:37:04.378489 IP postfix02.local.56235 > dns00.local.domain: 20730+ [1au] A? mxs.MAIL.ru. (40) 3 packets captured 8 packets received by filter 0 packets dropped by kernel
Ссылки
Официальный сайт tcpdump:
WinDump:
https://www.winpcap.org/windump/default.htm
Документация для пользователей WinDump:
http://www.tcpdump.org/wpcap.html
Флаги
- SYN (S) — флаг, который используется при запросе на соединение.
- ACK (.) — используется при подтверждении пришедшего пакета.
- FIN (F) — флаг устанавливается при нормальном закрытии соединения.
- URGENT (U) — этот флаг нужен при передаче экстренных данных, например, при посылке Ctrl+C в telnet-соединении.
- PUSH (P) — как правило, данный флаг устанавливается при передаче пользовательских данных.
- RESET (R) — немедленный разрыв соединения.
- Заполнитель (none) — данный заполнитель используется в случае, если в пакете отсутствует какой-либо флаг.
Ключи
Команда имеет синтаксис:
tcpdump опции -i интерфейс фильтры
- -a — Преобразовывает сетевые и широковещательные адреса в доменные имена.
- -e — Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров.
- -F файл — Использовать фильтр, находящийся в файле. Если вы используете этот параметр, фильтр из командной строки будет игнорироваться.
- -i — Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию — eth0, для выбора всех интерфейсов — any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo.
- -l — Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:
shell# tcpdump -l | tee out.log //отобразит работу tcpdump и сохранит результат в файле out.log - -N — Не добавляет доменное расширение к именам узлов. Например tcpdump отобразит 'net' вместо 'net.library.org'.
- -n — Отображает IP-адрес вместо имени хоста.
- -nn — Отображает номер порта вместо используемого им протокола.
- -p — Не переводит интерфейс в режим приема всех пакетов (promiscuous mode).
- -q — Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных.
- -r — Этот параметр позволяет tcpdump прочесть трафик из файла, если он был предварительно сохранен параметром -w.
- -S — Позволяет не обрабатывать абсолютные порядковые номера (initial sequence number — ISN) в относительные.
- -s число — Количество байтов пакета, которые будет обрабатывать tcpdump. При установке большого числа отображаемых байтов информация может не уместиться на экране и её будет трудно изучать. В зависимости от того, какие цели вы преследуете, и следует выбирать значение этого параметра. По умолчанию tcpdump захватывает первые 68 байт (для SunOS минимум 96 байт), однако если вы хотите увидеть содержимое всего пакета, используйте значение в 1514 байт (максимально допустимый размер кадра в сети Ethernet).
- -t — Не отображает метку времени в каждой строке.
- -T тип — Интерпретация пакетов заданного типа. Поддерживаются типы aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb.
- -tt — Отображает неформатированную метку времени в каждой строке.
- -tttt — Показывает время вместе с датой.
- -v — Вывод подробной информации (TTL; ID; общая длина заголовка, а также его параметры; производит проверку контрольных сумм IP и ICMP-заголовков).
- -vv — Вывод ещё более полной информации, в основном касается NFS и SMB.
- -vvv — Вывод максимально подробной информации.
- -w файл — Сохраняет данные tcpdump в двоичном формате. Преимущества использования данного способа по сравнению с обычным перенаправлением в файл является высокая скорость записи и возможность чтения подобных данных другими программами, например snort, но этот файл нельзя прочитать человеку. Возможен вывод двоичных данных на консоль, для этого необходимо использовать -w -.
- -x — Делает распечатку пакета в шестнадцатеричной системе, полезно для более детального анализа пакета. Количество отображаемых данных зависит от параметра -s.
- -xx — То же, что и предыдущий параметр -x, но включает в себя заголовок канального уровня.
- -X — Выводит пакет в ASCII- и hex-формате. Полезно в случае анализа инцидента связанного со взломом, так как позволяет просмотреть какая текстовая информация передавалась во время соединения.
- -XX — То же, что и предыдущий параметр -X, но включает заголовок канального уровня.
- -с число — tcpdump завершит работу после получения указанного числа пакетов. TБез ключа -c tcpdump будет продолжать собирать пакеты до тех пор, пока не будет прерван сигналом SIGINT (обычно CTRL+C) или сигналом SIGTERM (обычно kill). Если запуск был с ключем -c, то сбор пакетов будет продолжаться до тех пор, пока не произойдет прерывание сигналом SIGINT или SIGTERM или пока не будет обработано указанное количество пакетов.
- -U — Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится.
Часто используемые фильтрующие параметры
- dst хост — адрес получателя. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
- src хост — адрес отправителя. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
- host хост — адрес отправителя или получателя. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
- net имя_сети — адрес отправителя или получателя в заданной сети. Возможно указание сети в формате CIDR (например 10.0.0.1/22), либо указание имени сети, заданной в файле /etc/networks.
- ip | arp | rarp | tcp | udp | icmp [хост] — пакет одного из указанных протоколов для адреса отправителя или получателя. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
- [tcp | udp] dst port номер_порта — пакет протоколов TCP/UDP и порт получателя. Можно указать номер порта, либо имя, заданное в файле /etc/services.
- [tcp | udp] src port номер_порта — пакет протоколов TCP/UDP и порт отправителя. Можно указать номер порта, либо имя, заданное в файле /etc/services.
- [tcp | udp] port номер_порта — пакет протоколов TCP/UDP и портотправителя или получателя. Можно указать номер порта, либо имя, заданное в файле /etc/services.
- ip broadcast — широковещательный IP пакет.
- ether { src | dst | host } MAC_адрес — MAC_адрес отправителя или получателя.
- ether broadcast — широковещательный ARP-пакет.
Примеры
Определить интерфейсы, которые можно использовать:
tcpdump -D
Сетевой интерфейс:
tcpdump -i eth2
Пакеты от определенного хоста:
tcpdump host nameofserver
Обмен nameofserverA и nameofserverB:
tcpdump host nameofserverA and nameofserverB
Только исходящие пакеты:
tcpdump src host nameofserver
Только входящие пакеты:
tcpdump dst host nameofserver
Порт получателя:
tcpdump dst port 80
Порт отправителя:
tcpdump src port 22
UDP-пакеты, приходящие из внешней сети:
tcpdump udp and not src net localnet
Весь входящий трафик из локальной сети на сервер:
tcpdump -i eth0 -n -nn -ttt dst host 192.168.1.11
Весь входящий трафик из локальной сети на сервер, исключая трафик текущей SSH-сессии:
tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.1.11 and not ( src host 192.168.2.22 and dst port 22 )'
UDP трафик между сервером и узлом сети:
tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.22 and ip proto \udp'
DNS трафик между сервером и узлом сети:
tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.22 and port 53'
icmp пакеты:
tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'
Трафик на основе определенных флагов TCP:
tcpdump 'tcp[13] & 32!=0'
Все пакеты (ACKNOWLEDGE) :
tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'
Все пакеты (PUSH) :
tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-psh'
Все пакеты (RESET) :
tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'
Все пакеты (SYNCHRONIZE) :
tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'
Все пакеты (FINISH) :
tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'
Все пакеты (URGENT) :
tcpdump 'tcp[13] & 32 != 0'
tcpdump 'tcp[tcpflags] == tcp-urg'
Все пакеты (SYNCHRONIZE/ACKNOWLEDGE) :
tcpdump 'tcp[13]=18'
Все пакеты (SYNCHRONIZE/RESET) :
tcpdump 'tcp[13] = 6'
grep и egrep добавляет возможности, например, поиск User Agent:
tcpdump -vvAls0 | grep 'User-Agent:'
Сбор cookie:
tcpdump -vvAls0 | egrep 'Set-Cookie:|Cookie:'
FTP трафик:
tcpdump -vvAs0 port ftp or ftp-data
NTP трафик:
tcpdump -vvAs0 port 123
Для специалистов по информационной безопасности, сбор паролей:
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '
Не забываем о:
man tcpdump