Tcpdump freebsd примеры. Параметров и примеров команды tcpdump. Опции утилиты tcpdump

Tcpdump чрезвычайно удобный сетевой анализатор, очень помогающий в работе как сетевым администраторам, так и безопасникам. Естественно что для получения максимальной информации при работе с tcpdump, просто необходимо иметь представления о стеке протоколов TCP/IP. Для удобства можно использовать более удобные и интеллектуальные программы, например , но часто возникают ситуации когда на тестируемую машину не представляется возможным установить дополнительные сервисы, и тогда tcpdump просто незаменим, не будит же админ, ради анализа пакетов, ставить на unix’овый сервак X-Windows тем более что в большинстве unix’овых систем, утилита tcpdump идет по умолчанию.

Понимание протокола TCP/IP дает широкое пространство для использование анализатора и устранения неисправностей и неполадок в работе сети, за счет разбора пакетов. Поскольку оптимальное использование данной утилиты требует хорошего понимания сетевых протоколов и их работы, то получается забавная ситуация, в которой инженеру в любом случае необходимо знать и понимать механизмы передачи данных в сети. т.ч. tcpdump полезна во все отношениях: как устранения неисправностей, так и самообразования.

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

Первый используемый ключик -n который запрещает попытки преобразования адресов в доменные имена, тем самым выдавая нам чистые IP адреса с портами.

Второй это -X который задает для каждого пакета вывод как hex (шестнадцатеричная система) так и ASCII содержимого пакета.
И последняя опция это -S которая заменяет вывод относительной TCP нумерации, на абсолютную. Смысл в том, что при относительной нумерации некоторые проблемы могут скрыться от вашего внимания.

Нужно понимать, что основное преимущество tcpdump перед другими утилитами заключается в том, что в ней возможен подробный и ручной разбор пакетов. Также нужно помнить что по умолчанию tcpdump использует только первые 68 байт пакета, т.ч. если необходимо видеть больше, то следует использовать ключ -s number , где number количество байт которые следует захватить. В случае задания number 0 , произойдет полный захват пакета, поэтому лучше использовать значение 1514, что даст полный захват стандартного, для сетей Ethernet, пакета.

Список наиболее часто используемых ключей:
-c: задается проверка размера файла захвата перед каждой очередной записью захваченного пакета, если размер больше, то файл сохраняется и запись идет в новый файл
-e: выводится ethernet заголовок (канальный уровень) в каждой строке дампа
-i any: прослушивание всех интерфейсов, на случай если вам необходим весь трафик.
-n: запрещает преобразование адресов в доменные или символьные имена
-nn: запрещает преобразование адресов и портов в доменные или символьные имена
-q: Красткий вывод информации, за счет уменьшения вывода информации о протоколе.
-X: выводит как hex так и ASCII содержимое пакета
-v, -vv, -vvv: задает вывод дополнительной информации о захваченных пакетах, что дает возможность более широкого анализа.
Несколько примеров для использования:

# Стандартный вывод пакетов
tcpdump -nS
# Расширенный стандартный вывод
tcpdump -nnvvS
# Глубокий разбор пакета
tcpdump -nnvvXS
# Наиболее подробная информация о трафике
tcpdump -nnvvXSs 1514

Выражения позволяют производить более целевое сканирование и задавать типы трафика. Умение использовать выражения делает tcpdump весьма продуктивным инструментом, в рукам сисадмина. Существует три основных типа выражений: type, dir, and proto.
Опции выражжения type бывают host, net и port.
Для выражения направления задаваемого dir существующие опции src, dst, src or dst, и src and dst.
Несколько стандартных выражений:

host // анализ трафика на основе IP адреса (также работает с символьными именами, если не задано -n)
tcpdump host 1.2.3.4

src, dst // анализ трафика только для определенного назначения или передатчика
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

net // захват трафика принадлежащего определенной сети
tcpdump net 1.2.3.0/24

