
Я пытаюсь перехватить трафик MySQL и передать этот трафик в строку команды следующим образом:
tcpdump -i any -s 0 -l -w - dst port 3306 | strings
Это работает так, как и ожидалось, и выводит все запросы MySQL, такие как
select * from mytables
show databases
Но когда я пытаюсь перенаправить вывод в файл, вывод не печатается в /tmp/out
файл:
tcpdump -i any -s 0 -l -w - dst port 3306 | strings > /tmp/out
Может ли кто-нибудь объяснить мне поведение вышеуказанной команды и почему она не перенаправляет вывод в файл.
решение1
Я нашел решение:
На самом деле команда strings буферизуется. Я отключил буферизацию с помощью
stdbuf -i0 -o0 -e0 command
Итак, после изменения всей команды на следующую, вывод начал поступать в файл /tmp/final.
tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings > /tmp/final