As respostas curtas são não e não são fáceis.
No Linux, lsof depende /proc/net/unix
para recuperar as informações sobre soquetes de domínio UNIX. Essa interface lista todos os soquetes ligados, mas não controla os pontos de extremidade. Assim, você pode ver quais soquetes existem, mas não pode ver o que está conectado a eles. Em algum lugar onde essas informações são rastreadas, elas devem ser rastreadas, caso contrário as conexões dos soquetes não funcionariam. Ainda não encontrei nenhum mecanismo para recuperar as informações de conexão.
A questão de cheirar é um pouco mais interessante, mas não menos decepcionante. O que eu quis dizer com "não é fácil" é que não existe nenhum gancho para entrar e capturar esses dados. O analógico mais próximo é usar o tcpdump ou o Wireshark, e ambos usam o libpcap para realizar o trabalho pesado. Embora a rede (AF_INET) e o domínio UNIX (AF_UNIX) sejam criados usando a socket()
chamada de função, ambos usados connect()
para se conectar, usar read()
e write()
processar dados, eles são manipulados por diferentes subsistemas do kernel. Isso tem o efeito colateral lamentável de que o libpcap não foi projetado para funcionar com soquetes de domínio UNIX.
Há um lado um pouco menos sombrio do problema. Dê uma olhada na página de manual recv(2)
. Esta é uma chamada de sistema de nível inferior que read()
utiliza. Existe um sinalizador para recv()
chamado MSG_PEEK
. Isso permitiria detectar o tráfego que passava por um soquete de domínio UNIX. Portanto, esse é o lado positivo, o lado obscuro é que, até onde eu sei, não existe nenhum aplicativo atual projetado para fazer isso. Então você está olhando para algum esforço de desenvolvimento.
Eu realmente gostaria que foi uma simples resposta agradável de F'YEAH para ambas as partes da sua pergunta.
socat -t100 OUVIR DO UNIX: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT
Não há duplicação de saída, nenhuma saída cíclica. Erro do comentário anterior ".sock.socat"
fonte