proto // работает с tcp, udp, и icmp. Нужно помнить что proto не упоминается
tcpdump icmp

port // анализ трафика с определенного порта (входящего или исходящего)
tcpdump port 3389

src, dst port // фильтр базируется на входящем или исходящем порту
tcpdump src port 1025
tcpdump dst port 3389

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

AND
and or &&
OR
or or ||
EXCEPT
not or !

TCP трафик с ресурса 10.15.123.33 с портом назвачения 3379:

# tcpdump -nnvvS tcp and src 10.15.123.33 and dst port 3379

Трафик переходящий из сети 192.168 с назначением на сети 10 или 172.16:

# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Non-ICMP трафик с точкой назначения 192.168.0.2 и из сети 172.16:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net 172.16.0.0/16 and not icmp

Трафик с хостов Eros or Ares , но не идущий на стандартный SSH порт (для данного выражения требуется разрешение имен):

# tcpdump -vv src eros or ares and not dst port 22

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

Также следует помнить о том, что мы можем строить запросы, включающие группы и пулы опций, заданных в одном запросе. Но для того чтобы утилита tcpdump обращала на них внимание их нужно помещать в скобки, беря выражение в одиночные кавычки:
Трафик идущий с хоста 10.0.2.4 на порты назначения 3379 или 22:
# tcpdump ‘src 10.0.2.4 and (dst port 3379 or 22)’

Также возможно производить фильтрацию на основе TCP флагов, например для вычленения SYN или RST пакетов:

Анализировать все URG пакеты:
# tcpdump ‘tcp & 32 != 0′

Анализировать все ACK пакеты:
# tcpdump ‘tcp & 16 != 0′

Анализировать все PSH пакеты:
# tcpdump ‘tcp & 8 != 0′

Анализировать все RST пакеты:
# tcpdump ‘tcp & 4 != 0′

Анализировать все SYN пакеты:
# tcpdump ‘tcp & 2 != 0′

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

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

Во многих дистрибутивах команда tcpdump поставляется по умолчанию, но если в вашем дистрибутиве ее нет, то вы можете очень просто ее установить из официальных репозиториев. Например, в Ubuntu/Debian:

sudo apt install tcpdum p

В Fedora/Red Hat/CentOS:

sudo yum install tcpdump

Когда установка завершится, вы можете переходить к работе.

Команда tcpdump

Перед тем как перейти к примерам работы с утилитой, давайте рассмотрим ее синтаксис и основные опции. Команда имеет такой синтаксис:

$ tcpdump опции -i интерфейс фильтры

При вызове обязательно нужно передать интерфейс, который будете отслеживать. Если интерфейс не указать, то будет использован первый в списке. Опции настраивают отображение и основные возможности утилиты, а фильтры позволяют отсеять ненужные пакеты. А теперь рассмотрим основные опции:

  • -A - выводить все пакеты в формате ASCII;
  • -c - закрыть программу после перехвата n-ого количества пакетов;
  • -C - при записи пакетов в файл, проверять размер файла, и если он больше заданного - создать новый файл;
  • -D - вывести список доступных сетевых интерфейсов;
  • -e - выводить информацию уровня соединения для каждого пакета, это может быть полезно, например, для отображения MAC адреса;
  • -f - выводить доменное имя для ip адресов;
  • -F - читать пакеты из файла, а не интерфейса;
  • -G - создавать новый файл лога через указанный промежуток времени;
  • -H - обнаруживать заголовки 802.11s;
  • -i - имя интерфейса для перехвата пакетов. Вы можете захватывать пакеты со всех интерфейсов, для этого укажите any;
  • -I - переключить интерфейс в режим монитора для захвата всех проходящих пакетов;
  • -j - установить формат Timestamp для записи пакетов;
  • -J - посмотреть доступные Timestamp;
  • -K - не проверять контрольные суммы пакетов;
  • -l - добавить поддержку прокрутки к выводу;
  • -L - вывести поддерживаемые протоколы подключения для интерфейса;
  • -n - не отображать доменные имена;
  • -r - прочитать пакеты из файла, созданного с помощью -w;
  • -v, -vv, -vvv - более подробный вывод;
  • -q - выводить минимум информации;
  • -w - записать вывод в файл;
  • -Z - пользователь, от имени которого будут создаваться файлы.

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

