Что такое tcpdump?

Если у вас Unix или Unix-подобная (Linux, Mac OS) операционная система, вы можете использовать инструмент tcpdump для проверки сетевого трафика.

Программа tcpdump — это утилита командной строки, которую можно установить бесплатно.

Он обычно не интегрируется в операционные системы, поэтому вам нужно установить его из реестра tcpdump GitHub или с официального сайта tcpdump .

Элементы tcpdump

Утилита перехвата пакетов, используемая tcpdump, предоставляется libpcab, библиотекой процедур C/C++. Основная программа tcpdump является интерфейсом для процесса захвата пакетов . При запуске он запустит процесс libcap для захвата сетевых пакетов и последующего отображения их содержимого на экране. Если при запуске программы не указано ограничение на количество перехватываемых пакетов, она будет продолжать работать вечно. Затем обработка завершается сигналом прерывания (Control-C).

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

Формат tcpdump

Команда tcpdump может быть запущена сама по себе или с опциями, параметрами и/или регулярными выражениями. Ни один из этих элементов не является обязательным, и порядок не важен.

tcpdump <-option_identifier> <option_name> <parameter> <parameter_value> <regular expressions>

Параметры tcpdump

За командой tcpdump следуют параметры, также известные как флаги . Каждый из них обозначается дефисом, за которым следует буква. Ниже приведен список каждого из этих флагов.

-Печать        пакетов в ASCII без заголовков на уровне канала

-b         показать номер AS в формате ASDOT

-B        размер_буфера в КиБ (1024 байта

-c count — лимит пакетов для захвата        

-C        размер_файла — процесс создаст новый файл, как только этот предельный размер файла будет заполнен; Размер x 1 миллион байт

-d         Вывести скомпилированный код сопоставления пакетов в ASCII

-dd Выводить      код сопоставления пакетов в виде фрагмента программы на C

-ddd Выводить     код сопоставления пакетов в виде десятичных чисел, которым предшествует счетчик

-D        Список всех доступных интерфейсов

-e         Печатать заголовок уровня ссылки в каждой строке дампа

-E         spi@ipaddr algo:secret — для расшифровки пакетов IPsec ESP:

spi — индекс параметра безопасности

ip addr — это адрес назначения в пакете

              algo — это алгоритм, по умолчанию des-cbc, и это поле является необязательным.

Возможные значения:

  • des-cbc
  • 3des-cbc
  • blowfish-cbc
  • rc3-cbc
  • cast128-cbc

secret — это текст ASCII для секретного ключа ESP. Если ему предшествует 0x, то это шестнадцатеричное значение.

-f          Печатать «чужие» IPv4-адреса численно, а не символически

-F файл — использовать файл в качестве входных данных для выражения фильтра        

-G rotate_seconds — период ротации файла сохранения с опцией -w, добавит отметку времени к имени       

-h         Напечатать строки версий tcpdump и libpcap, напечатать сообщение об использовании и выйти

-H        Обнаружение заголовков проекта сетки 802.11s

-i интерфейс — интерфейс для прослушивания, по умолчанию самое низкое имя в алфавитном порядке         

-I          режим монитора | немедленный режим — убирает буферизацию

-j tstamp_type — установить тип временной метки для захвата на tstamp_type         

-J          tstamp_precision — установить точность метки времени ( микро или нано ), по умолчанию — микро. Если tstamp_precision имеет значение null, вывести список типов временных меток и выйти .

-K        Не проверять контрольные суммы

-l          Строка стандартного вывода буферизована. Например , tcpdump -l | tee dat или                                                                                                    tcpdump -l > dat & tail -f dat

-L         Список известных типов каналов передачи данных для интерфейса в указанном режиме и выход

-m module — загрузить определения модулей SMI MIB из файлового модуля .      

-M secret — значение общего секрета для проверки с помощью опции TCP-MD5.      

-n        Не преобразовывать адреса (т.е. адреса хостов, номера портов и т.д.) в имена

-N        Не печатать уточнение доменного имени для имен хостов

-#         Печатать необязательный номер пакета в начале строки

-O        Не запускать оптимизатор кода сопоставления пакетов

-p         Не переводить интерфейс в неразборчивый режим

-Q direction – направление отправки/получения. Может быть in , out , или inout       

-q Выводить         меньше информации о протоколе

-r файл – читать пакеты из файла. Specify  для стандартного ввода         

-S         Вывести абсолютные порядковые номера TCP

-s snaplen — snarf snaplen байтов из каждого пакета, а не 262144 байта по умолчанию        

-T type — интерпретировать пакеты как указанный тип . Варианты:        

  • aodv                   Специальный протокол вектора расстояния по запросу
  • carp                    Общий протокол резервирования адресов
  • cnfp                    Протокол Cisco NetFlow
  • lmp                     Протокол управления ссылками
  • pgm                    Прагматичный Общий Многоадресный
  • pgm_zmtp1        ZMTP/1.0 внутри PGM/EPGM)
  • resp                    Протокол сериализации REdis
  • радиус                РАДИУС
  • rpc                      Удаленный вызов процедуры
  • rtp                       Протокол приложений реального времени
  • rtcp                     Протокол управления приложениями реального времени
  • snmp                  Простой протокол управления сетью
  • tftp                     Тривиальный протокол передачи файлов
  • ватный                       визуальный аудио инструмент
  • wb                       распределенная белая доска
  • zmtp1                  Протокол передачи сообщений ZeroMQ 1.0
  •                  Виртуальная расширяемая локальная сеть vxlan

