tcpdump — UNIX утилита , позволяющая перехватывать и анализировать сетевой трафик, проходящий через компьютер, на котором запущена данная программа. Работает в командной строке, при этом не хуже Wireshark.
Wireshark — анализатор сетевого трафика
Для 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:
http://www.tcpdump.org/
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 — Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится.
Примеры
Определить интерфейсы, которые можно использовать:
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 -l A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '
Не забываем о:
man tcpdump
Источник:
https://internet-lab.ru/tcpdump_soft
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.