Despejar o tráfego de rede de um único aplicativo (semelhante a strace)

11

Estou procurando uma maneira de despejar o pcap de dados de rede gerados por um aplicativo, de maneira semelhante stracedespeja syscalls, etc. por exemplo:

net-strace somecommand -args

somecommandfaria algo na rede e net-stracesalvaria um dump de pcap de todo o tráfego gerado por esse aplicativo (+ respostas e tráfego relacionado).

Isso pode ser alcançado?

gesti
fonte
O problema é que os aplicativos não enviam pacotes (exceto aqueles que usam soquetes brutos como ping), mas usam uma API de rede que faz com que o kernel envie pacotes (e receba um relacionado) em seu nome.
Stéphane Chazelas
Sim, mas existem aplicativos (por exemplo, proxychains - proxychains.sourceforge.net ) que executam todos os dados do aplicativo por meio de um proxy. Não sei como eles fazem isso, mas eles podem capturá-lo e enviá-lo através de um proxy. Talvez se houver um proxy simples (executado localmente), que pode despejar o pcap, proxychains + combinação de proxy possa ser usada para obter o despejo.
Gesti
É mais provável que eles sequestrem a API (com LD_PRELOAD) do que os pacotes. Dito isto, é possível injetar algum setsockopt (SO_MARK) nos aplicativos e usar o netfilter para registrar os pacotes no ulog.
Stéphane Chazelas
3
Crie um novo espaço para nome de rede para o aplicativo e capture todo o tráfego; pode haver também uma abordagem aceitável para alguns casos de uso.
Stéphane Chazelas

Respostas:

3

Que tal usar o próprio strace?

strace -f -e trace=network -o output_file -s 10000 somecommand -args
Christian Long
fonte
A linha de comando que você deu parece mostrar apenas solicitações de DNS. A -eopção do strace frequentemente não seleciona o que você realmente deseja.
Robin Green
2

Você pode despejar o tráfego gerado pelo aplicativo por diferentes métodos:

Se você conhece as portas que o aplicativo está usando, é possível executar o tcpdump ou o wireshark com regras de filtragem específicas para essas portas.

Se isso não for uma opção, você pode marcar pacotes de aplicativos usando uma regra iptables , correspondendo ao proprietário do processo. Pode ser necessário criar uma nova conta de usuário para isolar completamente o processo. Em seguida, você pode capturar o tráfego que corresponde apenas à regra.

Você pode encontrar informações mais completas sobre este tópico relacionado: /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process

Você também pode achar interessante esse tracedump do programa, conforme declarado no tópico anterior. http://mutrics.iitis.pl/tracedump

almlys
fonte