-t          Не печатать метку времени в каждой строке дампа

-tt        Печатать метку времени как смещение с 1 января 1970 года в каждой строке дампа

-ttt       Распечатать дельту (разрешение в микросекундах) между текущей и предыдущей строкой

-tttt       Печатать отметку времени: дата, час, минута, секунда в каждой строке дампа

-ttttt      Напечатать дельту (микросекундное разрешение) между текущей и первой строкой

-u         Напечатать некодированные дескрипторы NFS

-U        Пакет буферизован

-v          Чуть более подробный вывод

-vv       Более подробный вывод

-vvv      Самый подробный вывод

-V файл — прочитать список имен файлов из файла . Стандартный ввод используется, если файл –       

-w файл — записать вывод в файл       

-W       limit – максимальное количество файлов, которое будет создано с помощью опций -C и -G .

-x         Печатать данные каждого пакета за вычетом его заголовка уровня ссылки в шестнадцатеричном формате.

-xx       Печатать данные каждого пакета, включая его заголовок уровня ссылки, в шестнадцатеричном формате .

-X         Печатать данные каждого пакета за вычетом заголовка уровня канала в шестнадцатеричном формате и ASCII.

-XX       Печатать данные каждого пакета, включая его заголовок уровня канала, в шестнадцатеричном формате и ASCII.

-y          datalinktype — установить тип канала передачи данных для использования при захвате пакетов в                           datalinktype

-z postrotate-command — обрабатывать файлы сохранения обычно со сжатием, например -z gzip        

-Z пользователь — изменить идентификатор пользователя на пользователя и идентификатор группы на основную группу  пользователей .        

Связанный пост: Шпаргалка по tcpdump

Параметры tcpdump

Параметры tcpdump также известны как примитивы . Они указывают, должен ли захват пакетов получать данные только с указанных хостов. Эти параметры также могут быть выражены как условия с помощью логических операторов и , или , и не . Вам не нужно ставить знак равенства (=) между именем параметра и его значением, и вам не нужно расставлять параметры с помощью знаков препинания. В каждом случае вам просто нужно пространство.

Наиболее часто используемый из этих параметров — хост, который позволяет ограничить захват передачами только из одного источника. В каждом случае имя устройства в качестве значения параметра может быть заменено его адресом. Если параметр имеет версию dst , этот вариант ограничивает вывод только пакетами, имеющими этот атрибут для пункта назначения. Параметры, включающие src , ищут пакеты с заданным значением в данных, относящихся к их происхождению.

