TimVin

ОСНОВЫ

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

ОПЦИИ

  • -D: Показывать список всех доступных интерфейсов.
  • -i eth0: прослушивать конкретный интерфейс (eth0).
  • -i any: прослушивать все интерфейсы, чтобы увидеть, есть ли какой то трафик.
  • -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 байтов. Хотя это даст вам увидеть больше информации о пакете, но это все равно будет не вся информация. Используйте -s 1514 или -s 0, чтобы получить полный охват.

ВЫРАЖЕНИЯ

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

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

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

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

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

ПРИМЕРЫ

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

Чтобы увидеть все пакеты просто посмотрите на все интерфейсы.

# tcpdump -i any

Чтобы увидеть, что происходит на конкретном интерфейсе.

# tcpdump -i eth0

Чтобы увидеть трафик из 192.168.0.100, будь то источник или место назначения.

# tcpdump host 192.168.0.100

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

# tcpdump -ttttnnvvS

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

# 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 [none], 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 192.168.0.100
tcpdump dst 192.168.0.100

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

# tcpdump net 192.168.0.100/24

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

# tcpdump port 8000
tcpdump src port 8080

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

# tcpdump icmp

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

# tcpdump ip6

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

# tcpdump portrange 8000-9000

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

# tcpdump less 32
tcpdump greater 64
tcpdump <= 128

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

# tcpdump port 8000 -w capture_file

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

# tcpdump -r capture_file

РАСШИРЕННЫЙ ПРОСМОТР

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

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

AND
and или &&

OR
or или ||

EXCEPT
not или !

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

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

tcpdump -nnvvS src 192.168.0.1 and dst port 8000

Давайте посмотрим на весь трафик, идущий от 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 or 172.16.0.0/16

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

tcpdump dst 192.168.0.2 and src net and not icmp

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

tcpdump -vv src mars and not dst port 22

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

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

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

tcpdump src 10.0.2.4 and (dst port 3389 or 22)

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

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

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

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

# tcpdump 'tcp[13] & 32!=0'

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

# tcpdump 'tcp[13] & 16!=0'

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

# tcpdump 'tcp[13] & 8!=0'

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

# tcpdump 'tcp[13] & 4!=0'

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

# tcpdump 'tcp[13] & 2!=0'

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

# tcpdump 'tcp[13] & 1!=0'

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

# tcpdump 'tcp[13]=18'

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

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

# tcpdump 'tcp[tcpflags] == tcp-syn'

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

# tcpdump 'tcp[tcpflags] == tcp-rst'

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

# tcpdump 'tcp[tcpflags] == tcp-fin'

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

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

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

ПАКЕТЫ С ОБЫЧНЫМИ КОМПЛЕКТАМИ RST И SYN (Которых не должно быть)

# tcpdump 'tcp[13] = 6'

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

# tcpdump 'tcp[32:4] = 0x47455420'

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

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

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

# tcpdump 'ip[8] < 10'

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

# tcpdump 'ip[6] & 128 != 0'
Рубрики: Linux