tcpdump

tcpdump (от TCP и англ. dump — свалка, сбрасывать) — утилита UNIX (есть клон для Windows), позволяющая перехватывать и анализировать сетевой трафик, проходящий через компьютер, на котором запущена данная программа.

Tcpdump

Вывод tcpdump на консоль
Тип анализатор трафика
Написана на Си[1]
Операционная система Linux и Microsoft Windows
Последняя версия
Читаемые форматы файлов PCAP[d], Extended TCPDUMP's style capture (little-endian)[d] и Extended TCPDUMP's style capture (big-endian)[d]
Создаваемые форматы файлов Extended TCPDUMP's style capture (little-endian)[d] и Extended TCPDUMP's style capture (big-endian)[d]
Лицензия модифицированная лицензия BSD[d][3]
Сайт tcpdump.org

Для выполнения программы требуется наличие прав суперпользователя и прямой доступ к устройству (так, например, запуск из Jail во FreeBSD невозможен).

Основные назначения tcpdump:

  • Отладка сетевых приложений.
  • Отладка сети и сетевой конфигурации в целом.

Описание:

SYN SФлаг, который используется при запросе на соединение.
ACK .Используется при подтверждении пришедшего пакета.
FIN FФлаг устанавливается при нормальном закрытии соединения.
URGENT UЭтот флаг нужен при передаче экстренных данных — например, при посылке Ctrl+C в telnet-соединении.
PUSH PКак правило, данный флаг устанавливается при передаче пользовательских данных.
RESET RНемедленный разрыв соединения.
Заполнитель noneВ случае, если в пакете отсутствует какой-либо флаг используется данный заполнитель.

Ключи

ключописание
-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 завершит работу после получения указанного числа пакетов.
-U Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится

Примеры

Если tcpdump запустить без параметров, он будет выводить информацию обо всех сетевых пакетах. С помощью параметра -i можно указать сетевой интерфейс, с которого следует принимать данные:

# tcpdump -i eth2

Чтобы узнать получаемые или отправляемые пакеты от определенного хоста, необходимо его имя или IP-адрес указать после ключевого слова host:

# 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

Чтобы отслеживать один из протоколов TCP, UDP, ICMP, его название следует указать в команде. Использование операторов and (&&), or (||) и not (!) позволяет задавать фильтры любой сложности. Приоритет операторв: инверсия, затем and, после — or.

Пример фильтра, отслеживающего только UDP-пакеты, приходящие из внешней сети:

# tcpdump udp and not src net localnet

Программная реализация

Программа состоит из двух основных частей: части захвата пакетов (обращение к библиотеке, libpcap (Unix) или pcap (Windows)) и части отображения захваченных пакетов (которая на уровне исходного кода является модульной и для поддержки нового протокола достаточно добавить новый модуль).

Часть захвата пакетов (при запуске) передаёт «выражение выбора пакетов» (идущее после всех параметров командной строки) напрямую библиотеке захвата пакетов, которая проверяет выражение на синтаксис, компилирует его (во внутренний формат данных), а затем копирует во внутренний буфер программы сетевые пакеты, проходящие через выбранный интерфейс и удовлетворяющие условиям в выражении.

Часть отображения пакетов выбирает захваченные пакеты по одному из буфера, заполняемого библиотекой, и выводит их (в воспринимаемом человеком виде) на стандартный вывод построчно, в соответствии с заданным (в командной строке) уровнем детальности.

Если задан подробный вывод пакетов, программа проверяет для каждого сетевого пакета, имеется ли у неё модуль расшифровки данных, и, в случае наличия, соответствующей подпрограммой извлекает (и отображает) тип пакета в протоколе или передаваемые в пакете параметры.

Кроссплатформенность

Изначально программа tcpdump была разработана для UNIX-подобных систем, позже — портирована на другие системы.

Для Windows в настоящее время известны:

  • tcpdump для Windows — коммерческая реализация, в виде одного файла tcpdump.exe
  • WinDump — реализация с открытым кодом, требующая установки библиотеки WinPcap (свободное ПО).

См. также

Примечания

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.