Tcpdump как остановить через заданное время. Утилита tcpdump, примеры опции фильтры

ПОЧЕМУ TCPDUMP?

Tcpdump — главный инструмент сетевого анализа для специалистов по информационной безопасности. Для тех, кто хочет получить полное представление о TCP / IP обязательно нужно обладать достаточным пониманием этого важного приложения. Многие предпочитают использовать инструменты более высокого уровня, такие как Wireshark, но я считаю это ошибкой.

Когда используешь инструмент, который отображает сетевой трафик более естественным (простым) способом, сложность анализа взваливается непосредственно на человека, а не на приложение. Этот подход развивает понимание набора TCP / IP, именно поэтому я настоятельно рекомендую использовать tcpdump вместо других инструментов, когда это возможно.

15:31:34.079416 IP (tos 0x0, ttl 64, id 20244, offset 0, flags , proto: TCP (6), length: 60) source.35970 > dest.80: S, cksum 0x0ac1 (correct), 2647022145:2647022145(0) win 5840 0x0000: 4500 003c 4f14 4006 7417 0afb 0257 E.. 0x0010: 4815 222a 8c82 0050 9dc6 5a41 0000 0000 H."*...P..ZA.... 0x0020: a002 16d0 0ac1 0000 0204 05b4 0402 080a ................ 0x0030: 14b4 1555 0000 0000 0103 0302

ОСНОВЫ

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

ОПЦИИ

  • -i any: прослушивать все интерфейсы, чтобы увидеть, видите ли вы какой-либо трафик.
  • -i eth0: прослушивать интерфейс eth0.
  • -D: Показывать список доступных интерфейсов
  • -n: отображать IP адреса вместо имени хостов.
  • -nn: отображать IP адреса и номера портов вместо имени хостов и названия протоколов.
  • -q: показывает минимальное количество информации о пакете.
  • -t: не отображать метку времени в каждой строке.
  • -tttt: задает вывод временных меток в принятом по умолчанию формате для каждой строки.
  • -X: Показывать содержимое пакета как в шестнадцатеричной кодировке, так и в ASCII.
  • -XX: То же, что и -X, но также показывает ethernet header.
  • -v, -vv, -vvv: увеличить количество возвращаемой информации о пакетах.
  • -c: только получить x количество пакетов, а затем остановить.
  • -s: определить длину snaplength (размер) захвата в байтах. Используйте -s0, чтобы получить все, если только вы намеренно не захватили меньше.
  • -S: Печатать абсолютные порядковые номера.
  • -e: Получить ethernet header.
  • -q: Показать минимальную информацию о пакете.
  • -E: Расшифровать трафик IPSEC, предоставив ключ шифрования.
[Значение snaplength, по умолчанию для tcpdump 4.0, изменилось с 68 до 96 байтов. Хотя это даст вам увидеть больше информации о пакете, но это будет не вся информация. Используйте -s1514 или -s0, чтобы получить полный охват]

ВЫРАЖЕНИЯ

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

Существует три основных типа выражений: type, dir и proto.

Типы опций: хост, сеть и порт.

Директории позволяют вам выполнять src, dst и их комбинации.

Протокол позволяет вам определять: tcp, udp, icmp, ah и многие другие.

ПРИМЕРЫ

Итак, теперь, когда мы увидели, какие у нас есть варианты, давайте посмотрим на некоторые реальные примеры, которые мы, вероятно, увидим в нашей повседневной работе.

ОСНОВНОЕ СООБЩЕНИЕ

Просто посмотрите, что происходит, посмотрев на все интерфейсы.

# tcpdump -i any

КОНКРЕТНЫЙ ИНТЕРФЕЙС

Основное представление о том, что происходит на конкретном интерфейсе.

# tcpdump -i eth0

ПРЕДСТАВЛЕНИЕ НЕОБРАБОТАНОГО ВЫВОДА

Подробный вывод без разрешения имен хостов или номеров портов, абсолютных порядковых номеров и удобочитаемых временных меток.

