Existe um programa que pode registrar o tráfego de rede pelos nomes de processo e domínio?

3

Gostaria de descobrir quais processos estão se comunicando com quais websites durante um período de tempo. Tudo o que eu encontrei programas como ss que listam as conexões que abrem neste instante e depois saem.

O que eu, na verdade, quero é algo como wireshark, mas que registraria nomes de processos.

Existe realmente nenhum programa desse tipo?

    
por user27636 16.09.2018 / 00:37

3 respostas

2

Se você tem um kernel recente (de preferência pelo menos 4.9, mas aparentemente algumas coisas funcionam em 4.2), então você pode tirar vantagem do novo recurso dtrace que lhe permite interceptar cada tcp connect() chama no kernel e mostra o id do processo, endereço ip remoto e porta.

Como isso não pesquisa, você não perderá nenhuma conexão de curta duração. Do Brendan Gregg blog de 2016, a saída típica é

# tcpconnect
PID    COMM    IP SADDR            DADDR            DPORT
1479   telnet  4  127.0.0.1        127.0.0.1        23
1469   curl    4  10.201.219.236   54.245.105.25    80
1469   curl    4  10.201.219.236   54.67.101.145    80
1991   telnet  6  ::1              ::1              23
2015   ssh     6  fe80::2000:bff:fe82:3ac fe80::2000:bff:fe82:3ac 22

Mais exemplos estão no pacote bcc-tools source . Os pacotes criados para instalação estão disponíveis para várias distribuições ou você pode seguir as instruções de compilação.

    
por 16.09.2018 / 16:54
3

Você pode usar netstat para mostrar o tráfego tcp / ip junto com o PID e o nome do processo, assim:

netstat -pt

Para assistir ao vivo use watch -n com um intervalo, assim:

watch -n 2 netstat -pt

Para reunir essas informações ao longo do tempo, você pode salvar e executar isso como um script bash:

sec=1
count=0
end=3600

echo > output.txt

while [ $count -lt $end ]; do
        netstat -pt | sed -e '1,2d' >> output.txt
        sleep $sec
        count=$((count+1))
done

Isso executará netstat -pt a cada segundo por uma hora e direcionará os resultados para output.txt . Então você pode usar:

awk '{ print $7 "\t" $5 }' output.txt 

para imprimir um PID / process_name formatado e um website: protocolo separado por guia para cada linha que foi reunida.

    
por 16.09.2018 / 00:56
2

Na camada de rede, onde tcpdump vê os pacotes, a conexão com o processo do usuário não está disponível. A ferramenta ss tem a opção -p para listar os processos associados a uma conexão de rede. Como ss mostra apenas as informações em um determinado momento, você terá que executá-las com frequência e ainda poderá perder informações sobre conexões curtas.

Para saber o que foi transmitido, você pode executar tcpdump e capturar tudo, depois você pode filtrar os pacotes capturados pelos números de porta locais que obteve de ss .

Isso não lhe dará informações diretas sobre os nomes DNS usados, porque as conexões são sempre para endereços IP. Mas você pode pesquisar sua captura de rede para solicitações DNS que respondem com o endereço IP da conexão usada posteriormente, isso permitirá que você saiba os nomes DNS usados, a menos que haja solicitações para diferentes nomes DNS que usem o mesmo endereço IP.

Se você realmente quiser saber o que o processo está fazendo, use strace . Você verá o nome do DNS para o resolvedor, bem como tudo o que é transmitido, mesmo para conexões de curta duração.

    
por 16.09.2018 / 10:31