Примеры tcpdump в Linux
Если вам необходимо проанализировать или перехватить сетевые пакеты в Linux, то лучше всего для этого использовать консольную утилиту tcpdump. Но проблема возникает в довольно сложном ее управлении. Рядовому пользователю покажется, что работать с утилитой неудобно, но это только на первый взгляд. В статье будет рассказано, как устроена tcpdump, какой синтаксис она имеет, как ей пользоваться, а также будут приведены многочисленные примеры ее использования.
Читайте также: Руководства по настройке интернет-соединения в Ubuntu, Debian, Ubuntu Server
Установка
Большинство разработчиков операционных систем на базе Linux включают утилиту tcpdump в список предустановленных, но если по какой-то причине она в вашем дистрибутиве отсутствует, ее можно всегда скачать и установить через «Терминал». Если у вас ОС основана на Debian, а это Ubuntu, Linux Mint, Kali Linux и им подобные, нужно выполнить эту команду:
sudo apt install tcpdump
При установке вам нужно ввести пароль. Обратите внимание, что при наборе он не отображается, также для подтверждения установки нужно ввести символ «Д» и нажать Enter.
Если у вас Red Hat, Fedora или CentOS, то команда для установки будет иметь следующий вид:
sudo yam install tcpdump
После того как утилита будет установлена, ей сразу же можно пользоваться. Об этом и о многом другом будет рассказано дальше по тексту.
Синтаксис
Как и любая другая команда, tcpdump имеет свой синтаксис. Зная его, вы сможете задавать все необходимые параметры, которые будут учитываться при выполнении команды. Синтаксис имеет следующий вид:
При использовании команды вам обязательно необходимо указывать интерфейс для отслеживания. Фильтры и опции — это не обязательные переменные, но они позволяют выполнить более гибкую настройку.
Опции
Хоть опцию и не обязательно указывать, перечислить доступные все же нужно. В таблице продемонстрирован не весь их список, а только наиболее популярные, но их с лихвой хватит, чтобы решить большинство поставленных задач.
Разобрав опции, чуть ниже мы перейдем непосредственно к их применениям. А пока что будут рассмотрены фильтры.
Фильтры
Как говорилось в самом начале статьи, вы можете добавлять в синтаксис tcpdump фильтры. Сейчас будут рассмотрены наиболее популярные из них:
| Фильтр | Определение |
|---|---|
| host | Служит для указания имени хоста |
| net | Указывает IP подсети и сети |
| ip | Служит для указания адреса протокола |
| src | Выводит пакеты, которые были отправлены с указанного адреса |
| dst | Выводит пакеты, которые были получены указанным адресом |
| arp, udp, tcp | Фильтрация по одному из протоколов |
| port | Отображает информацию, относящуюся к определенному порту |
| and, or | Служит для объединения нескольких фильтров в команде |
| less, greater | Вывод пакетов меньше или больше указанного размера |
Все вышеперечисленные фильтры можно комбинировать между собой, таким образом, в выдаче команды вы будете наблюдать только ту информацию, которую желаете увидеть. Чтобы более детально разобраться в использовании вышеперечисленных фильтров, стоит привести примеры.
Примеры использования
Сейчас будут приведены часто используемые варианты синтаксиса команды tcpdump. Все их перечислить не получится, так как их вариаций может быть бесконечное множество.
Просмотр списка интерфейсов
Рекомендуется каждому пользователю изначально проверить список всех его сетевых интерфейсов, которые можно отследить. Из вышеприведенной таблицы мы знаем, что для этого нужно использовать опцию -D, поэтому в терминале выполните следующую команду:
Как вы можете заметить, в примере есть восемь интерфейсов, которые можно просмотреть с помощью команды tcpdump. В статье будут приводиться примеры с ppp0, вы же можете использовать любой другой.
Обычный захват трафика
Если нужно отследить один сетевой интерфейс, то сделать это вы можете с помощью опции -i. Не забудьте после ее ввода указать наименование интерфейса. Вот пример выполнения такой команды:
Обратите внимание: перед самой командой нужно вписать «sudo», так как она требует права суперпользователя.
Примечание: после нажатия Enter в «Терминале» беспрерывно будут отображаться перехваченные пакеты. Чтобы остановить их поток, нужно нажать комбинацию клавиш Ctrl+C.
Если вы выполняете команду без дополнительных опций и фильтров, то увидите следующий формат отображения отслеженных пакетов:
22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594
Где цветом выделено:
Этот синтаксис имеет возможность вывода в окне «Терминала» без использования дополнительных опций.
Как известно из таблицы, опция -v позволяет увеличить количество информации. Разберем на примере. Проверим тот же интерфейс:
Здесь можно заметить, что появилась следующая строка в выводе:
Где цветом выделено:
Также в синтаксис команды вы можете прописать опцию -vv или -vvv, что позволит еще больше увеличить объем выводимой информации на экран.
В таблице опций упоминалось о возможности сохранять все выводимые данные в отдельный файл, чтобы позже их можно было просмотреть. За это отвечает опция -w. Пользоваться ей довольно просто, всего-навсего укажите ее в команде, а затем впишите название будущего файла с расширением «.pcap». Рассмотрим все на примере:
Обратите внимание: во время записи логов в файл на экране «Терминала» не отображается никакой текст.
Когда вы захотите просмотреть записанный вывод, необходимо использовать опцию -r, после которой написать название ранее записанного файла. Применяется она без других опций и фильтров:
Обе эти опции отлично подойдут в тех случаях, когда необходимо сохранить большие объемы текста для последующего разбора.
Фильтрация по IP
Из таблицы фильтров мы знаем, что dst позволяет вывести на экран консоли только те пакеты, которые были получены адресом, что указан в синтаксисе команды. Таким образом очень удобно просматривать пакеты, полученные вашим компьютером. Для этого в команде нужно всего лишь указать свой IP-адрес:
Как можно заметить, помимо dst, в команде мы прописали также фильтр ip. Другими словами, мы сказали компьютеру, чтобы при отборе пакетов он обращал внимание на их IP адрес, а не на другие параметры.
По IP можно отфильтровать и отправляемые пакеты. В примере приведем снова наш IP. То есть сейчас мы отследим, какие пакеты отправляются с нашего компьютера на другие адреса. Для этого нужно выполнить следующую команду:
Как можно заметить, в синтаксисе команды мы изменили фильтр dst на src, тем самым сказав машине, чтобы она искала отправителя по IP.
Фильтрация по HOST
По аналогии с IP в команде мы можем указать фильтр host, чтобы отсеять пакеты с интересующим хостом. То есть в синтаксисе вместо IP-адреса отправителя/получателя нужно будет указывать его хост. Выглядит это следующим образом:
На изображении можно увидеть, что в «Терминале» отображаются только те пакеты, которые были отправлены с нашего IP на хост google.com. Как можно понять, вместо хоста google, можно вписать любой другой.
Как и в случае с фильтрацией по IP, в синтаксисе dst можно заменить на src, чтобы увидеть пакеты, которые отправляются на ваш компьютер:
Обратите внимание: фильтр host должен стоять после dst или src, иначе команда выдаст ошибку. В случае с фильтрацией по IP, наоборот, dst и src стоят перед фильтром ip.
Применение фильтра and и or
Если у вас появляется необходимость использовать сразу несколько фильтров в одной команде, то для этого нужно применять фильтр and или or (зависит от случая). Указывая фильтры в синтаксисе и разделяя их этими оператором, вы «заставите» работать их как один. На примере это выглядит следующим образом:
Из синтаксиса команды видно, что мы хотим вывести на экран «Терминала» все пакеты, которые были отправлены на адрес 95.47.144.254 и пакеты, полученные этим же адресом. Также вы можете изменять некоторые переменные в этом выражении. Например, вместо IP указать HOST или заменить непосредственно сами адреса.
Фильтр port и portrange
Фильтр port отлично подойдет в тех случаях, когда нужно получить информацию о пакетах с определенным портом. Так, если вам нужно увидеть лишь ответы или запросы DNS, нужно указать порт 53:
Если вы хотите просмотреть пакеты http, нужно ввести порт 80:
Помимо прочего, есть возможность отследить сразу диапазон портов. Для этого применяется фильтр portrange:
sudo tcpdump portrange 50-80
Как можно заметить, в связке с фильтром portrange не обязательно указывать дополнительные опции. Достаточно всего лишь задать диапазон.
Фильтрация по протоколам
Вы также можете вывести на экран только тот трафик, который соответствует какому-либо протоколу. Для этого нужно использовать в качестве фильтра наименование этого самого протокола. Разберем на примере udp:
Как можно увидеть на изображении, после выполнения команды в «Терминале» отобразились лишь пакеты с протоколом udp. Соответственно, вы можете осуществить фильтрацию и по другим, например, arp:
Фильтр net
Оператор net помогает отфильтровать пакеты, беря за основу обозначение их сети. Пользоваться им так же просто, как и остальными — нужно в синтаксисе указать атрибут net, после чего вписать адрес сети. Вот пример такой команды:
Фильтрация по размеру пакета
Мы не рассмотрели еще два интересных фильтра: less и greater. Из таблицы с фильтрами мы знаем, что они служат для вывода пакетов данных больше (less) или меньше (greater) размера, указанного после ввода атрибута.
Допустим мы хотим следить лишь за пакетами, которые не превышают отметку в 50 бит, тогда команда будет иметь следующий вид:
Теперь давайте отобразим в «Терминале» пакеты, размер которых больше 50 бит:
Как можно заметить, применяются они одинаково, разница лишь в названии фильтра.
Заключение
По окончании статьи можно сделать вывод, что команда tcpdump — это отличный инструмент, с помощью которого можно отследить любой передаваемый по интернету пакет данных. Но для этого недостаточно просто ввести саму команду в «Терминал». Добиться желаемого результата получится только в случае, если использовать всевозможные опции и фильтры, а также их комбинации.
Помимо этой статьи, на сайте еще 12412 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
14 команд tcpdump для захвата сетевого трафика в Linux
tcpdump – это команда устранения неполадок сети, которая также известна как пакетный сниффер, используемый для захвата и отображения пакетов из сети.
tcpdump позволяет пользователям захватывать и отображать TCP / IP и другие пакеты, которые передаются или принимаются по сети, к которой подключен компьютер.
Он позволяет выполнять поиск в режиме реального времени путем перенаправления захваченных данных на grep или данные могут быть записаны в файл для последующего поиска. Вы можете применять фильтры к пакетам и избегать трафика, который вы не хотите видеть.
Для запуска команды tcpdump требуется root-доступ.
Вы можете захватить все данные, проходящие через вашу локальную сеть, и поместить эти данные в файл.
Он не отображает вывод в реальном времени на экран, но фиксирует пакеты в сети в указанном файле.
Вы можете сохранить все пакеты или часть пакетов (заголовок).
Вы можете выбрать захват и анализ трафика через один сетевой интерфейс или весь сетевой интерфейс. В
этой статье мы узнаем, как использовать команду tcpdump для анализа трафика, идущего на машину Linux.
1) Анализ трафика по всему интерфейсу
tcpdump по умолчанию не установлен, поэтому вам нужно установить его
Формат источника – source.port, где источником может быть имя хоста или IP-адрес.
Вы можете видеть в первой строке, пакет, захваченный в timestamp 07: 41: 25.886307, является IP-протоколом, который создается с именем хоста li339-47.members.linode.com и port ssh, поэтому вы видите li339-47. members.linode.com.ssh.
Пакет предназначен для флага 169.255.7.5.44284.
Вам нужно нажать кнопку отмены, чтобы остановить ее.
Если вам нужна дополнительная информация, tcpdump предоставляет несколько опций, которые улучшают или изменяют его вывод:
Команда tcpdump в Linux
tcpdump — это утилита командной строки, которую вы можете использовать для захвата и проверки сетевого трафика, идущего в вашу систему и из нее. Это наиболее часто используемый сетевыми администраторами инструмент для устранения неполадок в сети и тестирования безопасности.
Несмотря на название, с помощью tcpdump вы также можете захватывать не-TCP трафик, такой как UDP, ARP или ICMP. Перехваченные пакеты можно записать в файл или на стандартный вывод. Одной из самых мощных функций команды tcpdump является ее способность использовать фильтры и собирать только те данные, которые вы хотите анализировать.
В этой статье мы рассмотрим основы использования команды tcpdump в Linux.
Установка tcpdump
tcpdump установлен по умолчанию в большинстве дистрибутивов Linux и macOS. Чтобы проверить, доступна ли команда tcpdump в вашей системе, введите:
Результат должен выглядеть примерно так:
Если tcpdump отсутствует в вашей системе, приведенная выше команда напечатает «tcpdump: команда не найдена». Вы можете легко установить tcpdump с помощью диспетчера пакетов вашего дистрибутива.
Установка tcpdump в Ubuntu и Debian
Установка tcpdump на CentOS и Fedora
Установка tcpdump в Arch Linux
Захват пакетов с помощью tcpdump
Общий синтаксис команды tcpdump следующий:
Самый простой вариант использования — вызвать tcpdump без каких-либо опций и фильтров:
tcpdump будет продолжать захватывать пакеты и записывать их на стандартный вывод, пока не получит сигнал прерывания. Используйте Ctrl+C чтобы отправить сигнал прерывания и остановить команду.
После захвата пакетов tcpdump остановится.
Если интерфейс не указан, tcpdump использует первый найденный интерфейс и выгружает все пакеты, проходящие через этот интерфейс.
Для каждого интерфейса команда выводит имя интерфейса, краткое описание и соответствующий индекс (номер):
Приведенные выше выходные данные показывают, что ens3 — это первый интерфейс, обнаруженный tcpdump и используемый, когда команде не предоставлен интерфейс. Второй интерфейс any — это специальное устройство, позволяющее захватывать все активные интерфейсы.
Вместо отображения вывода на экране вы можете перенаправить его в файл с помощью операторов перенаправления > и >> :
Вы также можете просматривать данные при сохранении в файл с помощью команды tee :
Понимание вывода tcpdump
tcpdump выводит информацию для каждого захваченного пакета в новой строке. Каждая строка включает метку времени и информацию об этом пакете в зависимости от протокола.
Типичный формат строки протокола TCP выглядит следующим образом:
Пойдем по полю и объясним следующую строку:
IP — пакетный протокол. В данном случае IP означает Интернет-протокол версии 4 (IPv4).
Flags [P.] — поле TCP Flags. В этом примере [P.] означает пакет подтверждения push, который используется для подтверждения предыдущего пакета и отправки данных. Другие типичные значения поля флага следующие:
ack 1226568763 Номер подтверждения — это порядковый номер следующих данных, ожидаемых на другом конце этого соединения.
win 402 — Номер окна — это количество доступных байтов в приемном буфере.
length 108 — длина данных полезной нагрузки
tcpdump фильтры
Когда tcpdump вызывается без фильтров, он захватывает весь трафик и производит огромное количество выходных данных, что очень затрудняет поиск и анализ интересующих пакетов.
tcpdump использует синтаксис Berkeley Packet Filter (BPF) для фильтрации перехваченных пакетов с использованием различных параметров обработки, таких как протоколы, IP-адреса и порты источника и назначения и т. д.
Фильтрация по протоколу
Чтобы ограничить захват определенным протоколом, укажите этот протокол как фильтр. Например, чтобы захватить только трафик UDP, вы должны запустить:
Фильтрация по хосту
Чтобы захватить только пакеты, относящиеся к определенному хосту, используйте квалификатор host :
Хостом может быть IP-адрес или имя.
Фильтрация по порту
portrange позволяет захватывать трафик в диапазоне портов:
Фильтрация по источнику и назначению
Следующая команда захватывает приходящие пакеты от хоста с IP 192.168.1.185:
Чтобы найти трафик, поступающий из любого источника на порт 80, вы должны использовать:
Комплексные фильтры
Например, чтобы захватить весь HTTP-трафик, поступающий с исходного IP-адреса 192.168.1.185, вы должны использовать эту команду:
Вы также можете использовать круглые скобки для группировки и создания более сложных фильтров:
Чтобы избежать ошибок синтаксического анализа при использовании специальных символов, заключайте фильтры в одинарные кавычки.
Вот еще один пример команды для захвата всего трафика, кроме SSH, с исходного IP-адреса 192.168.1.185:
Инспекция пакетов
По умолчанию tcpdump захватывает только заголовки пакетов. Однако иногда вам может потребоваться проверить содержимое пакетов.
tcpdump позволяет печатать содержимое пакетов в ASCII и HEX.
Чтение и запись снимков в файл
Еще одна полезная функция tcpdump — записывать пакеты в файл. Это удобно, когда вы захватываете большое количество пакетов или захватываете пакеты для последующего анализа.
Файл захвата также можно проверить с помощью других инструментов анализатора пакетов, таких как Wireshark.
После создания десяти файлов старые файлы будут перезаписаны.
Обратите внимание, что запускать tcpdump только во время устранения неполадок.
Выводы
tcpdump — это инструмент командной строки для анализа и устранения проблем, связанных с сетью.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Используем 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 станет отличным помощником в вопросах обеспечения безопасности вашей сети.
