# tcpdump -ttttnnvvS

НАЙДИТЕ ТРАФИК ПО IP

Один из самых распространенных запросов, это покажет вам трафик из 1.2.3.4, будь то источник или место назначения.

# tcpdump host 1.2.3.4

ПОСМОТРЕТЬ БОЛЬШЕ ИНФОРМАЦИИ О ПАКЕТЕ С ВЫВОДОМ НА ШЕСТНАДЦАТЕРИЧНУЮ СИСТЕМУ

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

# tcpdump -nnvXSs 0 -c1 icmp tcpdump: listening on eth0, link-type EN10MB (Ethernet), 23:11:10.370321 IP (tos 0x20, ttl 48, id 34859, offset 0, flags , length: 84) 69.254.213.43 > 72.21.34.42: icmp 64: echo request seq 0 0x0000: 4520 0054 882b 0000 3001 7cf5 45fe d52b E..T.+..0.|.E..+ 0x0010: 4815 222a 0800 3530 272a 0000 25ff d744 H."..50"..%..D 0x0020: ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213 .^.............. 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&"()*+,-./0123 0x0050: 3435 3637 4567 1 packets captured 1 packets received by filter 0 packets dropped by kernel

ФИЛЬТРАЦИЯ ПО ИСТОЧНИКАМ И НАЗНАЧЕНИЮ

Выделить трафик на основе источника или назначения очень просто, используя src и dst.

# tcpdump src 2.3.4.5 tcpdump dst 3.4.5.6

ПОИСКОВЫЕ ПАКЕТЫ ПО СЕТИ

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

# tcpdump net 1.2.3.0/24

ПОКАЗАТЬ ТРАФИК СВЯЗАНЫЙ СО СПЕЦИАЛЬНЫМ ПОРТОМ

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

# tcpdump port 3389 tcpdump src port 1025

ПОКАЗАТЬ ТРАФИК ОДНОГО ПРОТОКОЛА

Если вы ищете определенный тип трафика, вы можете использовать tcp, udp, icmp и многие другие.

# tcpdump icmp

ПОКАЗАТЬ ТОЛЬКО ТРАФИК IP6

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

НАЙДИТЕ ТРАФИК С ИСПОЛЬЗОВАНИЕМ ПОРТОВЫХ ДИАПАЗОНОВ

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

# tcpdump portrange 21-23

НАЙДИТЕ ТРАФИК НА ОСНОВЕ РАЗМЕРА ПАКЕТА

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

# tcpdump less 32 tcpdump greater 64 tcpdump <= 128

ПИСЬМЕННЫЕ ЗАПИСИ В ФАЙЛ

Часто полезно сохранять результат пакетов в файл для анализа в будущем. Эти файлы известны как файлы PCAP (PEE-cap), и их можно обрабатывать сотнями различных приложений, включая сетевые анализаторы, системы обнаружения вторжений и, конечно же, самим tcpdump. Здесь мы пишем файл с именем capture_file, используя ключ -w.

# tcpdump port 80 -w capture_file

ЧТЕНИЕ ФАЙЛОВ PCAP

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

# tcpdump -r capture_file

РАСШИРЕННЫЙ

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

ЭТО ВСЕ О КОМБИНАЦИЯХ

Делать эти различные вещи индивидуальными – мощная способность, но настоящая магия tcpdump исходит из способности сочетать варианты креативными способами, чтобы изолировать именно то, что вы ищете. Есть три способа сделать комбинации, и если вы вообще изучали программирование, они вам будут очень знакомы.

AND
and or &&

OR
or or ||

EXCEPT
not or !

Вот несколько примеров комбинированных команд.

ИЗ СПЕЦИФИЧЕСКОГО IP И НАЗНАЧАЕТСЯ ДЛЯ ОПРЕДЕЛЕННОГО ПОРТА

Давайте найдем весь трафик с 10.5.2.3 к любому хосту на порте 3389.

Tcpdump -nnvvS src 10.5.2.3 and dst port 3389

