- Как пользоваться tcpdump
- Установка tcpdump
- Команда tcpdump
- Как пользоваться tcpdump
- Выводы
- Используем tcpdump для анализа и перехвата сетевого трафика
- Вывод tcpdump
- Установка tcpdump
- Опции tcpdump
- Фильтры tcpdump
- Фильтр выражений
- Фильтр портов
- Фильтр хостов
- Комбинирование фильтров
- Сохранение заголовков в файл
- Просмотр сведений о пакете
- Вывод
Как пользоваться tcpdump
Утилита tcpdump — это очень мощный и популярный инструмент для перехвата и анализа сетевых пакетов. Она позволяет просматривать все входящие и исходящие из определенного интерфейса пакеты и работает в командной строке. Конечно, вы могли бы пользоваться Wirshark для анализа сетевых пакетов, это графическая утилита, но иногда бывают ситуации когда нужно работать только в терминале.
Tcpdump ничем не хуже Wireshark, и имеет все необходимые возможности для анализа пакетов, к тому же вы можете сохранить все перехваченные пакеты в файл, чтобы анализировать их потом с помощью того же самого Wireshark. В этой статье мы рассмотрим как пользоваться tcpdump для перехвата сетевых пакетов.
Установка tcpdump
Во многих дистрибутивах команда tcpdump поставляется по умолчанию, но если в вашем дистрибутиве ее нет, то вы можете очень просто ее установить из официальных репозиториев. Например, в Ubuntu/Debian:
sudo apt install tcpdum p
В Fedora/Red Hat/CentOS:
sudo yum install tcpdump
Когда установка завершится, вы можете переходить к работе.
Команда tcpdump
Перед тем как перейти к примерам работы с утилитой, давайте рассмотрим ее синтаксис и основные опции. Команда имеет такой синтаксис:
$ tcpdump опции -i интерфейс фильтры
При вызове обязательно нужно передать интерфейс, который будете отслеживать. Если интерфейс не указать, то будет использован первый в списке. Опции настраивают отображение и основные возможности утилиты, а фильтры позволяют отсеять ненужные пакеты. А теперь рассмотрим основные опции:
- -A — выводить все пакеты в формате ASCII;
- -c — закрыть программу после перехвата n-ого количества пакетов;
- -C — при записи пакетов в файл, проверять размер файла, и если он больше заданного — создать новый файл;
- -D — вывести список доступных сетевых интерфейсов;
- -e — выводить информацию уровня соединения для каждого пакета, это может быть полезно, например, для отображения MAC адреса;
- -f — выводить доменное имя для ip адресов;
- -F — читать пакеты из файла, а не интерфейса;
- -G — создавать новый файл лога через указанный промежуток времени;
- -H — обнаруживать заголовки 802.11s;
- -i — имя интерфейса для перехвата пакетов. Вы можете захватывать пакеты со всех интерфейсов, для этого укажите any;
- -I — переключить интерфейс в режим монитора для захвата всех проходящих пакетов;
- -j — установить формат Timestamp для записи пакетов;
- -J — посмотреть доступные Timestamp;
- -K — не проверять контрольные суммы пакетов;
- -l — добавить поддержку прокрутки к выводу;
- -L — вывести поддерживаемые протоколы подключения для интерфейса;
- -n — не отображать доменные имена;
- -r — прочитать пакеты из файла, созданного с помощью -w;
- -v, -vv, -vvv — более подробный вывод;
- -q — выводить минимум информации;
- -w — записать вывод в файл;
- -Z — пользователь, от имени которого будут создаваться файлы.
Это не все опции, но их вам будет вполне достаточно для решения большинства задач. Чаще мы будем применять фильтры. С помощью фильтров вы можете отсеивать только те типы пакетов, которые хотите видеть. Вы можете фильтровать по ip адресу, протоколу, сети, интерфейсу и многим другим параметрам. Но фильтры tcpdump мы будем рассматривать уже на примерах.
Как пользоваться tcpdump
Перед тем как перейти к использованию tcpdump нужно посмотреть какие сетевые интерфейсы вы можете использовать. Для этого запустите команду с опцией -D:
Начнем рассматривать примеры tcpdump с захвата трафика на интерфейсе eth0, у меня это основной интерфейс, который подключен к интернету. Для работы программе необходимы права суперпользователя, поэтому не забудьте указать sudo:
sudo tcpdump -i eth0
Чтобы остановить работу команды нажмите 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 адрес отправителя, а синим адрес адресата, в данном случае, нашего компьютера. Дальше идут дополнительные параметры tcp и в конце размер пакета в байтах. Подробность вывода информации можно контролировать с помощью опций -v, Например:
sudo tcpdump -v -i eth0
Здесь уже появляется информация о протоколе IP:
IP (tos 0x0, ttl 64 , id 50309, offset 0, flags [DF], proto TCP (6) , length 64)
Мы можем узнать информацию о времени жизни пакета ttl, версию протокола TCP и длину поля заголовка. Опция -vv будет выводить проверку контрольных сумм пакета и содержимое в некоторых случаях.
После опций вы можете указывать фильтры для пакетов. Вот основные параметры, по которым можно отсеивать пакеты:
- host — имя хоста;
- ip — ip адрес;
- proto — протокол;
- net — адрес сети или подсети;
- port — адрес порта;
- src — параметр, касающийся отправителя;
- dst — параметр, касающейся получателя;
- Доступны такие протоколы: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp и udp.
Вы можете все это комбинировать между собой, чтобы получить желаемый результат. Рассмотрим более детально на примерах. Отсеем только пакеты, адресованные нашему компьютеру:
sudo tcpdump -i eth0 ip dst 192.168.1.2
Также мы можем отобрать пакеты, отправляемые на определенный узел:
sudo tcpdump -i eth0 dst host google-public-dns-a.google.com
Как видите, это DNS пакеты и здесь вместо флагов TCP содержится полезная информация, запрос ip адреса хоста. Также вы можете выбрать ответные пакеты от определенного хоста:
sudo tcpdump -i eth0 src host google-public-dns-a.google.com
Здесь нет полного содержимого пакета, если вы хотите его получить нужно использовать опцию -v или -vv:
sudo tcpdump -vv -i eth0 host dst google-public-dns-a.google.com
С помощью оператора and вы можете объединить несколько фильтров в один:
sudo tcpdump -i eth0 dst host google-public-dns-a.google.com and src host google-public-dns-a.google.com
Из операций объедения доступны and и or, также можно применять скобки для обозначения приоритета. Вам необязательно указывать host, во многих случаях достаточно src или dst, утилита сама поймет что имелось в виду. Точно такую же конструкцию можно использовать для портов. Например, мы можем отсеять все запросы или ответы к DNS (на порт 53):
sudo tcpdump -vv -i eth0 port 53
Точно такое же можно провернуть для http (порт 80):
sudo tcpdump -vv -i eth0 port 80
Естественно, тут тоже можно применять dst и src для более конкретных результатов. Вы можете фильтровать не один порт, а целый диапазон портов:
sudo tcpdump portrange 21-23
Если указать один из протоколов, вы отфильтруете только пакеты этого протокола, например tcp, udp или arp:
sudo tcpdump -vv arp
Точно также можно выбрать все udp пакеты:
sudo tcpdump -vv udp
Также доступен фильтр по обозначению сети:
sudo tcpdump net 129.168.1.1/24
Кроме того, вы можете фильтровать пакеты по их размеру, например, меньше 32 байт:
sudo tcpdump less 32
tcpdump greater 128
Иногда бывает необходимо сохранить захваченный трафик в файл, для этого используется опция -w:
sudo tcpdump -i eth0 -w file.pcap
Этот файл можно открыть с помощью любой программы для чтения таких файлов, например, Wireshark. Чтобы открыть сохраненные в файл пакеты используйте опцию -r:
sudo tcpdump -r file.pcap
Остался еще один момент, на который стоит обратить внимание. Это формат отображения содержимого пакетов. Вы можете вывести содержимое пакета в формате ASCII используйте опцию -A:
sudo tcpdump -A -i eth0
Также вы можете отобразить содержимое в формате HEX и ASCII для этого используйте -XX:
sudo tcpdump -XX -i eth0
Выводы
В этой статье мы рассмотрели как пользоваться tcpdump. Это очень мощный сетевой анализатор, который работает только через командную строку. Надеюсь, эта информация была полезной для вас и теперь использование tcpdump будет намного проще, если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео с лекцией о tcpdump:
Источник
Используем tcpdump для анализа и перехвата сетевого трафика
Утилита tcpdump — отличный инструмент командной, который способен перехватывать и анализировать сетевой трафик. Может оказаться большим подспорьем при решении сетевых проблем. Пакеты можно сохранить в файл и анализировать позже. Рекомендуется время от времени запускать эту утилиту, чтобы следить за своей сетью.
- Вывод tcpdump
- Установка tcpdump
- Опции tcpdump
- Фильтры tcpdump:
- Фильтр выражений
- Фильтр портов
- Фильтр хостов
- Комбинирование фильтров
- Сохранение заголовков в файл
- Просмотр сведений о пакете
- Вывод
Вывод tcpdump
Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.
Давайте рассмотрим одну строку из примера вывода:
Каждая строка включает:
- Метка времени Unix (20: 58: 26.765637)
- протокол (IP)
- имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
- имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
- Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
- o S — SYN. Первый шаг в установлении соединения
- F — FIN. Прекращение соединения
- — ACK. Пакет подтверждения принят успешно
- P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
- R — RST. Связь прервалась
- Порядковый номер данных в пакете. (seq 1)
- Номер подтверждения. (ack 2)
- Размер окна (win 453). Количество байтов, доступных в приемном буфере. Далее следуют параметры TCP
- Длина полезной нагрузки данных. (length 0)
Установка tcpdump
В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:
В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:
В RHEL 8 с использование DNF:
Опции tcpdump
Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.
Вывести список доступных системе сетевых интерфейсов, в которых tcpdump может захватывать пакеты:
Очень полезно для систем, в которых нет команды для вывода списка интерфейсов.
Для захвата пакетов, проходящих через определенный интерфейс, используйте -i с именем интерфейса. Если не указать имя, тогда tcpdump подберет первый обнаруженный сетевой интерфейс.
- -v увеличивает количество отображаемой информации о пакетах
- -vv дает еще более подробную информацию
По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.
- -n Если DNS не работает или вы не хотите, чтобы tcpdump выполнял поиск имени.
- -c захватывает только набор строк, например, 5:
- -tttt для использования более удобных временных меток (по умолчанию используются временные метки Unix)
Фильтры tcpdump
Фильтр выражений
Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.
Самые распространенные фильтры :
Фильтр портов
Фильт портов используется для просмотра пакетов, поступающих на определенный порт:
Фильтр хостов
Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:
Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth1:
Комбинирование фильтров
Фильтры можно комбинировать с помощью операторов:
Это позволит писать команды, которые могут более точно изолировать пакеты. Например, пакеты с определенного IP-адреса и для определенного порта:
Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:
Сохранение заголовков в файл
Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.
Следующая команда сохраняет 10 строк вывода интерфейса eth1 в icmp.pcap.
Прочитать этот файл можно с помощью опции -r
Просмотр сведений о пакете
Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.
С помощью опции -X можно отобразить вывод в шестнадцатеричном формате, правда, это не сильно помогает в тех случаях, когда соединение зашифровано.
Вывод
Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:
После чего tcpdump станет отличным помощником в вопросах обеспечения безопасности вашей сети.
Источник