Como mover um soquete de domínio unix permite que o socat monitore o tráfego?

11

socat pode ser usado para monitorar o tráfego em um soquete do domínio Unix:

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

Eu não entendo muito bem como esse mecanismo funciona, esperando que alguém possa explicar isso um pouco. Em particular, como mover o arquivo de soquete funciona se um processo já estiver escutando? Além disso, após o movimento: nem lsof /path/to/sock nem /path/to/sock.original retornam resultados.

    
por Matt R 21.11.2014 / 13:26

1 resposta

9

Esses comandos precisam ser executados quando o servidor que você deseja monitorar está atualmente escutando /path/to/sock . Então, se você renomear /path/to/sock , o servidor não será afetado.

O comando socat insere um man-in-the-middle. Ele ouve /path/to/socks e encaminha todo o tráfego dos clientes para /path/to/socks.original (e registra no processo com -v ).

Isso só funciona para os tipos de sockets stream (use UNIX-RECVFROM / UNIX-RECV para datagrama sockets) e somente se os clientes apenas read/write/send/recv nesses sockets soquetes, não sendmsg() com dados auxiliares e outras coisas extravagantes.

lsof relatará apenas os processos de escuta ( socat e o servidor para os sockets de escuta e aceitos). Geralmente não é possível vincular um soquete conectado no cliente ao caminho do soquete.

Se você fizer isso iniciar o servidor, isso não funcionará porque o servidor tentará escutar em /path/to/socks e falhará se socat for já ouvindo isso. Ou você precisa dizer ao servidor para ouvir /path/to/sock.original .

    
por 21.11.2014 / 13:46

Tags