Как пользоваться tcpdump

Перед тем как перейти к использованию tcpdump нужно посмотреть какие сетевые интерфейсы вы можете использовать. Для этого запустите команду с опцией -D:

Начнем рассматривать примеры tcpdump с захвата трафика на интерфейсе eth0, у меня это основной интерфейс, который подключен к интернету. Для работы программе необходимы права суперпользователя, поэтому не забудьте указать sudo:

sudo tcpdump -i eth0

Чтобы остановить работу команды нажмите Ctrl+C. В выводе вы сразу же увидите все перехваченные пакеты. Формат записи для каждого пакета будет выглядеть следующим образом:

13:03:41.795599 IP udp032919uds.hawaiiantel.net.6881 > 192.168.1.2.52055 : Flags [.], seq 640160396:640161844, ack 436677393, win 2050, options , length 1448

Такой формат характерен для пакетов данных, в зависимости от протокола выделенный черным текст будет отличаться. Сначала идет временная метка, затем протокол, далее зеленым отмечен ip адрес отправителя, а синим адрес адресата, в данном случае, нашего компьютера. Дальше идут дополнительные параметры tcp и в конце размер пакета в байтах. Подробность вывода информации можно контролировать с помощью опций -v, Например:

sudo tcpdump -v -i eth0

Здесь уже появляется информация о протоколе IP:

IP (tos 0x0, ttl 64 , id 50309, offset 0, flags , proto TCP (6) , length 64)

Мы можем узнать информацию о времени жизни пакета ttl, версию протокола TCP и длину поля заголовка. Опция -vv будет выводить проверку контрольных сумм пакета и содержимое в некоторых случаях.

После опций вы можете указывать фильтры для пакетов. Вот основные параметры, по которым можно отсеивать пакеты:

  • host - имя хоста;
  • ip - ip адрес;
  • proto - протокол;
  • net - адрес сети или подсети;
  • port - адрес порта;
  • src - параметр, касающийся отправителя;
  • dst - параметр, касающейся получателя;
  • Доступны такие протоколы: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp и udp .

Вы можете все это комбинировать между собой, чтобы получить желаемый результат. Рассмотрим более детально на примерах. Отсеем только пакеты, адресованные нашему компьютеру:

sudo tcpdump -i eth0 ip dst 192.168.1.2

Также мы можем отобрать пакеты, отправляемые на определенный узел:

sudo tcpdump -i eth0 dst host google-public-dns-a.google.com

Как видите, это DNS пакеты и здесь вместо флагов TCP содержится полезная информация, запрос ip адреса хоста. Также вы можете выбрать ответные пакеты от определенного хоста:

sudo tcpdump -i eth0 src host google-public-dns-a.google.com

Здесь нет полного содержимого пакета, если вы хотите его получить нужно использовать опцию -v или -vv:

sudo tcpdump -vv -i eth0 host dst google-public-dns-a.google.com

С помощью оператора and вы можете объединить несколько фильтров в один:

sudo tcpdump -i eth0 dst host google-public-dns-a.google.com and src host google-public-dns-a.google.com

Из операций объедения доступны and и or, также можно применять скобки для обозначения приоритета. Вам необязательно указывать host, во многих случаях достаточно src или dst, утилита сама поймет что имелось в виду. Точно такую же конструкцию можно использовать для портов. Например, мы можем отсеять все запросы или ответы к DNS (на порт 53):

sudo tcpdump -vv -i eth0 port 53

Точно такое же можно провернуть для http (порт 80):

sudo tcpdump -vv -i eth0 port 80

Естественно, тут тоже можно применять dst и src для более конкретных результатов. Вы можете фильтровать не один порт, а целый диапазон портов:

