Я хотел бы отслеживать ответы в Unix-сокете, не нарушая исходные соединения, и направлять их в сценарий для обработки.
Я знаю, как сделать это с tcpdump для соединений tcp, но я не могу найти решение для локальных сокетов unix.
Это вообще возможно?
Ответы:
Есть парень, который утверждает, что делает это, создавая приложение, которое действует как шлюз между двумя сокетами, и регистрирует все данные, которые передаются. Таким образом, вы не можете нажать на сокет, но если вы можете перезапустить сервис и настроить его для использования этого приложения, вы сможете увидеть весь трафик.
Вот ссылка на пост: Unix Socket Sniffer
Есть еще один способ, который требует, чтобы вы нашли идентификатор процесса, подключенный к сокету, затем найдите с помощью lsof дескриптор файла сокета и затем коснитесь дескриптора файла, используя strace.
Если вы можете остановить любой клиент / сервер, использующий сокет, и перенастроить его, я бы порекомендовал всегда первый метод, второй метод сложен и требует от вас прикосновения к текущему процессу, который в некоторых приложениях может вызвать его сбой.
Надеюсь, кто-то просветит нас другим способом :)
Удачи
источник
Вы можете использовать socat.
Что происходит выше: сначала переместите оригинальную розетку в sock.original. Socat создает новый сокет («UNIX-LISTEN») в месте расположения оригиналов и перенаправляет все в оригинал («UNIX-connect»). -V указывает socat также печатать вывод в STDERR.
источник
Вы также можете попробовать использовать strace в одном из процессов по обе стороны сокета, так как это позволит вам наблюдать за тем, что пишется / читается. Я обнаружил в своей производственной среде, у меня нет socat, но есть strace.
Для любой полезной цели установка -s на что-то большое является обязательным.
источник
strace -p <pid>
для просмотра запущенного процесса.strace -s9999 -f $(for i in $( pidof php5-fpm ) ; do echo -n " -p $i "; done ) 2>&1 | tee /tmp/php.log
а затем запустите тесты. У вас есть /tmp/php.log, чтобы медленно проверять, не слишком ли большой журнал. Если вы получаете слишком большой трафик, сделайте запрос со строкой запроса с вашим именем или чем-то таким, чтобы вы могли искать его в журналахprintf
повторяться.printf " -p %s" $(pidof php5-fpm)
префикс каждого аргумента pid-p
и гораздо более практичный для написания.тогда:
источник