Como a movimentação de um soquete de domínio unix permite que o socat monitore o tráfego?

12

socat pode ser usado para monitorar o tráfego em um soquete de 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

Não entendo muito bem como esse mecanismo funciona, esperando que alguém possa explicar um pouco. Em particular, como mover o arquivo de soquete funciona se um processo já o está ouvindo? Além disso, após a mudança: lsof /path/to/socknem /path/to/sock.originalretorne nenhum resultado.

Matt R
fonte

Respostas:

11

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

O socatcomando insere um homem no meio. Ele escuta /path/to/sockse encaminha todo o tráfego dos clientes /path/to/socks.original(e o registra no processo -v).

Isso funciona apenas para tipos de soquetes de fluxo (use UNIX-RECVFROM/ UNIX-RECVpara soquetes de datagrama ) e somente se os clientes apenas read/write/send/recvos utilizarem , não sendmsg()com dados auxiliares e outras coisas sofisticadas.

lsofrelatará apenas os processos de escuta ( socate o servidor para os soquetes de escuta e aceitos). Geralmente, não é possível vincular um soquete conectado no cliente ao caminho do soquete.

Se você fizer isso antes de iniciar o servidor, então isso não vai funcionar como o servidor vai tentar ouvir sobre /path/to/sockse falhar como socatjá está escutando isso. Ou você precisa dizer ao servidor para ouvir /path/to/sock.original.

Stéphane Chazelas
fonte