sudo tcpdump portrange 21-23

Если указать один из протоколов, вы отфильтруете только пакеты этого протокола, например tcp, udp или arp:

sudo tcpdump -vv arp

Точно также можно выбрать все udp пакеты:

sudo tcpdump -vv udp

Также доступен фильтр по обозначению сети:

sudo tcpdump net 129.168.1.1/24

Кроме того, вы можете фильтровать пакеты по их размеру, например, меньше 32 байт:

sudo tcpdump less 32

Или больше 128:

tcpdump greater 128

sudo tcpdump -i eth0 -w file.pcap

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

sudo tcpdump -r file.pcap

Остался еще один момент, на который стоит обратить внимание. Это формат отображения содержимого пакетов. Вы можете вывести содержимое пакета в формате ASCII используйте опцию -A:

sudo tcpdump -A -i eth0

Также вы можете отобразить содержимое в формате HEX и ASCII для этого используйте -XX:

sudo tcpdump -XX -i eth0

Выводы

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

На завершение видео с лекцией о tcpdump:

tcpdump инструкция на русском и примеры.

-A задает вывод каждого пакета (без заголовков канального уровня) в формате ASCII. Этот режим удобен для сбора трафика HTTP.

-c <число пакетов> задает завершение работы программы после захвата заданного числа пакетов.

-C <размер файла> задает необходимость проверки размера файла захвата перед записью в него каждого нового пакета. Если размер файла превышает значение параметра file_size, этот файл закрывается
и создается новый файл для записи в него пакетов. Для файлов захвата используется имя, заданное параметром -w и, начиная со второго файла к имени добавляется в качестве
суффикса номер файла. Переменная file_size задает размер файла в миллионах байтов (не в мегабайтах = 1 048 576 байт).

-d задает вывод дампа скомпилированного кода соответствия пакетов (packet-matching code) в понятном человеку формате и завершение работы программы.

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

-ddd выводит дамп кода соответствия в виде строки десятичных значений, перед которой следует строка со значением счетчика.

-D выводит список сетевых интерфейсов системы, с которых tcpdump может собирать пакеты. Для каждого сетевого интерфейса указывается имя и номер, за которыми может следовать
текстовое описание интерфейса. Имя и номер интерфейса могут использоваться с флагом -i для задания сбора пакетов с одного интерфейса.

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

Флаг -D не поддерживается, если программа tcpdump была скомпилирована со старой версией libpcap, которая не поддерживает функцию pcap_findalldevs().

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

-E задает использование алгоритма и секрета spi@ipaddr для расшифровки пакетов IPsec ESP, направленных по адресу ipaddr и содержащих and в поле Security Parameter Index значение
spi. Комбинация spi и адреса может быть повторена с использованием в качестве разделителя запятой или новой строки. Отметим, что установка секрета для пакетов IPv4 ESP в
настоящее время поддерживается.

В качестве алгоритмов могут использоваться des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc или none. По умолчанию применяется алгоритм des-cbc. Возможность дешифровки
пакетов обеспечивается только в тех случаях, когда при компиляции tcpdump были включены опции поддержки криптографии.

Параметр secret содержит ASCII-текст секретного ключа ESP. Если секрет начинается с символов 0x, будет считываться шестнадцатеричное значение. Опция предполагает использование
ESP в соответствии с RFC 2406, а не RFC 1827. Эта опция поддерживается только для отладки и использовать ее с реальными секретными ключами не следует, поскольку введенный в
командной строке ключ IPsec доступен другим пользователям системы4.

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

-f задает вывод чужих адресов IPv4 в числовом формате. Использование этой опции позволяет избавиться от проблем, возникающих на серверах Sun NIS при попытках трансляции
нелокальных адресов. Проверка чужеродности адреса IPv4 осуществляется с использованием адреса и маски принявшего пакет интерфейса. Если адрес и маска интерфейса недоступны
(например, при использовании unnumbered-интерфейсов или при захвате пакетов со всех адресов в Linux с использованием фиктивного интерфейса any), эта опция будет работать
некорректно.

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

