tgoop.com/life_of_network_engineer/86
Create:
Last Update:
Last Update:
Разбирали плавающую проблему, требовалось поймать «проблемные» запросы на одном из балансировщиков.
Задача: записать дамп трафика только с POST-запросами, отправлять на удаленный сервер и сохранять в файл.
Cкрипт в одну строчку:
nohup /usr/sbin/tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354' and host <host-ip> -w | ssh <storage-ip> tcpdump -r - -w /var/log/file.pcap -G 600
где,
Это команда, которая позволяет запустить процесс, игнорируя сигнал HUP (hang up), т.е. поддерживает работу процесса даже после выхода из оболочки или терминала. HUP как раз таки отправляется процессу при закрытии терминала.
Это путь к бинарному файлу tcpdump (в Ubuntu).
Указывает размер захватываемого пакета. Значение 0 означает, что будет захвачен полный пакет (без усечения).
Эта опция заставляет tcpdump выводить данные в ASCII-формате, что удобно для анализа текстовой информации в пакетах.
Увеличивает уровень подробности вывода.
Это фильтр, который использует синтаксис BPF (Berkeley Packet Filter). Он проверяет, соответствует ли TCP-пакет определенному условию. В данном случае он ищет пакеты, содержащие строку "POST" (в шестнадцатеричном виде 0x504f5354) в заголовке TCP.
Захватываем только пакеты, направленные к или от хоста с IP-адресом <host-ip>
Опция для записи захваченных пакетов в файл. Однако в данном случае отсутствует имя файла, так как вывод будет перенаправлен через конвейер (pipe).
Символ «|» (pipe) используется для перенаправления вывода одной команды на вход другой команды. Здесь вывод tcpdump передается через SSH на удаленный сервер с IP-адресом <storage-ip>.
На удаленном сервере tcpdump читает данные из стандартного ввода (-), то есть из потока, который был передан через SSH.
Здесь указывается имя файла, в который будут записаны захваченные пакеты на удаленном сервере.
Эта опция указывает tcpdump создавать новый файл каждые 600 секунд (10 минут). Можно использовать опцию создавать новый файл при достижении определенного объема, но нас интересовал временной промежуток, чтобы отловить проблему.
P.S. Уверен, есть еще масса вариантов сделать то же самое.
#Задача