ОТ ОДНОЙ СЕТИ К ДРУГОЙ

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

Tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or172.16.0.0/16

НЕ ICMP ТРАФИК, ПЕРЕХОДЯЩИЙ В СПЕЦИФИЧЕСКИЙ IP

Это покажет нам весь трафик, идущий к 192.168.0.2, который не является ICMP.

Tcpdump dst 192.168.0.2 and src net and not icmp

ТРАФИК ОТ ХОСТА, КОТОРЫЙ НЕ В КОНКРЕТНОМ ПОРТУ

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

Tcpdump -vv src mars and not dst port 22

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

Сложная группировка и специальные символы

Также имейте в виду, что при создании сложных запросов вам, возможно, придется группировать свои параметры, используя одинарные кавычки. Одиночные кавычки используются для того, чтобы указать tcpdump, что нужно игнорировать некоторые специальные символы — в этом случае то, что в скобках «()». Этот же метод можна использоваться для группировки с использованием других выражений, таких как хост, порт, сеть и т.д. Посмотрите на приведенную ниже команду.

# Traffic that’s from 10.0.2.4 AND destined for ports 3389 or 22 (неверно) tcpdump src 10.0.2.4 and (dst port 3389 or 22)

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

# Traffic that’s from 10.0.2.4 AND destined for ports 3389 or 22 (correct) # tcpdump "src 10.0.2.4 and (dst port 3389 or 22)"

Изолирование специфических TCP-флагов

Вы также можете захватывать трафик на основе определенных флагов (-ов) TCP.

[ПРИМЕЧАНИЕ: Фильтры ниже находят эти различные пакеты, потому что tcp замечает смещение 13 в заголовке TCP, число представляет местоположение в байте, а! = 0 означает, что данный флаг установлен в 1, т.е. он включен. ]

Показать все URGENT (URG) пакеты …

# tcpdump "tcp & 32!=0"

Показать все ACKNOWLEDGE пакеты (ACK) …

# tcpdump "tcp & 16!=0"

Показать все PUSH пакеты (PSH) …

# tcpdump "tcp & 8!=0"

Показать все RESET пакеты (RST) …

# tcpdump "tcp & 4!=0"

Показать все SYNCHRONIZE пакеты (SYN) …

# tcpdump "tcp & 2!=0"

Показать все FINISH (FIN) пакеты …

# tcpdump "tcp & 1!=0"

Показать все SYNCHRONIZE / ACKNOWLEDGE пакеты (SYNACK) …

# tcpdump "tcp=18" [Примечание: только флаг PSH, RST, SYN и FIN отображаются в выводе поля tcpdump. Отображаются URG и ACK, но они показаны в другом месте на выходе, а не в поле flags. ]

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

# tcpdump "tcp == tcp-syn"

Снять флаги RST с помощью параметра tcpflags …

# tcpdump "tcp == tcp-rst"

Снять флаги FIN с помощью параметра tcpflags…

# tcpdump "tcp == tcp-fin" [Примечание: тот же метод может быть использован и для других флагов; они были опущены в интересах экономии места. ]

Определение заслуживающего внимания трафика

Наконец, есть несколько быстрых рецептов, которые вы захотите запомнить, чтобы поймать специфический и специализированный трафик, например, неправильные / вероятно-вредоносные пакеты.

ПАКЕТЫ С ОБЫЧНЫМИ КОМПЛЕКТАМИ RST И SYN (ЭТОГО НЕ ДОЛЖНО БЫТЬ)

# tcpdump "tcp = 6"

НАЙТИ ОТКРЫТЫЙ ТЕКСТ HTTP И ПОЛУЧИТЬ ЗАПРОС

# tcpdump "tcp = 0x47455420"

НАЙДИТЕ SSH-СОЕДИНЕНИЯ НА ЛЮБОЙ ПОРТ (ЧЕРЕЗ БАННЕР)

# tcpdump "tcp[(tcp>>2):4] = 0x5353482D"