-i <интерфейс> задает сбор пакетов с указанного интерфейса. Если интерфейс не задан, tcpdump ищет в системе список доступных интерфейсов и выбирает в нем активное устройство с минимальным
номером (исключая loopback).

В системах Linux, начиная с ядра 2.2 поддерживается фиктивный интерфейс с именем any, обеспечивающий сбор пакетов со всех активных интерфейсов системы. Отметим, что сбор
пакетов с устройства any осуществляется в обычном (не promiscuous) режиме.

Если в системе поддерживается флаг -D, можно в качестве аргумента задавать номер интерфейса, выводимый при использовании этого флага.

-l задает буферизацию строк stdout. Эта опция полезна в тех случаях, когда вы хотите просматривать данные во время сбора пакетов. Например, команды

tcpdump -l | tee dat

tcpdump -l > dat & tail -f dat

обеспечивают запись пакетов в файл dat и одновременный вывод на консоль.

-L задает вывод списка известных типов канального уровня и завершение работы программы.

-m <файл> загружает модуль определений SMI MIB из указанного файла. Эта опция может использоваться неоднократно для загрузки нескольких модулей MIB.

-n отключает преобразование адресов и номеров портов в символьные имена.

-N задает использование только имен хостов, а не полных доменных имен. Например, вместо lhotze.bilim-systems.net при использовании этой опции моя рабочая станция будет
обозначаться как lhotze.

-O отключает оптимизатор кода проверки соответствия пакетов условиям фильтрации. Используйте эту опцию, если вам покажется, что оптимизатор работает с ошибками.

-p указывает программе, что интерфейс не нужно переводить в режим захвата5. Опцию -p нельзя использовать вместе с фильтром ether host {local-hw-addr} or ether broadcast.

-q задает вывод минимального объема информации.

-R при установке этого флага предполагается, что пакеты ESP/AH используют старый вариант спецификации6 и tcpdump не будет выводить поля replay prevention (защита от
воспроизведения). Поскольку спецификация ESP/AH не включает поля с номером версии, tcpdump не может определить версию протокола ESP/AH по заголовкам пакетов.

-r <файл> задает чтение данных из файла, созданного ранее с использованием команды tcpdump -w или с помощью другой программы, поддерживающей формат tcpdump (например, Ethereal). Если в
качестве имени файла задан символ -, используется поток данных от стандартного устройства ввода (stdin).

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

-s задает захват из каждого пакета snaplen байтов вместо отбираемых по умолчанию 68 байтов7. Значение 68 подходит для протоколов IP, ICMP, TCP и UDP но может приводить к потере
протокольной информации для некоторых пакетов DNS и NFS. Потеря части пакетов по причине малого размера кадра захвата (snapshot) указывается в выходных данных полями вида
[|proto]’, где proto – имя протокольного уровня, на котором произошло отсечение части пакета8. Отметим, что увеличение кадра захвата приведет к дополнительным временным
затратам на обработку пакетов и уменьшению числа буферизуемых пакетов, что может привести к потере части пакетов. Используйте минимальное значение snaplen, которое позволит
обойтись без потери информации об интересующем вас протоколе. Установка snaplen = 0 приведет к захвату полных пакетов.

-T <тип> задает интерпретацию пакетов, выбранных с помощью фильтра, как пакетов указанного параметром типа. В настоящее время поддерживаются типы aodv9, cnfp10, rpc11, rtp12, rtcp13,
snmp14, tftp15, vat16 и wb17.

-t отключает вывод временных меток в каждой строке дампа.

-tt задает вывод в каждой строке дампа неформатированных временных меток.

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

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

-u задает вывод манипуляторов (handle) NFS без декодирования.

