Добавить в корзинуПозвонить
Найти в Дзене

tcpdump – сеть как на ладони

При диагностике сетей очень важно убедиться в том, что нужные пакеты приходят на нужный узел и не просто приходят, а соответствуют критериям, которые вы указали в правилах фильтрации. Иначе можно долго гадать, что происходит и почему не работает то, что «по идее» должно работать. Поэтому не будем гадать, а просто посмотрим трафик своими глазами, в этом нам поможет утилита tcpdump. Для ее установки выполните: apt install tcpdump После чего запустите ее с ключом -D, чтобы посмотреть какие интерфейсы в системе она видит и откуда может слушать трафик. tcpdump -D Далее мы можем просто запустить: tcpdump -i enp3s0 И сразу утонем в количестве информации, разобраться в которой будет решительно невозможно, поэтому, чтобы получить выжимку мы будем использовать фильтры, самые популярные из них: ▫️port ▫️host ▫️src ▫️dst ▫️tcp ▫️udp ▫️icmp Например, мы хотим посмотреть все пакеты с портом назначения UDP 34567: tcpdump -i enp3s0 udp dst port 34567 Указанную нами конструкцию следует чита

tcpdump – сеть как на ладони

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

Иначе можно долго гадать, что происходит и почему не работает то, что «по идее» должно работать. Поэтому не будем гадать, а просто посмотрим трафик своими глазами, в этом нам поможет утилита tcpdump.

Для ее установки выполните:

apt install tcpdump

После чего запустите ее с ключом -D, чтобы посмотреть какие интерфейсы в системе она видит и откуда может слушать трафик.

tcpdump -D

Далее мы можем просто запустить:

tcpdump -i enp3s0

И сразу утонем в количестве информации, разобраться в которой будет решительно невозможно, поэтому, чтобы получить выжимку мы будем использовать фильтры, самые популярные из них:

▫️port

▫️host

▫️src

▫️dst

▫️tcp

▫️udp

▫️icmp

Например, мы хотим посмотреть все пакеты с портом назначения UDP 34567:

tcpdump -i enp3s0 udp dst port 34567

Указанную нами конструкцию следует читать как: протокол UDP - порт назначения 34567.

Теперь утилита нам покажет все пакеты, которые соответствую данному критерию: у которых транспортный протокол UDP и в поле порт назначения стоит 34567.

А если мы хотим посмотреть пакеты только от определенного узла, чтобы понять доходит к нам на сервер он него что-нибудь или нет. Усложним фильтр и добавим в него две группы условий. Для их соединения можно использовать логические выражения:

▫️AND

▫️OR

Отдельно для отрицания условия можно использовать

▫️NOT

Например:

tcpdump -i enp3s0 src host 203.0.113.11 and udp dst port 34567

Здесь мы фильтруем по двум условиям: хост источник и протокол - порт назначения пакета.

Вот здесь может возникнуть вопрос, а почему нельзя написать так:

tcpdump -i enp3s0 src host 203.0.113.11 udp dst port 34567

Вроде бы как пол логике вещей условия все равно соединяются как-бы по логическому И, однако это неверно. tcpdump требует явного указания условии соединения различных примитивов.

В нашем условии два примитива: хост и порт. Общий синтаксис примитива можно описать выражением:

[протокол] [направление] {host|net|port|portrange} значение

В нашем случае примитивы взяты в фигурные скобки, каждый примитив должен явно соединяться через логический оператор. Например, наоборот, все пакеты, кроме определенного узла:

tcpdump -i enp3s0 udp dst port 34567 and not src host 203.0.113.11

Если мы хотим захватить определенное количество пакетов, то используйте ключ -с:

tcpdump -i enp3s0 -с 50 src host 203.0.113.11 and udp dst port 34567

Данная команда захватит строго 50 пакетов, соответствующих условию.

Чтобы увеличить количество выводимой информации добавьте ключ -v[v], чем больше v вы указали, тем на более глубокий уровень будет разбираться информация пакета, но не обольщайтесь, если пакет не содержит дополнительных подробностей, но ничего нового вы не увидите.

При работе tcpdump пытается разрешать адреса в DNS-имена, а порты в имена служб, чтобы предотвратить такое поведение используйте ключ -n:

tcpdump -i enp3s0 -n src host 203.0.113.11 and tcp dst port 22

Но все это диагностика в реальном времени, а как быть, если мы хотим изучить полученный дамп подробно, в спокойной обстановке? Все просто, нужно записать его в файл, для этого предназначена опция -w:

tcpdump -i enp3s0 -c 50 src host 203.0.113.11 and tcp dst port 22 -w mydump.pcap

Теперь 50 пакетов, попадающих под фильтр, будут записаны в файл mydump.pcap, если вы не указали количество, то в файл запишется все, что tcpdump успел захватить, пока вы не прервали его работу через Ctrl+C.

Записанный файл можно открыть любым подходящим ПО, наиболее популярным является открытый анализатор пакетов Wireshark.