Вот варианты параметров:

host host_name — также dst host или src host .

Также может начинаться с ip , arp или rarp

ether ehost — значение из /etc/ethers или число. Также ether src и ether dest .            

хост -шлюз        — получить пакеты, прошедшие через хост -шлюз

net                network_num — IP-адрес источника или получателя включает network_num                                                Также dst net и src net

номер порта                |имя — также порт dst и порт src . Может быть с tcp или udp для ограничения протокола

ip proto           protocol – перехватывать IP-пакеты указанного протокола. Имя должно быть в /etc/protocols

ether proto    protocol – захватить пакет типа эфирного протокола. Опции для протокола – это число или:

  • ip
  • ip6
  • arp
  • rarp
  • atalk
  • atalkarp
  • decnet
  • decdts
  • decdns
  • lanbridge
  • lat
  • mopdl
  • moprc
  • pup
  • sca
  • sprite
  • stp
  • vexp
  • vprod
  • xns

Broadcast      Перехватывает широковещательные пакеты Ethernet. Также пишется как эфирное вещание

IP-трансляция  Захватывает широковещательные IP-пакеты.

multicast        Перехватывает многоадресные пакеты Ethernet. Также пишется как многоадресная рассылка эфира

ip multicast    Перехватывает многоадресные IP-пакеты

decnet host   host_name — если источником или получателем DECNET является host_name

decnet src      host_name — захват, если источником DECNET является host_name

decnet dst      host_name — захватить, если пунктом назначения DECNET является host_name

wlan host       ehost — если первый, второй, третий или четвертый адрес IEEE 802.11 —                                              ehost

wlan    addr1 ehost — зафиксировать, является ли первый адрес IEEE 802.11 ehost

wlan addr2    ehost — зафиксировать, является ли второй адрес IEEE 802.11 ehost

wlan addr3    ehost — зафиксировать, является ли третий адрес IEEE 802.11 ehost

wlan addr4    ehost — если четвертый адрес IEEE 802.11 — ehost . Используется только для WDS

type                 type — захватить, если тип кадра IEEE 802.11 — type, то есть число или:

  • data
  • mgt
  • ctl

подтип           подтипа — захватить, если кадр IEEE 802.11 имеет подтип , который является числом или:

  • assocreq
  • assocresp
  • reassocreq
  • reassocresp
  • probereq
  • proberesp
  • beacon
  • atim
  • disassoc
  • auth
  • deauth
  • data

dir                     dir — захватить, если направлением кадра IEEE 802.11 является dir , что является числом или:

  • nods
  • tods
  • fromds
  • dstods

Выражение Tcpdump

Сегмент выражений команды tcpdump позволяет вам добавить немного программирования к вашему выбору пакетов. Однако, в отличие от обычной программы, этот набор инструкций должен быть написан в одну строку. Если вы часто пользуетесь Unix или Linux, вы привыкли к регулярным выражениям сценариев оболочки, и у вас не должно возникнуть проблем с пониманием формата этих фильтров.

Пакеты, отвечающие критерию, установленному выражением, будут перехвачены. Таким образом, результат каждого выражения должен быть «истинным».

Есть несколько условий выражения, которые обычно не встречаются в сценариях оболочки, и они перечислены ниже:

Только

Это возвращает длину пакета. Пример использования: len != 5 .

прототип[выражение:размер]

В этом объекте:

proto — это имя уровня протокола. Может быть:

  • ether
  • fddi
  • ip
  • arp
  • rarp
  • tcp
  • udp
  • icmp

expr — смещение в байтах. Это необходимо включить, но его можно указать как 0, чтобы получить значение с начала объекта.

размер является необязательным и представляет количество байтов в параметре. Значение по умолчанию — 1, но также может быть 2, 3 или 4.

Примеры использования:

