Ответ
Я регулярно использую tcpdump для низкоуровневой диагностики сетевых проблем в Linux-средах. Основные сценарии применения:
- Отладка сетевых соединений: Определение, доходят ли пакеты до хоста, анализ установки TCP-сессий (SYN, SYN-ACK, ACK) и выявление неожиданных RST-пакетов.
- Анализ протоколов: Исследование трафика HTTP, DNS, DHCP для поиска аномалий или несоответствий.
- Фильтрация и сохранение трафика: Использую мощные фильтры BPF для захвата только релевантных пакетов и сохранения дампов в файл для последующего разбора в Wireshark.
Практические примеры команд:
- Захват HTTP-запросов к конкретному хосту:
sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and host 10.0.1.5 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' - Захват только SYN-пакетов (начало соединений) для диагностики проблем с подключением:
sudo tcpdump -i any 'tcp[tcpflags] == tcp-syn' - Сохранение дампа в файл для дальнейшего анализа:
sudo tcpdump -i eth0 -w investigation.pcap port 443
Для анализа шифрованного трафика (HTTPS, TLS) tcpdump позволяет видеть только метаданные (IP, порты, время установления соединения), но этого часто достаточно для изоляции проблемы на сетевом уровне.
Ответ 18+ 🔞
Эх, блядь, ну вот сидишь ты, бывает, смотришь на сервер, а он нихуя не отвечает. И начинается эта песня — а что, собственно, не так? Сеть? Приложение? Хуй его знает. Вот тут-то и вытаскиваю я своего старого друга, tcpdump, ебать мои старые костыли. Инструмент, который тебе прямо в кишки сети заглянет, без всяких там вежливых протокольных приветствий.
Зачем он мне, этому хитрой жопе, сдался? Ну, во-первых, когда соединение тупо не встаёт. Вместо того чтобы гадать, ты запускаешь сниффер и смотришь: SYN ушёл? SYN-ACK пришёл? Или в ответ тишина, а может, сразу RST прилетает, как пощёчина? Вот тут всё и ясно становится — проблема в сети, в фаерволе или в сервисе, который просто сдох, накрылся медным тазом.
Во-вторых, когда какая-нибудь мартышлюшка-служба ведёт себя неадекватно. Говорит, «не могу резолвить домен», а ты такой — да похуй, сейчас посмотрим. Запускаешь дамп на порт 53 и видишь: DNS-запрос ушёл, а ответа нет. Или пришёл, но с ошибкой. Или, что бывает, приходит овердохуища пакетов, а нужного среди них нет. Всё, вопрос снимается, идёшь пинать DNS-сервер.
Ну и, конечно, когда нужно сохранить доказательства, эту самую пиздопроебибну, для разбора полётов. Поймал аномальный трафик — тут же в файл его, в .pcap. Потом можешь спокойно, с пивком, в Wireshark'е его разбирать, как кино смотреть.
Вот, смотри, как я обычно этим пользуюсь, на живых примерах:
-
Хочешь посмотреть, о чём там твой веб-сервер с клиентами шепчется на чистом HTTP? Фильтр немного замороченный, но зато отсекает служебный шум, оставляя только сами HTTP-данные. Красота.
sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and host 10.0.1.5 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -
Подозрение ебать чувствую, что соединения не устанавливаются? Ловим только самые первые, SYN-пакеты. Если их нет — значит, запрос даже не пытался уйти. Если есть, но нет ответа — ну, ёпта, welcome to network problems.
sudo tcpdump -i any 'tcp[tcpflags] == tcp-syn' -
Нужно поймать шифрованный трафик (HTTPS) для разбора метаданных? Лови всё на 443-й порт и тут же скидывай в файл. Потом разберёшь, кто, кому и как часто стучался.
sudo tcpdump -i eth0 -w investigation.pcap port 443
Да, самих данных TLS ты, конечно, не увидишь — это как конверт прочитать, а письмо внутри запечатано. Но часто и этого хватает! Увидел, что TCP-сессия встала, но сразу разорвалась — значит, проблема на уровне TLS-рукопожатия, иди колядуй с сертификатами. А если сессия долгая и стабильная, но приложение всё равно тупит — ну, чувак, тут уже не сеть виновата, а код, который писал какой-то пидарас шерстяной. В общем, инструмент хуёвый, но без него вообще никуда.