ПАКЕТЫ С TTL МЕНЬШЕ 10 (КАК ПРАВИЛО ПОКАЗЫВАЕТ ПРОБЛЕМУ ИЛИ ИСПОЛЬЗУЕТ TRACEROUTE)

# tcpdump "ip < 10"

ПАКЕТЫ С УСТАНОВКОЙ EVIL BIT

# tcpdump "ip & 128 != 0"

Заключение

tcpdump — это ценный инструмент для всех, кто хочет вступить в сетевую или информационную безопасность.
Необычный способ взаимодействия с трафиком в сочетании с точностью, которую он предоставляет при проверке пакетов, делает его наилучшим инструментом для изучения TCP / IP.
Анализаторы протоколов, такие как Wireshark, великолепны, но если вы хотите действительно овладеть пакетами, вы должны сначала овладеть tcpdump.
В общем, этот учебник должен помочь вам стать сильным, но страница руководства всегда должна быть удобной для самых продвинутых и одноразовых сценариев использования. Я искренне надеюсь, что это было полезно вам, и не стесняйтесь обращаться ко мне, если у вас есть какие-либо вопросы.

  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
  • Как проходит обучение?

    • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
    • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
    • Если хотите индивидуальный график - обсудим и осуществим.
    • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.

    А еще поможем Вам:

    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 также называется анализатором пакетов.

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

    На этом уроке мы рассмотрим некоторые практические примеры того, как использовать команду tcpdump.

    1. Захват пакетов от конкретного интерфейса локальных сетей с использованием tcpdump -i

    При выполнении команды tcpdump без какого-либо варианта, он будет захватывать все пакеты, проходящие через все интерфейсы. Опция -i команды tcpdump, позволяет фильтровать по определенному интерфейсу Ethernet.

    $ tcpdump -i eth1 12:59:41.967250 ARP, Request who-has free.msk.ispsystem.net tell gw.msk.ispsystem.net, length 46 12:59:41.967257 ARP, Request who-has reserve.scoffserver.ru tell gw.msk.ispsystem.net, length 46 12:59:41..44141 > wdc-ns1.ispsystem.net.domain: 14799+ PTR? 184.48.146.82.in-addr.arpa. (44) ...

    В этом примере, tcpdump захватил все пакеты потока в интерфейсе eth1 и отображает в стандартном выводе.

    Примечание:

    Утилита Editcap используется для выбора или удаления определенных пакетов из файла дампа и перевод их в заданном формате.

    2. Захват только N-ое число пакетов с помощью tcpdump -c

    При выполнении команды tcpdump дает пакеты, пока вы не отмените команду tcpdump. Используя опцию -c вы можете указать количество пакетов для захвата.

    $ tcpdump -c 2 -i eth0 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 13:01:35.165898 ARP, Request who-has 213.159.211.80 tell gw.msk.ispsystem.net, length 46 13:01:35..35123 > wdc-ns1.ispsystem.net.domain: 7254+ PTR? 80.211.159.213.in-addr.arpa. (45) 2 packets captured 7 packets received by filter 0 packets dropped by kernel

    Команда tcpdump захватили только 2 пакета от интерфейса eth0.

    Примечание:

    Mergecap и TShark: Mergecap представляет собой инструмент объединения свалки пакетов, который будет объединять в себе несколько пакетов в один файл дампа. Tshark является мощным инструментом для захвата сетевых пакетов, которые могут быть использованы для анализа сетевого трафика. Он поставляется с анализатором распределения сети Wireshark.

    3. Выод на дисплей перехваченных пакетов в ASCII, используя tcpdump -a

    Следующий синтаксис tcpdump печатает пакет в ASCII.

    $ tcpdump -A -i eth0 13:03:06.516709 IP 213.132.93.178..vlsi-lm: Flags [.], ack 3120779210, win 254, length 0 E..([email protected]..].....b...%.=...O.P....... 13:03:06..35313 > wdc-ns1.ispsystem.net.domain: 13562+ PTR? 178.93.132.213.in-addr.arpa. (45) E..I9.@[email protected], 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