-U задает режим “буферизации на уровне пакетов” для файлов, сохраняемых с помощью опции -w. В этом режиме каждый пакет записывается в выходной файл как только он будет захвачен
(не дожидаясь заполнения выходного буфера). Флаг -U не будет поддерживаться, если программа tcpdump была скомпилирована со старой опцией libpcap, не поддерживающей функцию
pcap_dump_flush().

-v задает вывод дополнительной информации при захвате файлов. К такой информации может относиться значение TTL (время жизни), идентификация, общий размер, опции IP и т. п. При
использовании этого флага также выполняется дополнительная проверка целостности пакетов с помощью контрольных сумм (например, для протоколов IP и ICMP).

-vv задает дополнительное увеличение объема выводимой информации (например, полное декодирование пакетов SMB, вывод дополнительных полей откликов NFS и т. п.).

-vvv задает максимальный объем выводимой информации (например, полностью выводятся опции telnet SB … SE). При использовании вместе с ключом -X опции Telnet выводятся также в
шестнадцатеричном представлении.

-w <файл> задает запись необработанных (raw) пакетов. Собранные в файл пакеты можно впоследствии просматривать с использованием флага -r или передавать для анализа другим программам
(например, Ethereal). Если в качестве имени файла указан символ -, запись осуществляется на стандартное устройство вывода (stdout).

-x задает вывод шестнадцатеричного дампа (без заголовка канального уровня) для каждого захваченного пакета. Объем выводимой информации определяется меньшим из двух значений —
размер пакета и значение параметра snaplen. Отметим, что при захвате полных кадров канального уровня дамп может включать также байты заполнения, если пакет сетевого уровня
имеет малый размер.

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

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

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

-y <тип> задает тип канального уровня, используемого при захвате пакетов. Поддерживаемые значения можно посмотреть с помощью флага -L.

Примеры.

  • Ловим весь исходящий трафик

tcpdump -i re0 -n -nn -ttt dst host 192.168.1.2

  • Ловим весь исходящий трафик кроме нашей ssh сессии ибо очень большой поток данных получается.

tcpdump -i re0 -n -nn -ttt ‘dst host 192.168.1.110 and not (src host 192.168.1.2 and dst port 22)’

  • Просмотр общения dns

tcpdump -i re0 -n -nn -ttt ‘host 192.168.1.110 and port 53’

  • Просмотр icmp пакетов

tcpdump -i re0 -n -nn -ttt ‘ip proto \icmp’

  • Трафик переходящий из сети 10.7.20 с назначением на сети 10.7.0. или 10.7.24.:

tcpdump -nvX src net 10.7.20.0.0/16 and dst net 10.7.0.0/8 or 10.7.24.0/16

  • Трафик идущий с сети 10.7.0.0 на порты назначения 22 или 4589:

tcpdump ’src 10.7.0.0 and (dst port 22 or 4589)’

  • Посмотреть трафик на интерфейсе:
  • посмотреть трафик одного хоста:

tcpdump host 192.168.1.1

  • Посмотреть трафик на порте:

tcpdump src port 80

  • Посмотреть IP трафик на хост:

tcpdump ip host 192.168.1.2

  • Посмотреть ARP трафик на хост:

tcpdump arp host 192.168.1.2

  • Смотрим RARP трафик на хост:

tcpdump rarp host 192.168.1.2

  • Смотрим трафик, кроме хоста pav253

tcpdump not host pav253

  • Смотрим трафик на pav253 и pav210

tcpdump host pav253 or host pav210

  • Смотрим содержимое пакетов на интерфейсе re0 на хост сайт

tcpdump -X -i re0 host сайт

  • icq трафик

tcpdump -X -i re0 port aol

  • Смотрим содержимое пакетов на интерфейсе tun0 на хост ya.ru, при этом прочитать из каждого пакета по 1500 байт и не преобразовывать IP в имя хоста

tcpdump -X -s 1500 -n -i re0 host сайт

  • Top активных взимодействий

tcpdump -tn -c 10000 -i re0 tcp or udp | awk -F «.» ‘{print $1″.»$2″.»$3″.»$4}’ | \ sort | uniq -c | sort -nr | awk ‘$1 > 100’

  • Смотрим все TCP пакеты с флагом SYN (начало сессии).

tcpdump -i eth0 -nn tcp == 2 and src net 192.168.1.0/24

  • Просмотр syn и fin пакетов из вне

tcpdump ‘tcp & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0’

  • Просмотр все ipv4 http пакеты с порта 80, кроме syn / fin / ack данных

tcpdump ‘tcp port 80 and (((ip — ((ip&0xf)<>2)) != 0)’

  • Просмотр только syn пакеты

This tutorial will show you how to isolate traffic in various ways—from IP, to port, to protocol, to application-layer traffic—to make sure you find exactly what you need as quickly as possible.

tcpdump is the tool everyone should learn as their base for packet analysis.

Install tcpdump with apt install tcpdump (Ubuntu), or yum install tcpdump (Redhat/Centos)

Let’s start with a basic command that will get us HTTPS traffic:

tcpdump -nn S X port 443

04:45:40.573686 IP 78.149.209.110.27782 > 172.30.0.144 .443 : Flags [.], ack 278239097, win 28, options , length 0 0x0000: 4500 0034 0014 0000 2e06 c005 4e8e d16e E..4........N..n 0x0010: ac1e 0090 6c86 01bb 8e0a b73e 1095 9779 ....l......>...y 0x0020: 8010 001c d202 0000 0101 080a 3803 7b55 ............8.{U 0x0030: 4801 8100

You can get a single packet with -c 1 , or n number with -c n .

This showed some HTTPS traffic, with a hex display visible on the right portion of the output (alas, it’s encrypted). Just remember—when in doubt, run the command above with the port you’re interested in, and you should be on your way.

Examples

PacketWizard™ isn’t really trademarked, but it should be.

a practitioner preparing to run tcpdump

Now that you are able to get basic traffic, let’s step through numerous examples that you are likely to need during your job in networking, security, or as any type of PacketWizard™.

Everything on an interface

Just see what’s going on, by looking at what’s hitting your interface.

Or get all interfaces with -i any .

tcpdump -i eth0

Find Traffic by IP

One of the most common queries, using host , you can see traffic that’s going to or from 1.1.1.1.

Expression Types:

host , net , and port .

src and dst .

host , net , and port .

tcp , udp , icmp , and many more.

tcpdump host 1.1.1.1

06:20:25.593207 IP 172.30.0.144.39270 > one.one.one.one .domain : 12790+ A? google.com. (28) 06:20:25.594510 IP one.one.one.one .domain > 172.30.0.144.39270: 12790 1/0/0 A 172.217.15.78 (44)

If you only want to see traffic in one direction or the other, you can use src and dst .

tcpdump src 1.1.1.1
tcpdump dst 1.0.0.1

Finding Packets by Network

To find packets going to or from a particular network or subnet, use the net option.

You can combine this with the src and dst options as well.

tcpdump net 1.2.3.0/24

Get Packet Contents with Hex Output

Hex output is useful when you want to see the content of the packets in question, and it’s often best used when you’re isolating a few candidates for closer scrutiny.

tcpdump -c 1 -X icmp

Summary

Here are the takeaways.

  1. tcpdump is a valuable tool for anyone looking to get into networking or .
  2. The raw way it interfaces with traffic, combined with the precision it offers in inspecting packets make it the best possible tool for learning TCP/IP.
  3. Protocol Analyzers like Wireshark are great, but if you want to truly master packet-fu, you must become one with tcpdump first.

Well, this primer should get you going strong, but the man page should always be handy for the most advanced and one-off usage scenarios. I truly hope this has been useful to you, and feel free to if you have any questions.

Notes

  1. I’m currently (sort of) writing a book on tcpdump for No Starch Press.
  2. The leading image is from SecurityWizardry.com .
  3. Some of the isolation filters borrowed from
Похожие публикации