tcpdump

tcpdump — полезное руководство с примерами

ПОЧЕМУ TCPDUMP?

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

 

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

 

ОСНОВЫ

Ниже приведены несколько параметров, которые можно использовать при настройке 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'

 

Заключение

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

Спасибо за уделенное время на прочтение статьи!

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

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.

 

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
Сети Linux

Больше похожих постов

Установка и настройка Firewalld

Установка и настройка Firewalld

797
0
Firewalld — динамически управляемый брандмауэр с поддержкой зон сети, который определяет уровень доверия сетевых подключений или интерфейсов. Он поддерживает IPv4,…

1 комментарий. Оставить новый

  • Спасибо большое за статью. Есть вопрос как можно определить сетевых приложений по характеристикам сетевтго трафика? По номеру порта это только работает если приложения использует статичечкий порт. Жду вашего ответа. Заранее спасибо!

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню