Примеры tcpdump в Linux. Использование утилиты tcpdump Tcpdump как остановить через заданное время

Dec 19, 2011 By Henry Van Styn
in HOW-TOs

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

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

Если вы думаете, что утилиты, подобные tcpdump, утрачивают свое значение с появлением графических инструментов типа Wireshark, подумайте еще раз. Wireshark - отличное приложение, однако вовсе не универсальный инструмент абсолютно для всех ситуаций. В качестве универсального легковесного решения для различных применений (как например юниксовые инструменты cat, less и hexdump) tcpdump смотрится намного круче. И наиболее впечатляющая его особенность, это удобство использования. В качестве стиля поведения он следует приближению к концепции "команды в одну строку" для получения быстрых одноходовых ответов. Кроме того его можно применять в рамках ssh-сессии без нужды использования графики. Благодаря поддержке соглашений синтаксиса командной строки (например, выдача выходного потока данных на стандартный вывод, который можно перенаправить) tcpdump может быть использован во всех типах конвейеров для построения интересных и полезных утилит.

В настоящей статье я рассмотрю некоторые базовые принципы использования tcpdump и основы его синтаксиса.

Основы

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

Поскольку предполагается, что вы интересуетесь бОльшим, чем только пакеты для вашей системы, tcpdump переведет первый интерфейс в системе (если прямо не указан другой) в беспорядочный режим автоматически. Эта операция требует привилегий суперпользователя.

Анатомия команд tcpdump

Команда tcpdump состоит из двух частей: опций и выражения для фильтра (Figure 1).

Figure 1. Example tcpdump Command

Выражение для фильтра определяет, какие пакеты захватывать, а опции - какие из них показывать в выводе, также опции отвечают за поведение утилиты.

Опции

Опции tcpdump следуют стандартным соглашениям командной строки, поэтому формат опций - флаг-значение. Некоторые флаги не имеют значения параметра, потому что сами являются переключателями. Например, за -i следует имя интерфейса, а -n выключает разрешение имен через DNS.

Страница руководства man описывает множество опций, но есть некоторое множество их, без которых не обойтись:

I interface: интерфейс, на котором tcpdump будет прослушивать трафик;

V, -vv, -vvv: многословность вывода;

Q: тихий режим;

E: печатать заголовки кадров канального уровня (Ethernet);

N: разрешать доменные имена хостов;

T: не печатать временнЫе метки;

N: не разрешать доменные имена хостов;

S0 (or -s 0): максимальный захват, пакеты захватываются целиком; в последних версиях tcpdump это поведение по умолчанию.

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

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

Синтаксис пакетного фильтра мощный и прозрачный. В начале он содержит ключевые слова, называемые "примитивы", которые представляют собой различные классификаторы для пакетов, это могут быть протокол, адрес, порт или направление. Они могут быть соединены между собой в цепочки с помощью операторов и/или, сгруппированы и объединены правилами наследования, отсортированы с помощью отрицания.

Благодаря говорящим именам критериев, выражения для фильтров обычно выглядят как "самообъясняющие" свою суть конструкции, из-за этого их довольно легко конструировать и понимать. Полностью синтаксис описан в man-странице pcap-filter, здесь же представлены некоторые примеры:

ARP - простой протокол, он используется для разрешения IP-адресов в MAC-адреса сетевых карт. Как можно видеть выше, tcpdump описывает эти пакеты в довольно-таки примитивной манере. Пакеты DNS, с другой стороны, будут описаны несколько по-другому:

IP 10.0.0.2.50435 > 10.0.0.1.53: 19+ A? linuxjournal.com. (34) IP 10.0.0.1.53 > 10.0.0.2.50435: 19 1/0/0 A 76.74.252.198 (50)

Поначалу это может показаться недостаточно ясным, но по мере изучения того, как работают протоколы различных уровней, наполнится смыслом. DNS намного более сложный протокол, чем ARP, но кроме этого он работает на более высоком уровне. Это означает, что пакеты нижележащих протоколов также отображаются в выводе. В отличие от ARP, который не маршрутизируется между различными физическими сегментами сети, DNS это протокол для всего Интернета. Для маршрутизации этих пакетов используется уровень IP, для транспорта задействован UDP. Это делает DNS протоколом пятого уровня (IP - третий уровень, UDP - четвертый).

Информация уровней UDP/IP, содержащая адрес и порт источника, отображается в левой стороне строки, специфическая DNS-информация - в правой. Несмотря на то, что синтаксис довольно сжатый, он достаточен для определения базовых элементов DNS. Первый пакет есть запрос адреса для linuxjournal.com, второй пакет - это ответ, дающий адрес 76.74.252.198. Это типичная последовательность для простых DNS-запросов.

Просмотрите секцию "OUTPUT FORMAT" справки man для tcpdump для полного описания всех протокол-зависимых форматов вывода. Пакеты некоторых протоколов видны в выводе лучше, другие хуже, но важная информация обычно находится легко.

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

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

Анализ протоколов на основе TCP
tcpdump - это пакетный анализатор, поэтому он хорошо работает с протоколами, основанными на работе с отдельным пакетом, например, IP, UDP, DHCP, DNS и ICMP. Если же есть некий "поток", или последовательность пакетов для установления соединения, tcpdump не сможет напрямую анализировать эти потоки и сценарии соединений. Такие протоколы, как HTTP, SMTP и IMAP с точки зрения сетевого взаимодействия гораздо больше похожи на интерактивные приложения, чем "пакетные" протоколы.

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

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

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

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

Кроме того, вы должны понимать, что в выводе может содержаться некоторое количество мусора. Лишнее можно отрезать с помощью опции утилиты strings, которая ограничивает длину вывода строки (смотри man strings).

Этот трюк довольно хорошо работает для любых протоколов, основанных на тексте.

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

Например, вам вздумалось проверить доступность всех сайтов, в имени которых есть "davepc", в реальном времени. Поможет такая команда, запущенная на файерволе (подразумевается, что внутренний интерфейс eth1):

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

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

Отладка маршрутизации и соединений VPN
tcpdump может здорово помочь при отладке таких вещей, как соединения VPN. Все, что нужно, это понять, на каких хостах какие пакеты появляются, на каких нет.

Возьмем стандартную схему соединения двух сетей через VPN-соединение. Сети 10.0.50.0/24 и 192.168.5.0/24 (Figure 2).

Figure 2. Example VPN Topology

Если это работает правильно, хосты из разных сетей должны пинговать друг друга. Если же ответы на пинги не приходят (в данном случае предположим, что они не приходят от D к хосту А), мы можем использовать tcpdump для обнаружения, где чего теряется.

Если пакеты запроса идут на хост С (удаленный шлюз), но не на D, это показывает, что само соединение VPN работает, но имеются проблемы маршрутизации. Если хост D получает запросы, но не оправляет ответы, это может означать, что протокол ICMP заблокирован. Если же ответы отправляются, но не доходят до С, возможно на D неправильно настроен шлюз по умолчанию.

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», надеюсь все ясно и понятно.

ПОЧЕМУ 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 – стандартный анализатор пакетов для 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 также называется анализатором пакетов.

    Команда 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]}