ether[0] & 1 != 0 верно для всего многоадресного трафика.

ip[0] & 0xf != 5 верно для всех IP-пакетов с параметрами.

ip[6:2] & 0x1fff = 0 верно для нефрагментированных дейтаграмм и ноль фрагментированных дейтаграмм.

Примеры tcpdump

Во всех этих случаях результаты команды будут отображаться на экране, если только не включена опция, связанная с файлом, или если команда не запущена с перенаправлением вывода или передачей в файл.

Отображение пакетов, отправляемых с или на компьютер, обозначенный как lab1:

tcpdump host lab1

Показать все IP-пакеты, проходящие между lab1 и любым узлом, кроме приема:

tcpdump ip host lab1 and not reception

Показать весь ftp-трафик через интернет-шлюз styx:

tcpdump ‘gateway styx and (port ftp or ftp-data)’

Отобразите пакеты SYN и FIN для каждого сеанса связи TCP, в котором участвует нелокальный хост:

tcpdump ‘tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet

Отображение широковещательных или многоадресных IP-пакетов, которые не были отправлены через широковещательную или многоадресную рассылку Ethernet:

tcpdump ‘ether[0] & 1 = 0 и ip[16] >= 224’

Формат вывода Tcpdump

Формат записи, используемый для записи сетевых пакетов в файлы, стал стандартом, принятым многими новыми анализаторами пакетов и анализаторами трафика.

Стандарт не является простым и адаптирован для каждого протокола. Однако те приложения, которые приняли этот формат, также учитывают эти вариации. Формат называется pcap , что является названием процесса захвата пакетов, используемого tcpdump. Файлы в этом формате обычно имеют расширение .pcap .

TCPdump для Windows

Существует адаптация tcpdump для Windows. Это называется WinDump и использует WinPcap для захвата пакетов так же, как tcpdump использует функцию pcap из libpcap. WinPcap фактически принадлежит Riverbed Technology . Эта же компания является основным спонсором Wireshark , вероятно, самого известного и широко используемого анализатора пакетов в мире. Существует беспроводная версия WinPcap, которая называется AirPcap . Вы можете бесплатно загрузить WinDump, WinPcap и AirPcap с веб- сайта WinPcap .

Использование анализаторов пакетов

Утилита командной строки tcpdump полезна для тех, кто знаком с операционными системами Unix и Linux и любит писать сценарии оболочки. Тем, кто не имеет достаточного опыта в составлении команд с помощью регулярных выражений в командной строке, будет сложно пользоваться этой программой.

У вас есть другие варианты, потому что есть много доступных анализаторов пакетов, таких как Wireshark, о котором упоминалось выше. Подробнее об альтернативах tcpdump вы можете узнать в этом обзоре анализаторов пакетов .

У вас есть любимый анализатор пакетов? Вы поклонник tcpdump или предпочитаете более удобные альтернативы? Оставьте сообщение в разделе комментариев ниже и поделитесь своим опытом.

tcpdump часто задаваемые вопросы

В чем разница между Wireshark и tcpdump?

И Wireshark, и tcpdump перехватывают пакеты. На этом уровне оба эти инструмента одинаковы. Однако у Wireshark есть интерфейс DUI, который включает в себя функции анализа пакетов. Tcpdump — это утилита командной строки. У него меньше функций, и его сложнее использовать.

Как убить процесс tcpdump?

Обычно нажатие Control-C останавливает процесс tcpdump. Если это не сработает, найдите идентификатор процесса tcpdump с помощью команды ps -aux , затем введите kill -9 , затем идентификатор процесса и нажмите клавишу возврата.

Где хранятся файлы tcpdump?

Если вы не укажете каталог и имя файла, в котором должны храниться записи tcpdump, файл будет записан в каталог, в котором вы находились при запуске tcpdump. Вы можете указать, где tcpdump должен хранить перехваченные пакеты, с помощью sudo tcpdump -i 1 -w , за которым следует путь и имя файла.

Перейти к верхней панели