As respostas curtas são não e não são fáceis.
No Linux, o lsof depende do /proc/net/unix
para recuperar as informações sobre os soquetes do domínio UNIX. Essa interface lista todos os soquetes acoplados, mas não rastreia os nós de extremidade. Então você pode ver quais soquetes existem, mas não consegue ver o que está conectado a eles. Em algum lugar essas informações são rastreadas, elas devem ser rastreadas ou então 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 do sniffing é um pouco mais interessante, mas não menos decepcionante. O que eu quis dizer com "não facilmente" é que não existe nenhum gancho para infiltrar e gravar esses dados. O analógico mais próximo é usar o tcpdump ou o Wireshark, ambos usam libpcap para fazer o trabalho pesado. Enquanto a rede (AF_INET) e o domínio UNIX (AF_UNIX) são criados usando a chamada da função socket()
, ambos usam connect()
para se conectarem, ambos usam read()
e write()
para processar dados, eles são manipulados pelo kernel diferente subsistemas. Isso tem o efeito colateral infeliz que a libpcap não foi projetada para trabalhar com soquetes de domínio UNIX.
Existe um lado um pouco menos sombrio do problema. Dê uma olhada na página do manual para recv(2)
. Esta é uma chamada de sistema de nível inferior que o read()
faz uso. Existe um sinalizador para recv()
chamado MSG_PEEK
. Isso permitiria que você cheirasse o tráfego passando por um soquete de domínio UNIX. Então esse é o lado bom, o lado negro é que, pelo que sei, não existe nenhum aplicativo atual projetado para isso. Então você está olhando para algum esforço de desenvolvimento.
Eu realmente gostaria que houvesse uma boa resposta simples de F'YEAH para ambas as partes da sua pergunta.