Tcpdump linux примеры. Фильтруй эфир! Проводим аудит сетевого трафика с помощью 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 инструкция на русском и примеры.

    -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 задает использование алгоритма и секрета [email protected] для расшифровки пакетов 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 пакеты

    Поэтому решил создать свою шпаргалку, чтобы было... Ибо без tcpdump не один админ - неадмин

    Введение

    Очень часто для поиска проблем в работе сети используются анализаторы сетевого трафика . tcpdump является одним из представителей данного класса программ, она позволяет прослушать (отобразить/сохранить) и проанализировать работу сети на уровне передаваемых сетевых пакетов, фреймов и др. единиц передачи сетевого трафика. В зависимости от конфигурации сети, tcpdump может прослушивать не только пакеты, предназначенные данному MAC-адресу, но и широковещательные пакеты. Прослушивание перехват сетевых пакетов основан на "беспорядочном" (promiscuous) режиме работы сетевого адаптера.

    В зависимости от используемого сетевого оборудования для соединения компьютеров в сети Ethernet существуют следующие возможности прослушивания трафика :

    • В сети на основе концентраторов весь трафик с концентратора хаба доступен любому сетевому хосту.
    • В сетях на основе коммутаторов (свичей) сетевому хосту доступен только ее трафик, а также весь широковещательный трафик данного сегмента.
    • Некоторые управляемые коммутаторы имеют функцию копирования трафика данного порта на порт мониторинга ("зеркалирование",мониторинг порта).
    • При использовании специальных средств (ответвителей), включаемых в разрыв сетевого подключения и передающих трафик подключения на отдельный порт возможно прослушивание соответствующего порта.
    • "Трюк" с концентратором - порт коммутатора, трафик которого необходимо прослушать, включают через концентратор, подключив к концентратору также узел-монитор (при этом в большинстве случаев уменьшается производительность сетевого подключения).

    Итак, утилита tcpdump входит в большинство дистрибутивов Unix и позволяет перехватывать и отображать/сохранять в файл сетевой трафик. Утилита использует библиотеку libpcap . Для Windows тоже существует порт . Для работы утилиты ее необходимо . Например, в Debian она устанавливается с помощью команды:

    Debian:~# apt-get install tcpdump

    Для работы утилиты необходимы (т.к. изменяются настройки сетевого интерфейса - переводится в "безпорядочный" режим). В общем случае формат команды tcpdump имеет следующий вид:

    Debian:~# tcpdump <опции> <фильтр>

    Опции утилиты tcpdump

    -i интерфейс

    Задает интерфейс, с которого необходимо анализировать трафик (без указания интерфейса - анализ "первого попавшегося").

    Отключает преобразование IP в доменные имена. Если указано -nn, то запрещается преобразование номеров портов в название протокола.

    Наиболее часто используемые фильтрующие параметры команды tcpdump:

    dst хост

    Проверяет, совпадает ли адрес получателя IP-пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

    src хост

    Проверяет, совпадает ли адрес отправителя IP пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

    host хост

    Проверяет, совпадает ли адрес отправителя или получателя с заданным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

    net имя_сети

    Проверяется, находится ли адрес отправителя/получателя в заданной сети. Возможно указание сети в формате CIDR (например 10.0.0.1/22), либо указание имени сети, заданной в .

    ip | arp | rarp | tcp | udp | icmp [хост]

    Проверяет, принадлежит ли пакет одному из указанных протоколов и при указании адреса хоста проверяет, совпадает ли адрес отправителя\получателя с заданным. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

    dst port номер_порта

    Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.

    src port номер_порта

    Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт источника заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.

    port номер_порта

    Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения или источника заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.

    ip broadcast

    Проверяется, является ли IP пакет широковещательным.

    ether { src | dst | host } MAC_адрес

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

    ether broadcast

    Проверяется, является ли ARP-пакет широковещательным.

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

    Анализ трафика на сетевом уровне (ARP, ICMP) с помощью tcpdump

    Предположим, у нас имеется 2 хоста. Хост 1 с интерфейсом eth0 и следующими параметрами:

    Host1:~# ip addr show dev eth0 5: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.56.1/24 brd 192.168.56.255 scope global eth0 inet6 fe80::800:27ff:fe00:0/64 scope link valid_lft forever preferred_lft forever

    А так же хост2 с интерфейсом eth1

    Host2:~# ip addr show dev eth1 3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff inet 192.168.56.33/24 scope global eth1 inet6 fe80::a00:27ff:fefd:e5aa/64 scope link valid_lft forever preferred_lft forever

    Предположим, что до текущего момента сетевого обмена данными между хостами не происходило и если на хосте 2 запустить команду ip neigh show, то будет видно что в ARP-таблице нет записей. Проведем маленький эксперимент. Запустим на одном из виртуальных интерфейсов host1 утилиту tcpdump:

    Host1:~# tcpdump -ne -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

    Host1:~# ping -c 1 192.168.56.33 PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data. 64 bytes from 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms --- 192.168.56.33 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 1.067/1.067/1.067/0.000 ms

    После этого в ARP-таблице системы host1 появилась запись об IP-адресе машины host2:

    Host1:~# ip neigh show dev eth0 192.168.56.33 lladdr 01:00:27:77:e5:00 HOST2

    На виртуальной консоли tcpdump нам отобразил следующую информацию:

    Host1:~# tcpdump -ne -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 12:16:29.465780 0a:00:27:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.56.33 tell 192.168.56.1, length 28 12:16:29.466786 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype ARP (0x0806), length 42: Reply 192.168.56.33 is-at 01:00:27:77:e5:00, length 28 12:16:29.466815 0a:00:27:00:00:00 > 01:00:27:77:e5:00, ethertype IPv4 (0x0800), length 98: 192.168.56.1 > 192.168.56.33: ICMP echo request, id 5284, seq 1, length 64 12:16:29.467934 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype IPv4 (0x0800), length 98: 192.168.56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64 ^C 4 packets captured 4 packets received by filter 0 packets dropped by kernel

    Каждая запись о сетевом пакете в таком формате содержит время перехвата пакета, MAC-адреса отправителя и получателя, тип протокола, длину пакета и сведения о содержимом пакета. Первая запись описывает широковещательный ARP-запрос с MAC-адреса интерфейса eth0 системы host1 ("У кого адрес 192.168.56.33, это говорит 192.168.56.1 "). Вторая запись - ответ с MAC-адреса машины host2 на MAC-адрес системы host1 ("192.168.56.33 имеет MAC-адрес 01:00:27:77:e5:00 "). Третья и четвертая записи (ICMP-запрос и ICMP-ответ ) являются результатом работы команды ping на системе host1. Далее работа tcpdump была прервана . Перед завершением работы tcpdump печатает статистику работы: количество перехваченных, полученных фильтром и отброшенных ядром пакетов

    Таким образом, система host1 для того, чтобы отправить стандартный эхо-запрос машине host2, предварительно по протоколу ARP получила MAC-адреса машины host2 и внесла его с привязкой к IP-адресу в свою ARP-таблицу.

    Анализ трафика на транспортном уровне (TCP, UDP) с помощью tcpdump

    Предположим на системе host2 установлен некий WEB-сервер. Попробуем на машине host1 открыть страницу с этого web-сервера с помощью консольного браузера lynx:

    Host1:~# lynx 192.168.56.33

    На другой консоли предварительно запустим tcpdump с фильтрующими параметрами:

    Host1:~# tcpdump -n -i eth0 host 192.168.56.33 and port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options , length 0 15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 370041518, ack 1209026236, win 5792, options , length 0 15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46, options , length 0 15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 1:222, ack 1, win 46, options , length 221 15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, options , length 0 15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 1:446, ack 222, win 1716, options , length 445 15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, win 54, options , length 0 15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 446, ack 222, win 1716, options , length 0 15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 222, ack 447, win 54, options , length 0 15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, options , length 0 …

    В данном примере клиент (192.168.56.1) c TCP-порта 41533 устанавливает соединение с сервером (192.168.56.33), слушающим на порту 80, делает запрос, получает необходимые данные и соединение завершается.

    Заголовок TCP-сегмента, помимо номеров портов получателя и отправителя содержит ряд параметров:

    • Номер последовательности (seq). Определяет порядок следования байт в отправляемом в сеть потоке (смещение первого байта в сегменте относительно начала потока данных).
    • Подтвержденный номер (ACK). Максимальный номер байта в полученном сегменте увеличенный на 1. Отправляемые отправителю подтверждения одновременно служат запросом новой порции данных.
    • Управляющие флаги (SYN - S, ACK, FIN -F , RST - R , PSH - P, URG)
    • Окно (win) - количество байтов данных, ожидаемых отправителем данного, начиная с байта номер которого указан в поле ack. Для оптимизации передачи отправитель не ждет подтверждения для каждого отправленного сегмента, а может отправить в сеть группу сегменту (но в байтах не больше размера окна). Если качество канала плохое (много запросов на повторную передачу, теряются подтверждения) окно уменьшается, если хорошее - окно увеличивается.
    • Опции . Используются для решения вспомогательных задач. Например, передается MSS (Maximum segment size) - максимальный размер сегмента.

    Процесс установления двунаправленного соединения по протоколу TCP отражают первые три записи tcpdump:

    • Клиент отправляет серверу TCP-сегмент с установленным флагом SYN, начальным "случайным" номером (1209026235), с которого будут нумероваться байты в отправляемом им потоке, максимальный размер окна - объем, который разрешено передавать серверу без подтверждения от клиента (5840): 15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, win 5840, options , length
    • Сервер отправляет клиенту TCP-сегмент с установленными флагами SYN и ACK, начальным "случайным" номером (370041518), с которого будут нумероваться байты в отправляемом им потоке, и максимальный размер окна для клиента (5792). Данный сегмент также является подтверждением получения запроса на установление соединения от клиента: 15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 370041518, ack 1209026236, win 5792, options , length
    • Клиент отправляет серверу TCP-сегмент с установленным флагом ACK, который является подтверждением получения сегмента от сервера (далее tcpdump отображает относительные значения seq и ask): 15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46, options , length

    После этого соединение считается установленным .

    В следующей паре записей клиент передает в секции данных сегмента серверу запрос протокола прикладного уровня (221 байт) и получает от сервера подтверждение его получения:

    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 1:222, ack 1, win 46, options , length 221 15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, options , length 0

    При этом флаг PSH (P) используется для оповещения отправляющей стороны о том, что принимающая готова принимать данные. Далее сервер отправляет данные клиенту (445 байт) и получает от него подтверждение получения:

    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 1:446, ack 222, win 1716, options , length 445 15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, win 54, options , length 0

    Затем по инициативе сервера соединение завершается. Сервер шлет пакет с установленным флагом FIN:

    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags , seq 446, ack 222, win 1716, options , length 0

    Клиент в ответ также отправляет пакет с установленным флагом FIN, данный пакет одновременно является подтверждением получения запроса на завершение соединения от сервера:

    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags , seq 222, ack 447, win 54, options , length 0

    Серверу остается лишь подтвердить получение FIN-сегмента от клиента:

    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, options , length 0

    Реакция tcpdump на попытку подключения к закрытому порту 23/tcp:

    21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Flags [S], seq 2956835311, win 5840, options , length 0 21:56:14.381688 IP 192.168.56.33.23 > 192.168.56.1.54040: Flags , seq 0, ack 2956835312, win 0, length 0

    В данном примере с системы 192.168.56.1 делается попытка подключится к несуществующему TCP-сервису на узле 192.168.56.33. Удаленная система реагирует отправкой сегмента с установленным флагом RST (сброса соединения).

    Реакция tcpdump на отправку UDP-датаграммы на закрытый порт 53/udp:

    21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28) 21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp port 53 unreachable, length 64

    В данном примере сделана попытка отправить UDP-датаграмму на несуществующий порт удаленной системы. Протокол UDP обычно реагирует отправкой ICMP-сообщения исходному узлу о недостижимости порта.

    Другие примеры использования команды tcpdump:

    # tcpdump -n -i ppp0 ether src 11:20:b3:d8:d8:2c

    Вывод сетевой статистики с интерфейса ppp0 (-i ppp0) без преобразования IP в DNS (-n) тех фреймов, у которых MAC-адресом источника равен 11:20:b3:d8:d8:2c.

    # tcpdump -n -e -i vlan0 ether broadcast

    Вывод широковещательного трафика с интерфейса vlan0.

    # tcpdump -n -i eth0 src 192.168.66.1

    Фильтруются сетевые пакеты, в заголовке которых в поле источник указан IP-адрес192.168.66.1.

    # tcpdump -n -i eth0 host 192.168.66.1

    Фильтруются пакеты, в которых данный IP-адрес указан как источник или как получатель пакета.

    # tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

    Фильтруются пакеты, в которых источником указаны узлы сети 10.0.0.0/8.

    # tcpdump -n -i eth0 icmp

    Вывод только ICMP-пакетов с интерфейса eth0.

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

    В статье были использованы примеры и некоторые материалы лекций intuit .

    С Уважением, Mc.Sim!

    Довольно часто в системном администрировании возникают ситуации, для которых необходимо видеть подробную «картину» того, что происходит с передачей данных по сети. Проследить за трафиком и выявить проблемы в таких случаях позволяют утилиты-анализаторы пакетов. Одной из таких (и самой распространённой) является tcpdump – стандартный анализатор пакетов для Linux-систем.

    Кроме tcpdump существуют и другие инструменты для анализа сетевого трафика, например такие как Wireshark и Tshark, которые являются усовершенствованными версиями tcpdump, но стандартным и до сих пор эффективным остаётся утилита tcpdump. С её помощью можно перехватывать, фильтровать по определённому критерию, а также выводить пакеты. Нужно заметить, что для полноценного доступа к пакетам необходимо запускать tcpdump от имени суперпользователя, поскольку сами пакеты - это низкоуровневые объекты системы. Кроме этого существуют определённые условия, в зависимости от сетевого оборудования, которые позволяют (или не позволяют) перехватывать все или только определённые пакеты или предоставлять только определённую информацию о них. Сетевое оборудование (сетевая карта, маршрутизатор и т. д.) должны поддерживать/разрешать доступ к пакетам, т. е. иметь (или предоставлять) механизм для передачи сведений о пакетах на более высокий программный уровень и в этом случае tcpdump, как впрочем и другие анализаторы пакетов, оказываются максимально эффективными. Кстати, аппаратные интерфейсы, если они работают в режиме «promiscuous mode», т. е. в так называемом «беспорядочном» режиме, позволяют системному ядру «видеть» все пакеты, т. е. даже и те, что адресуются для других компьютеров и устройств.

    Принцип работы tcpdump

    Как уже отмечалось, tcpdump является стандартной утилитой для анализа сетевого трафика в дистрибутивах Linux. Автором утилиты является Ван Якобсон. За всё время своего применения tcpdump проявил себя как весьма эффективный и надёжный инструмент. Поэтому в настоящее время многие аналоги в качестве основного формата файлов для чтения/записи результатов трассировки трафика используют формат tcpdump – libcap.

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

    tcpdump опции

    Для задания нужного сетевого интерфейса следует использовать опцию -i. Если необходимо знать адреса устройств (компьютеров, оборудования), то нужно задавать опцию -n. Это также очень полезно при проблемах с DNS. Опция -r позволяет читать информацию о пакетах из файла. Когда необходимы более подробные сведения о пакетах - поможет опция -v. Также существует опция -w для фиксирования информации в файле. Следует отметить, что в случае использования опции -w в файл записывается информация только о заголовках пакетов. Опция -s со значением 1056 (хотя это значение зависит от размера MTU-пакета) позволяет (совместно с -w) писать в файл дополнительную информацию. Объёмы данных могут быть очень большими и сложными по своей структуре (несмотря на то, что это текст) и поэтому в дальнейшем для их обработки рекомендуется использовать соответствующие высокопроизводительные утилиты, например .

    Формат команды tcpdump следующий:

    tcpdump [-опции] [фильтры]

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

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

    Наиболее часто используемые ключи при запуске tcpdump приведены таблице

    ключ

    описание

    Преобразовывает сетевые и широковещательные адреса в доменные имена.

    Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров.

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

    Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию - eth0, для выбора всех интерфейсов - any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo.

    Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:

    shell# tcpdump -l | tee out.log //отобразит работу tcpdump и сохранит результат в файле out.log

    Не добавляет доменное расширение к именам узлов. Например tcpdump отобразит ‘net’ вместо ‘net.library.org’

    Отображает IP-адрес вместо имени хоста.

    Отображает номер порта вместо используемого им протокола.

    Не переводит интерфейс в режим приема всех пакетов (promiscuous mode).

    Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных.

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

    Позволяет не обрабатывать абсолютные порядковые номера (initial sequence number - ISN) в относительные.

    Количество байтов пакета, которые будет обрабатывать tcpdump. При установке большого числа отображаемых байтов информация может не уместиться на экране и её будет трудно изучать. В зависимости от того, какие цели вы преследуете, и следует выбирать значение этого параметра. По умолчанию tcpdump захватывает первые 68 байт (для SunOS минимум 96 байт), однако если вы хотите увидеть содержимое всего пакета, используйте значение в 1514 байт (максимально допустимый размер кадра в сети Ethernet).

    Не отображает метку времени в каждой строке.

    Интерпретация пакетов заданного типа. Поддерживаются типы aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb.

    Отображает неформатированную метку времени в каждой строке.

    Показывает время вместе с датой.

    Вывод подробной информации (TTL; ID; общая длина заголовка, а также его параметры; производит проверку контрольных сумм IP и ICMP-заголовков)

    Вывод ещё более полной информации, в основном касается NFS и SMB.

    Вывод максимально подробной информации.

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

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

    -x , но включает в себя заголовок канального уровня

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

    То же, что и предыдущий параметр -X , но включает заголовок канального уровня.

    tcpdump завершит работу после получения указанного числа пакетов.

    Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится

    Фильтры tcpdump

    Фильтры разделяются на следующие классификации

    host — адрес узла сети

    port – порт на котором нужно ловить пакеты

    portrange – диапазон портов

    net – сеть

    Tcpdump net 192.168.0.0/24

    захват всего трафика в котором в качестве источника или получателя стоят ip адреса из сети 192.168.0.0/24

    Tcpdump port 80

    Будет захватываться весь трафик на 80-м порту.

    Направление трафика по отношению к объекту мониторинга

    src – отправитель

    dst — получатель

    например команда

    Src host 172.31.25.200

    Захват трафика у которого отправитель ip адрес 172.31.25.200

    Протокол

    ether – базовая сетевая технология Ethernet, как правило указывает на то что в фильтре используется аппаратный MAC адрес

    ip – протокол IPv4

    ip6 – протокол IPv6

    arp – протокол ARP

    tcp – протокол TCP

    udp – протокол UDP

    Если протокол не указан, то будет захвачен трафик по все протоколам

    Например команда

    Udp port 5060

    захват трафика по протоколу udp порт 5060

    Составные фильтры

    Для того что бы более гибко фильтровать трафик можно использовать логические операции

    «И» – and (&&)

    «ИЛИ» – or (||)

    «НЕ» – not (!) – инверсия значения

    При этом приоритет этих операций следующий:

    наивысшим приоритетом обладает операция инверсии

    потом логическое «И»

    наименьшим приоритетом обладает операция «ИЛИ».

    Приоритет операций можно менять с помощью круглых скобок.

    (net 172.16.0.0/24 or host 172.31.0.5) and tcp port 80

    захват трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5, как любому хосту по отдельности так и вместе

    (net 172.16.0.0/24 || host 172.31.0.5) && not tcp port 80

    захват любого трафика кроме трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5 как любому хосту по отдельности так и вместе

    tcpdump linux примеры

    Запись вывода в файл

    $ sudo tcpdump -w sshtrace.tcpdump tcp port 22

    Файл sshtrace.tcpdump при этом будет по-умолчанию создан в домашнем каталоге текущего пользователя. Для вывода информации из файла myrouter.tcpdump следует использовать опцию -r:

    $ tcpdump -r sshtrace.tcpdump

    Снять весь трафик с интерфейса eth1

    $ tcpdump –i eth1

    Снять трафик с диапазона портов на интерфейсе eth1

    $ tcpdump -i eth1 portrange 100-200

    весь трафик, идущий к 172.16.0.1, который не является ICMP.

    tcpdump — мощный анализатор командной строки и Libpcap, портативная библиотека для захвата сетевого трафика. Tcpdump выводит описание содержимого пакетов на сетевом интерфейсе, которые соответствуют логическое выражение. Он также может быть запущен с ключом -w, который вызывает его, чтобы сохранить пакетные данные в файл для последующего анализа, и / или с -r флагом, который вызывает его для чтения из сохраненного файла пакета. С помощью этой утилиты можно перехватывать и так же анализировать сетевой трафик который проходит через ПК на котором запущенна данная программа.

    Хотелось бы поговорить в данной теме «установка и использование tcpdump» об установке tcpdump, а так же как им пользоваться и для чего он нужен.

    С помощью tcpdump можно:

    • Можно делать отладку сетевых приложений.
    • Можно производить отладку сети или сетевого оборудования в целом.

    Чтобы установить tcpdump на debian/ubuntu/linux mint нужно выполнить:

    # sudo apt-get install tcpdump

    Для того чтобы установить tcpdump на RedHat/CentOS/Fedora используйте:

    # sudo yum install tcpdump

    Для того чтобы установить tcpdump на MacOS используйте.

    # brew install tcpdump

    Использование tcpdump.

    Чтобы проверить работает ли у нас tcpdump можно выполнить команду:

    # tcpdump -i eth0 port 80

    Существует довольно много ключей для использования самой утилиты tcpdump, приведу список распространенных:

    Если нужно узнать какими пакетами обменивается 21 сервера (например your_server_1 и your_server_2), то для этого служит команда:

    # tcpdump host your_server_1 and your_server_2

    Если нужно отслеживать только исходящие пакеты из хоста, то выполните:

    # tcpdump src host your_server

    Если нужно отслеживать только входящие пакеты из хоста, то выполните:

    # tcpdump dst host your_server

    Так же можно прослушивать исходящие или входящие пакеты с сервера и по определенному порту для этого просто добавьте порт который нужно прослушивать (в основном используется 80, 8080).

    См. список интерфейсов, по которым tcpdumt можете слушать:

    # tcpdump -D

    Слушать интерфейс eth0:

    # tcpdump -i eth0

    Слушать на любом доступном интерфейсе (Требуется ядро Linux версии 2.2 или выше):

    # tcpdump -i any

    Вывод всего на экран (все что выполняется программой):

    # tcpdump -v

    Вывод много чего на экран (все что выполняется программой):

    # tcpdump -vv

    Вывод очень много всего на экран (все что выполняется программой):

    # tcpdump -vvv

    Выводить не сильно много информации когда идет захват пакетов (не как стандартный):

    # tcpdump -q

    Ограничить захват пакетов до 100:

    # tcpdump -c 100

    Записать все данные (перехваченные пакеты) в файл с именем capture.cap:

    # tcpdump -w capture.cap

    Записать все данные (перехваченные пакеты) в файл с именем capture.cap и вывести на экран в режиме реального времени:

    # tcpdump -v -w capture.cap

    Вывод пакетов с файла capture.cap:

    # tcpdump -r capture.cap

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

    # tcpdump -vvv -r capture.cap

    Вывод IP и порты вместо доменов идет захват пакетов:

    # tcpdump -n

    Захват любых пакетов, где хост назначения — 192.138.1.1. Вывод ИП и порты на экран:

    # tcpdump -n dst host 192.138.1.1

    # tcpdump -n src host 192.138.1.1

    Захват любых пакетов c хоста 192.138.1.1. Вывод ИП и порты на экран:

    # tcpdump -n host 192.138.1.1

    Захват пакетов где сеть 192.138.1.0/24. Вывод ИП и порты на экран:

    # tcpdump -n dst net 192.138.1.0/24

    # tcpdump -n src net 192.138.1.0/24

    Захват пакетов с сети 192.138.1.0/24. Вывод ИП и порты на экран:

    # tcpdump -n net 192.138.1.0/24

    Захват пакетов с порта 23. Вывод ИП и порты на экран:

    # tcpdump -n dst port 23

    Захват пакетов с портов 1 по 1023. Вывод ИП и порты на экран:

    # tcpdump -n dst portrange 1-1023

    Захватывать только TCP пакеты где destination на портах 1 по 1023. Вывод ИП и порты на экран:

    # tcpdump -n tcp dst portrange 1-1023

    Захватывать только UDP пакеты где destination на портах 1 по 1023. Вывод ИП и порты на экран:

    # tcpdump -n udp dst portrange 1-1023

    Захват пакетов с destination где ИП 192.138.1.1 и destination порт которого 23. Вывод на экран:

    # tcpdump -n "dst host 192.138.1.1 and dst port 23"

    Захват пакетов с destination где ИП 192.138.1.1 и destination по портам 80 или 443. Выводим на экран:

    # tcpdump -n "dst host 192.138.1.1 and (dst port 80 or dst port 443)"

    Захват любых ICMP пакетов:

    # tcpdump -v icmp

    Захват любых ARP пакетов:

    # tcpdump -v arp

    Захват любых ICMP или ARP пакетов:

    # tcpdump -v "icmp or arp"

    Захват любых пакетов которые broadcast или multicast:

    # tcpdump -n "broadcast or multicast"

    Захват больших пакетов (500 байт) а не стандартных 68б:

    # tcpdump -s 500

    Захват всех байт данных в пакете:

    # tcpdump -s 0

    Просмотр «тяжелых пакетов»:

    # tcpdump -nnvvXSs 1514

    Захват пакетов ICMP с ping и pong:

    # tcpdump -nnvXSs 0 -c2 icmp

    Вывод без многих вариантов:

    # tcpdump -nS

    Основные коммуникации (очень подробный режим), можно увидеть хороший объем трафика, с многословием:

    # tcpdump -nnvvS

    Глубокий взгляд на трафик, добавляет -X для полезной нагрузки:

    # tcpdump -nnvvXS

    Просмотр тяжелого пакета и увеличивает snaplength, захватывая весь пакет:

    # tcpdump -nnvvXSs 1514

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

    Показать мне все 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"

    Захват TCP Flags используя tcpflags:

    # tcpdump "tcp & & tcp-syn != 0"

    Пакеты с RST и SYN флагами (проверка):

    # tcpdump "tcp = 6"

    Траффик с ‘Evil Bit"(проверка):

    # tcpdump "ip & 128 != 0"

    На этом я завершу свою статью «установка и использование tcpdump», надеюсь все ясно и понятно.