Como rastrear a atividade de rede de um comando?

12

Eu quero rastrear a atividade de rede de um comando, eu tentei tcpdump e strace sem sucesso.

Por exemplo, se eu estiver instalando um pacote ou usando qualquer comando que tente acessar algum site, quero ver essa atividade de rede (o site que ele tenta acessar).

Acho que podemos fazer isso usando o tcpdump. Eu tentei, mas está acompanhando toda a atividade de rede do meu sistema. Digamos que, se eu executar vários comandos relacionados à rede e eu quiser rastrear apenas uma atividade de rede de comando específica, será difícil descobrir a solução exata.

Existe uma maneira de fazer isso?

ATUALIZAÇÃO:

Não quero rastrear tudo o que acontece na minha interface de rede. Eu só quero rastrear o comando (para um exemplo de atividade de rede #yum install -y vim). Tal como o site que tenta alcançar.

    
por Buvanesh Kumar 05.07.2017 / 08:25

4 respostas

11

netstat por simplicidade

Usando netstat e grepping no PID ou no nome do processo:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

Você pode usar watch para atualizações dinâmicas:

watch 'netstat -np --inet | grep "thunderbird"'

Com:

  • -n : mostra endereços numéricos em vez de tentar determinar nomes de host, porta ou usuário simbólicos
  • -p : Mostra o PID e o nome do programa ao qual cada soquete pertence.
  • --inet : Exibe apenas os soquetes do protocolo raw, udp e tcp.

strace para verbosidade

Você disse que tentou a ferramenta strace , mas tentou a opção trace=network ? Note que a saída pode ser bastante detalhada, então você pode precisar de alguns grepping. Você poderia começar por grepping em "sin_addr".

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

Ou, para um processo já em execução, use o PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr
    
por 05.07.2017 / 09:32
6

sysdig permite que você monitore toda a atividade do kernel ou de vários comandos em execução no seu sistema, incluindo e não restritos a atividades de rede.

Como a saída pode ser grande, você precisa criar filtros, a página padrão para os filtros mais básicos é bastante compreensível.

Ele também tem a vantagem de não ser usado como um wrapper de aplicativo como em strace , e pode ser bastante poderoso.

De Exemplos de Sysdig

Networking

See the top processes in terms of network bandwidth usage

sysdig -c topprocs_net 

Show the network data exchanged with the host 192.168.0.1

As binary:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

As ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

See the top local server ports:

In terms of established connections:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

In terms of total bytes:

sysdig -c fdbytes_by fd.sport 

See the top client IPs

In terms of established connections

sysdig -c fdcount_by fd.cip "evt.type=accept"   

In terms of total bytes

sysdig -c fdbytes_by fd.cip 

List all the incoming connections that are not served by apache.

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
    
por 05.07.2017 / 09:01
4

Eu criaria um novo namespace de rede , transpondo-o para a rede real e, em seguida, monitore a ponte com tcpdump .

    
por 05.07.2017 / 16:11
1

Você pode usar o wireshark para detectar todo o tráfego de entrada e saída de uma interface de rede. Caso você precise de uma opção sem GUI, você pode usar tshark.

Com ambas as opções, você pode ver todo o tráfego da rede e salvá-lo para analisar posteriormente todas as conexões estabelecidas.

    
por 05.07.2017 / 09:15