Tcpdump s0 что значит
Как пользоваться tcpdump
Tcpdump ничем не хуже Wireshark, и имеет все необходимые возможности для анализа пакетов, к тому же вы можете сохранить все перехваченные пакеты в файл, чтобы анализировать их потом с помощью того же самого Wireshark. В этой статье мы рассмотрим как пользоваться tcpdump для перехвата сетевых пакетов.
Установка tcpdump
Во многих дистрибутивах команда tcpdump поставляется по умолчанию, но если в вашем дистрибутиве ее нет, то вы можете очень просто ее установить из официальных репозиториев. Например, в Ubuntu/Debian:
sudo apt install tcpdum p
В Fedora/Red Hat/CentOS:
sudo yum install tcpdump
Когда установка завершится, вы можете переходить к работе.
Команда tcpdump
Перед тем как перейти к примерам работы с утилитой, давайте рассмотрим ее синтаксис и основные опции. Команда имеет такой синтаксис:
При вызове обязательно нужно передать интерфейс, который будете отслеживать. Если интерфейс не указать, то будет использован первый в списке. Опции настраивают отображение и основные возможности утилиты, а фильтры позволяют отсеять ненужные пакеты. А теперь рассмотрим основные опции:
Это не все опции, но их вам будет вполне достаточно для решения большинства задач. Чаще мы будем применять фильтры. С помощью фильтров вы можете отсеивать только те типы пакетов, которые хотите видеть. Вы можете фильтровать по ip адресу, протоколу, сети, интерфейсу и многим другим параметрам. Но фильтры tcpdump мы будем рассматривать уже на примерах.
Как пользоваться tcpdump
Начнем рассматривать примеры tcpdump с захвата трафика на интерфейсе eth0, у меня это основной интерфейс, который подключен к интернету. Для работы программе необходимы права суперпользователя, поэтому не забудьте указать sudo:
Чтобы остановить работу команды нажмите Ctrl+C. В выводе вы сразу же увидите все перехваченные пакеты. Формат записи для каждого пакета будет выглядеть следующим образом:
13:03:41.795599 IP udp032919uds.hawaiiantel.net.6881 > 192.168.1.2.52055 : Flags [.], seq 640160396:640161844, ack 436677393, win 2050, options [nop,nop,TS val 3805626438 ecr 4677385], length 1448
Здесь уже появляется информация о протоколе IP:
После опций вы можете указывать фильтры для пакетов. Вот основные параметры, по которым можно отсеивать пакеты:
Вы можете все это комбинировать между собой, чтобы получить желаемый результат. Рассмотрим более детально на примерах. Отсеем только пакеты, адресованные нашему компьютеру:
Также мы можем отобрать пакеты, отправляемые на определенный узел:
Как видите, это DNS пакеты и здесь вместо флагов TCP содержится полезная информация, запрос ip адреса хоста. Также вы можете выбрать ответные пакеты от определенного хоста:
С помощью оператора and вы можете объединить несколько фильтров в один:
Из операций объедения доступны and и or, также можно применять скобки для обозначения приоритета. Вам необязательно указывать host, во многих случаях достаточно src или dst, утилита сама поймет что имелось в виду. Точно такую же конструкцию можно использовать для портов. Например, мы можем отсеять все запросы или ответы к DNS (на порт 53):
Точно такое же можно провернуть для http (порт 80):
Естественно, тут тоже можно применять dst и src для более конкретных результатов. Вы можете фильтровать не один порт, а целый диапазон портов:
sudo tcpdump portrange 21-23
Если указать один из протоколов, вы отфильтруете только пакеты этого протокола, например tcp, udp или arp:
Точно также можно выбрать все udp пакеты:
Также доступен фильтр по обозначению сети:
sudo tcpdump net 129.168.1.1/24
Кроме того, вы можете фильтровать пакеты по их размеру, например, меньше 32 байт:
sudo tcpdump less 32
tcpdump greater 128
Выводы
В этой статье мы рассмотрели как пользоваться tcpdump. Это очень мощный сетевой анализатор, который работает только через командную строку. Надеюсь, эта информация была полезной для вас и теперь использование tcpdump будет намного проще, если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео с лекцией о tcpdump:
Утилита tcpdump, примеры опции фильтры
Довольно часто в системном администрировании возникают ситуации, для которых необходимо видеть подробную «картину» того, что происходит с передачей данных по сети. Проследить за трафиком и выявить проблемы в таких случаях позволяют утилиты-анализаторы пакетов. Одной из таких (и самой распространённой) является tcpdump – стандартный анализатор пакетов для Linux-систем.
Кроме tcpdump существуют и другие инструменты для анализа сетевого трафика, например такие как Wireshark и Tshark, которые являются усовершенствованными версиями tcpdump, но стандартным и до сих пор эффективным остаётся утилита tcpdump. С её помощью можно перехватывать, фильтровать по определённому критерию, а также выводить пакеты. Нужно заметить, что для полноценного доступа к пакетам необходимо запускать tcpdump от имени суперпользователя, поскольку сами пакеты — это низкоуровневые объекты системы. Кроме этого существуют определённые условия, в зависимости от сетевого оборудования, которые позволяют (или не позволяют) перехватывать все или только определённые пакеты или предоставлять только определённую информацию о них. Сетевое оборудование (сетевая карта, маршрутизатор и т. д.) должны поддерживать/разрешать доступ к пакетам, т. е. иметь (или предоставлять) механизм для передачи сведений о пакетах на более высокий программный уровень и в этом случае tcpdump, как впрочем и другие анализаторы пакетов, оказываются максимально эффективными. Кстати, аппаратные интерфейсы, если они работают в режиме «promiscuous mode», т. е. в так называемом «беспорядочном» режиме, позволяют системному ядру «видеть» все пакеты, т. е. даже и те, что адресуются для других компьютеров и устройств.
Принцип работы tcpdump
Как уже отмечалось, tcpdump является стандартной утилитой для анализа сетевого трафика в дистрибутивах Linux. Автором утилиты является Ван Якобсон. За всё время своего применения tcpdump проявил себя как весьма эффективный и надёжный инструмент. Поэтому в настоящее время многие аналоги в качестве основного формата файлов для чтения/записи результатов трассировки трафика используют формат tcpdump – libcap.
При запуске tcpdump автоматически производит поиск сетевых интерфейсов и для анализа использует первый найденный. Поэтому нужно обращать внимание на вывод, чтобы удостовериться, что анализируется нужный интерфейс. В противном случае легко вручную задать использование нужного интерфейса. Утилита умеет работать в режиме, который очень полезен при неработоспособной или слишком медленной службе DNS, т. е. когда есть риск потери пакетов до того как их сможет проанализировать tcpdump.
tcpdump опции
Формат команды tcpdump следующий:
tcpdump [-опции] [фильтры]
В официальной документации (команда man tcpdump) можно найти несколько примеров использования этой утилиты для разных случаев с применением довольно разнообразных и сложных фильтров.
Важно заметить также, что tcpdump (да и вообще все анализаторы пакетов) при своей работе могут генерировать огромные массивы информации и сильно загружать работу сети, вплоть до отказов в её работе. Поэтому при анализе трафика следует применять рациональный подход — в зависимости от ситуации и условий задачи (или проблемы) использовать фильтры, тем более, что это является очень эффективной частью функционала tcpdump.
Наиболее часто используемые ключи при запуске tcpdump приведены таблице
ключ
описание
Преобразовывает сетевые и широковещательные адреса в доменные имена.
Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров.
Использовать фильтр, находящийся в файле. Если вы используете этот параметр, фильтр из командной строки будет игнорироваться.
Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию — eth0, для выбора всех интерфейсов — any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo.
Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:
Не добавляет доменное расширение к именам узлов. Например tcpdump отобразит ‘net’ вместо ‘net.library.org’
Отображает IP-адрес вместо имени хоста.
Отображает номер порта вместо используемого им протокола.
Не переводит интерфейс в режим приема всех пакетов (promiscuous mode).
Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных.
Позволяет не обрабатывать абсолютные порядковые номера (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.
Вывод максимально подробной информации.
То же, что и предыдущий параметр -x, но включает в себя заголовок канального уровня
Выводит пакет в ASCII- и hex-формате. Полезно в случае анализа инцидента связанного со взломом, так как позволяет просмотреть какая текстовая информация передавалась во время соединения.
То же, что и предыдущий параметр -X, но включает заголовок канального уровня.
tcpdump завершит работу после получения указанного числа пакетов.
Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится
Фильтры tcpdump
Фильтры разделяются на следующие классификации
host— адрес узла сети
port – порт на котором нужно ловить пакеты
portrange – диапазон портов
net – сеть
захват всего трафика в котором в качестве источника или получателя стоят ip адреса из сети 192.168.0.0/24
Будет захватываться весь трафик на 80-м порту.
Направление трафика по отношению к объекту мониторинга
src – отправитель
dst — получатель
Захват трафика у которого отправитель ip адрес 172.31.25.200
ether – базовая сетевая технология Ethernet, как правило указывает на то что в фильтре используется аппаратный MAC адрес
ip – протокол IPv4
ip6 – протокол IPv6
arp – протокол ARP
tcp – протокол TCP
udp – протокол UDP
Если протокол не указан, то будет захвачен трафик по все протоколам
захват трафика по протоколу udp порт 5060
Составные фильтры
Для того что бы более гибко фильтровать трафик можно использовать логические операции
«НЕ» – not (!) – инверсия значения
При этом приоритет этих операций следующий:
наивысшим приоритетом обладает операция инверсии
потом логическое «И»
наименьшим приоритетом обладает операция «ИЛИ».
Приоритет операций можно менять с помощью круглых скобок.
захват трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5, как любому хосту по отдельности так и вместе
захват любого трафика кроме трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5 как любому хосту по отдельности так и вместе
tcpdump linux примеры
Запись вывода в файл
Снять весь трафик с интерфейса eth1
Снять трафик с диапазона портов на интерфейсе eth1
весь трафик, идущий к 172.16.0.1, который не является ICMP.
Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Используем tcpdump для анализа и перехвата сетевого трафика
Утилита tcpdump — отличный инструмент командной, который способен перехватывать и анализировать сетевой трафик. Может оказаться большим подспорьем при решении сетевых проблем. Пакеты можно сохранить в файл и анализировать позже. Рекомендуется время от времени запускать эту утилиту, чтобы следить за своей сетью.
Вывод tcpdump
Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.
Давайте рассмотрим одну строку из примера вывода:
Каждая строка включает:
Установка tcpdump
В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:
В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:
В RHEL 8 с использование DNF:
Опции tcpdump
Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.
Вывести список доступных системе сетевых интерфейсов, в которых tcpdump может захватывать пакеты:
Очень полезно для систем, в которых нет команды для вывода списка интерфейсов.
По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.
Фильтры tcpdump
Фильтр выражений
Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.
Самые распространенные фильтры :
Фильтр портов
Фильт портов используется для просмотра пакетов, поступающих на определенный порт:
Фильтр хостов
Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:
Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth1:
Комбинирование фильтров
Фильтры можно комбинировать с помощью операторов:
Это позволит писать команды, которые могут более точно изолировать пакеты. Например, пакеты с определенного IP-адреса и для определенного порта:
Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:
Сохранение заголовков в файл
Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.
Следующая команда сохраняет 10 строк вывода интерфейса eth1 в icmp.pcap.
Прочитать этот файл можно с помощью опции -r
Просмотр сведений о пакете
Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.
С помощью опции -X можно отобразить вывод в шестнадцатеричном формате, правда, это не сильно помогает в тех случаях, когда соединение зашифровано.
Вывод
Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:
После чего tcpdump станет отличным помощником в вопросах обеспечения безопасности вашей сети.
Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
Введение
Очень часто для поиска проблем в работе сети используются анализаторы сетевого трафика. tcpdump является одним из представителей данного класса программ, она позволяет прослушать (отобразить/сохранить) и проанализировать работу сети на уровне передаваемых сетевых пакетов, фреймов и др. единиц передачи сетевого трафика. В зависимости от конфигурации сети, tcpdump может прослушивать не только пакеты, предназначенные данному MAC-адресу, но и широковещательные пакеты. Прослушивание перехват сетевых пакетов основан на «беспорядочном» (promiscuous) режиме работы сетевого адаптера.
В зависимости от используемого сетевого оборудования для соединения компьютеров в сети Ethernet существуют следующие возможности прослушивания трафика:
Опции утилиты tcpdump
Включает вывод данных канального уровня (например, MAC-адреса).
Вывод дополнительной информации (TTL, опции IP).
Задать имя файла, в который сохранять собранную информацию.
Чтение дампа из заданного файла.
Переводит tcpdump в «бесшумный режим», в котором пакет анализируется на транспортном уровне (протоколы TCP, UDP, ICMP), а не на сетевом (протокол IP).
Отключает вывод меток времени.
Фильтрующие выражения tcpdump
В команде tcpdump возможно задать фильтрующее правило. Фильтрующее выражение состоит из параметра отбора пакетов и значения задаваемого параметра. Например, команда
Фильтрующие выражения можно комбинировать между собой с помощью дополнительных операторов and, or и not. C помощью этих операторов можно строить довольно сложные логические конструкции, группируя параметры в скобки. Например, команда:
ограничит отображение только пакетами отправленные на хост 10.0.0.5 по протоколу DNS (порт 53).
Наиболее часто используемые фильтрующие параметры команды tcpdump:
Проверяет, совпадает ли адрес получателя IP-пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
Проверяет, совпадает ли адрес отправителя IP пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
Проверяет, совпадает ли адрес отправителя или получателя с заданным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
Проверяется, находится ли адрес отправителя/получателя в заданной сети. Возможно указание сети в формате CIDR (например 10.0.0.1/22), либо указание имени сети, заданной в файле /etc/networks.
ip | arp | rarp | tcp | udp | icmp [хост]
Проверяет, принадлежит ли пакет одному из указанных протоколов и при указании адреса хоста проверяет, совпадает ли адрес отправителя\получателя с заданным. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.
[tcp | udp] dst port номер_порта
Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.
[tcp | udp] src port номер_порта
Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт источника заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.
[tcp | udp] port номер_порта
Проверяется, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения или источника заданному. Можно указать номер порта, либо имя, заданное в файле /etc/services.
Проверяется, является ли IP пакет широковещательным.
Проверяется, принадлежит ли сетевой пакет источнику, назначению, источнику или назначению имеющему заданный MAC_адрес.
Проверяется, является ли ARP-пакет широковещательным.
Примеры использования команды tcpdump
Анализ трафика на сетевом уровне (ARP, ICMP) с помощью tcpdump
Предположим, у нас имеется 2 хоста. Хост 1 с интерфейсом eth0 и следующими параметрами:
А так же хост2 с интерфейсом eth1
Предположим, что до текущего момента сетевого обмена данными между хостами не происходило и если на хосте 2 запустить команду ip neigh show, то будет видно что в ARP-таблице нет записей. Проведем маленький эксперимент. Запустим на одном из виртуальных интерфейсов host1 утилиту tcpdump:
Далее запустим ping машины host2 с машины host1:
После этого в ARP-таблице системы host1 появилась запись об IP-адресе машины host2:
На виртуальной консоли tcpdump нам отобразил следующую информацию:
Каждая запись о сетевом пакете в таком формате содержит время перехвата пакета, 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 была прервана комбинацией клавиш Ctrl+C. Перед завершением работы tcpdump печатает статистику работы: количество перехваченных, полученных фильтром и отброшенных ядром пакетов
Таким образом, система host1 для того, чтобы отправить стандартный эхо-запрос машине host2, предварительно по протоколу ARP получила MAC-адреса машины host2 и внесла его с привязкой к IP-адресу в свою ARP-таблицу.
Анализ трафика на транспортном уровне (TCP, UDP) с помощью tcpdump
Предположим на системе host2 установлен некий WEB-сервер. Попробуем на машине host1 открыть страницу с этого web-сервера с помощью консольного браузера lynx:
На другой консоли предварительно запустим tcpdump с фильтрующими параметрами:
В данном примере клиент (192.168.56.1) c TCP-порта 41533 устанавливает соединение с сервером (192.168.56.33), слушающим на порту 80, делает запрос, получает необходимые данные и соединение завершается.
Заголовок TCP-сегмента, помимо номеров портов получателя и отправителя содержит ряд параметров:
Процесс установления двунаправленного соединения по протоколу TCP отражают первые три записи tcpdump:
После этого соединение считается установленным.
В следующей паре записей клиент передает в секции данных сегмента серверу запрос протокола прикладного уровня (221 байт) и получает от сервера подтверждение его получения:
При этом флаг PSH (P) используется для оповещения отправляющей стороны о том, что принимающая готова принимать данные. Далее сервер отправляет данные клиенту (445 байт) и получает от него подтверждение получения:
Затем по инициативе сервера соединение завершается. Сервер шлет пакет с установленным флагом FIN:
Клиент в ответ также отправляет пакет с установленным флагом FIN, данный пакет одновременно является подтверждением получения запроса на завершение соединения от сервера:
Серверу остается лишь подтвердить получение FIN-сегмента от клиента:
Реакция tcpdump на попытку подключения к закрытому порту 23/tcp:
В данном примере с системы 192.168.56.1 делается попытка подключится к несуществующему TCP-сервису на узле 192.168.56.33. Удаленная система реагирует отправкой сегмента с установленным флагом RST (сброса соединения).
Реакция tcpdump на отправку UDP-датаграммы на закрытый порт 53/udp:
В данном примере сделана попытка отправить UDP-датаграмму на несуществующий порт удаленной системы. Протокол UDP обычно реагирует отправкой ICMP-сообщения исходному узлу о недостижимости порта.
Другие примеры использования команды tcpdump:
Вывод сетевой статистики с интерфейса ppp0 (-i ppp0) без преобразования IP в DNS (-n) тех фреймов, у которых MAC-адресом источника равен 11:20:b3:d8:d8:2c.
Вывод широковещательного трафика с интерфейса vlan0.
Фильтруются сетевые пакеты, в заголовке которых в поле источник указан IP-адрес192.168.66.1.
Фильтруются пакеты, в которых данный IP-адрес указан как источник или как получатель пакета.
Фильтруются пакеты, в которых источником указаны узлы сети 10.0.0.0/8.
Вывод только ICMP-пакетов с интерфейса eth0.
На этом, пожалуй, закончу текущую статью. По мере появления новых примеров буду дополнять статью. Надеюсь, что материал будет полезен не только мне