В этом разделе описывается содержимое заголовков пакетов TCP/IP, чтобы вы могли разобраться в выводе Tcpdump. Структура пакетов TCP/IP определена в документе RFC 793 для TCP-части и в RFC 791 для IP-части. Полный текст этих спецификаций можно найти по адресу http://www.rfc-editor.org. Рис. 6.1 является графическим представлением заголовков TCP и IP. Заголовки обоих типов имеют длину не менее 20 байт и обычно представляются 32-битными секциями (4 байта) с адресами, опциями и другими настройками сеансов.

Рассмотрим сначала IP-часть, так как это нижний уровень сетевой модели. Заголовок протокола IP содержит адреса получателя и отправителя пакета. Так как каждый адрес занимает 32 бита (4 октета по 8 бит каждый), то исходный и целевой IP-адреса вместе составляют 8 байт. В первой части заголовка помещаются различные переключатели и опции пакета. Первая строка содержит несколько бит, которые идентифицируют версию IP. Большинство сетей используют IP версии 4 (IPv4), но более новая 128-битная система IP, называемая IP версии 6 (IPv6), существует уже несколько лет и постепенно получает признание. Предполагается, что IPv6 разрешит проблемы адресного пространства IP, выделяя до 128 бит для адресной части, что должно удовлетворить любые мыслимые потребности. IPv6 решает также проблемы безопасности и верификации, имеющиеся в IPv4. Но в настоящее время вы в подавляющем большинстве случаев будете видеть пакеты IPv4. Затем следуют значения длины заголовка и типа сервиса (последний служит для дифференциации при определении приоритетов пакетов). Заключительный фрагмент этой строки представляет общую длину заголовка, которая обычно одинакова для всех пакетов (20 байт), но может меняться для новых протоколов, таких как IPv6.
В двух следующих строках располагаются идентификатор пакета и контрольная сумма, помогающая проверять его корректность. Наконец, имеются IP-адреса отправителя и получателя и поле опций, которое может иметь переменную длину или дополняться нулями и произвольными данными.
| URG | Указатель срочности | Показывает приоритет TCP-пакетов |
| ACK | Подтверждение | Помечает этот пакет как подтверждение получения |
| PSH | Выталкивание | Выталкивает поставленные в очередь данные из буферов |
| RST | Сброс | Сбрасывает соединение TCP по завершении или после разрыва |
| SYN | Синхронизация | Синхронизирует соединение |
| FIN | Завершение | Завершает передачу |
| -a | Пытается преобразовать адреса в имена. Это создает дополнительную нагрузку на систему и может привести к потере пакетов |
| -c число | Останавливает Tcpdump после обработки заданного числа пакетов |
| -C размер_файла | Ограничивает размер выходных файлов заданным числом байт |
| -d | Выдает процедуру сопоставления пакетов с образцом в удобочитаемом виде и затем останавливается |
| -dd | Выдает процедуру сопоставления пакетов с образцом в виде фрагмента программы на языке Си |
| -ddd | Выдает процедуру сопоставления пакетов с образцом в виде десятичных чисел |
| -e | В каждой строке выдачи печатает заголовок канального уровня (в сетях Ethernet это MAC-адрес) |
| -E алгоритм:секрет | Использует встроенную в Tcpdump возможность расшифровывать на лету пакеты, зашифрованные по протоколу IPsec ESP. Разумеется, чтобы использовать эту опцию, вы должны располагать разделяемым секретным ключом. В число возможных значений параметра "алгоритм" входят des-cbc, 3des-cdc, blowfish-cbc, r3c-cbc, приведенный 128-cbc. Кроме того, оно может быть пустым. По умолчанию используется des-cbc. Значением параметра "секрет" должен служить секретный ключ ESP в текстовом виде. Дополнительную информацию об IPsec можно найти в лекции 9 |
| -F файл | Использует файл (а не сеть) для ввода данных. Это удобно для анализа событий "постфактум". |
| -i интерфейс | Читает из заданного интерфейса, когда на анализирующей машине имеется несколько сетевых интерфейсов. По умолчанию Tcpdump использует действующий интерфейс с наименьшим номером. В системах Linux можно использовать также параметр any для перехвата пакетов из всех сетевых интерфейсов |
| -n | Не преобразовывает адреса в имена |
| -N | Не печатает в именах хостов имя домена вышележащего уровня. Это полезно, если вам необходимо представить обезличенную версию вывода и вы не хотите раскрывать, чья это сеть |
| -p | Не переводит интерфейс в режим прослушивания. Используется только при исследовании трафика, направленного в анализирующий компьютер |
| -q | Печатает быстрый вывод. Печатается меньше протокольной информации, поэтому строки оказываются короче |
| -T тип | Заставляет интерпретировать пакеты, выбранные заданным в выражении фильтром, в соответствии с указанным типом |
| -t | Не печатает метку времени в каждой строке |
| -tt | Печатает неформатированную метку времени в каждой строке |
| -ttt | Печатает интервал времени между пакетами |
| -tttt | Печатает в каждой строке дату, а затем метку времени в подразумеваемом формате |
| -v | Использует чуть более подробный вывод, включающий время жизни, идентификатор, общую длину и поля опций каждого пакета |
| -vv | Предоставляет более детальный вывод. Пакеты NFS и SMB полностью декодируются |
| -vvv | Предоставляет еще более подробный вывод. Это может существенно замедлить работу анализатора |
| -w имя_файла | Записывает пакеты в указанный файл вместо вывода их на экран. Таким образом результаты "вынюхивания" без участия человека можно сохранить и проанализировать их позже. Например, если в вашей сети происходят какие-то странные вещи, вы можете запустить Tcpdump на ночь, чтобы перехватить весь необычный трафик. Не забудьте написать хороший фильтр, иначе полученный наутро файл может оказаться слишком большим |
| -x | Выводит каждый пакет (без заголовка канального уровня) в шестнадцатеричном виде. |
| -X | Выводит содержимое пакетов и в шестнадцатеричном, и в текстовом видах |