Gostaria de monitorar as respostas em um soquete unix sem perturbar as conexões originais e canalizá-las para um script para processamento.
Eu sei como fazer isso com tcpdump para conexões tcp, mas não consigo encontrar uma solução para soquetes unix locais.
Isso é possível?
Respostas:
Há um cara que afirma fazer isso criando um aplicativo que atua como um gateway entre dois soquetes e registrando todos os dados que fluem. Portanto, você não pode tocar em um soquete, mas se puder reiniciar o serviço e ajustá-lo para usar esse aplicativo, poderá ver todo o tráfego.
Aqui está o link para o post: Unix Socket Sniffer
Existe uma outra maneira que você precisa para encontrar a identificação do processo anexada ao soquete, depois encontre com lsof o descritor de arquivo do soquete e toque no descritor de arquivo usando strace.
Se você pode parar o cliente / servidor que estiver usando o soquete e reconfigurá-lo, recomendo sempre o primeiro método, o segundo método é complicado e exige que você toque em um processo atual que, em alguns aplicativos, pode causar falhas.
Espero que alguém nos esclareça de maneira anoter :)
Boa sorte
fonte
você pode usar socat.
O que está acontecendo acima: Primeiro mova o soquete original para sock.original. O Socat cria um novo soquete ('UNIX-LISTEN') no local dos originais e encaminha tudo para o original ('UNIX-connect'). O -v diz ao socat para imprimir também a saída para STDERR.
fonte
Você também pode tentar usar strace em um dos processos em ambos os lados do soquete, pois isso permitirá que você observe o que está escrito / lido. Encontrei nos meus ambientes de produção, não tenho socat, mas tenho traço.
Para qualquer finalidade útil, definir -s para algo grande é uma obrigação.
fonte
strace -p <pid>
para assistir a um processo em execução.strace -s9999 -f $(for i in $( pidof php5-fpm ) ; do echo -n " -p $i "; done ) 2>&1 | tee /tmp/php.log
e, em seguida, execute os testes. Você tem o /tmp/php.log para verificar lentamente se o log é muito grande. Se você está recebendo muito tráfego, fazer um pedido com um query-string com o seu nome ou algo assim você pode procurá-lo nos logsprintf
lidar com a repetição.printf " -p %s" $(pidof php5-fpm)
irá prefixar cada argumento pid com-p
e é muito mais prático de escrever.então:
fonte