Gostaria de examinar o tráfego de rede sendo manipulado por um único processo, mas as capturas simples de rede não funcionarão, pois estou lidando com um sistema tão ocupado (muitos outros tráfegos acontecendo ao mesmo tempo). Existe uma maneira de isolar tcpdump
ou wireshark
capturar o tráfego de rede de um único processo específico? (O uso netstat
é insuficiente.)
fonte
netstat
e simples filtros de captura de rede em uma máquina ocupada.netstat
; Eu só poderei pegar conexões duradouras. :(Para iniciar e monitorar um novo processo:
Para monitorar um processo existente com um PID conhecido:
-f
é para "seguir novos processos"-e
define um filtro-s
define o limite de strings para mais de 32-p
leva a identificação do processo para anexarfonte
Eu sei que este tópico é um pouco antigo, mas acho que isso pode ajudar alguns de vocês:
Se o seu kernel permitir, capturar o tráfego de rede de um único processo é muito fácil, executando o referido processo em um namespace de rede isolado e usando o wireshark (ou outras ferramentas de rede padrão) no referido namespace.
A configuração pode parecer um pouco complexa, mas depois que você a entender e se familiarizar com ela, facilitará muito o seu trabalho.
Para fazer isso:
crie um espaço para nome da rede de teste:
crie um par de interfaces de rede virtual (veth-a e veth-b):
altere o espaço para nome ativo da interface veth-a:
configure os endereços IP das interfaces virtuais:
configure o roteamento no namespace de teste:
ative o ip_forward e estabeleça uma regra NAT para encaminhar o tráfego proveniente do namespace que você criou (você deve ajustar a interface de rede e o endereço IP do SNAT):
(Você também pode usar a regra MASQUERADE, se preferir)
finalmente, você pode executar o processo que deseja analisar no novo espaço para nome e o wireshark também:
Você terá que monitorar a interface veth-a.
fonte
socat
.--to-source
argumentoiptables
? Esse é o endereço IP da interface que você passa para a-o
opção, um endereço IP que você cria ou ??? Eu tentei a versão mascarada que não precisa--to-source
, como descrito aqui , e que funcionou!Isso mostrará as conexões que um aplicativo está fazendo, incluindo a porta que está sendo usada.
fonte
Apenas uma idéia: é possível vincular seu aplicativo a um endereço IP diferente? Nesse caso, você pode usar os suspeitos do costume ( tcpdump , etc.)
Ferramentas para aplicativos que não são capazes de se vincular a outro endereço IP:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
fonte
Cheguei a um problema semelhante e consegui resolvê- lo com base nesta resposta, ioerror , usando o NFLOG, conforme descrito aqui :
Em seguida, você pode criar o processo em questão a partir de uma conta de usuário que não faz mais nada - e pronto, você acabou de isolar e capturar o tráfego de um único processo.
Só queria postar de volta, caso isso ajude alguém.
fonte
Eu escrevi um aplicativo C que faz o que é descrito na grande resposta acima por felahdab!
Veja aqui: nsntrace github repo
fonte
Este é um hack sujo, mas eu sugeriria um desvio ou um destino de log com iptables para um determinado UID. por exemplo:
Também pode valer a pena procurar algo como '--log-tcp-sequence', '--log-tcp-options', '--log-ip-options', '--log-uid' para esse destino de log . Embora eu suspeite que isso só o ajude a postar um pcap de processo que inclui muitos outros dados.
O destino NFLOG pode ser útil se você deseja sinalizar pacotes e, em seguida, determinados pacotes marcados serão enviados por um soquete de netlink para um processo de sua escolha. Gostaria de saber se isso seria útil para hackear algo com o wireshark e seu aplicativo específico sendo executado como um usuário específico?
fonte
Você pode tentar o tracedump - http://mutrics.iitis.pl/tracedump
Ele faz exatamente o que você deseja. Você pode fornecer um ID do processo ou um programa para executar.
fonte
Tente executar o processo que você está interessado sob strace :
Ele fornecerá informações muito detalhadas sobre o que seu processo está fazendo. Como um processo pode abrir as portas que ele deseja em qualquer lugar, usando um filtro predefinido, você pode perder alguma coisa.
Outra abordagem seria usar uma máquina virtual simplificada ou uma máquina de teste em sua rede e colocar seu processo nela isoladamente. Então você pode simplesmente usar o Wireshark para capturar tudo dessa máquina. Você terá certeza de que o tráfego capturado será relevante.
fonte
Com base na resposta do ioerror , suspeito que você possa usar
iptables --uid-owner
para definir um marcador no tráfego e pedir ao wireshark para capturar apenas o tráfego com esse marcador. Você pode usar um DSCP (marcador de serviços diferenciais), ID de fluxo ou um marcador de qos.Ou, de fato, você pode usar isso para enviar esses pacotes para uma interface diferente e capturar apenas nessa interface.
fonte
O wireshark bug # 1184 é esse recurso. Ainda não está implementado.
Copiado do usuário cmanynard em ask.wireshark.org
fonte
talvez iptables e ulog podem funcionar? Não que eu tenha uma receita exata, mas acho que o iptables pode corresponder aos processos, uma vez que você corresponda, você pode usar ulog.
fonte
iptables -m owner --pid-owner $PID
foi removido no Linux 2.6.14: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Eu acho que você pode criar um script de shell para executar o netstat e registrá-lo em um arquivo de texto. Algo como (etapas muito difíceis):
Eu não sou um programador, então não posso refinar isso. Mas alguém aqui pode começar de onde eu parei e criar um script de trabalho para você.
fonte