Mostra conexões de rede de um processo

19

Existe uma maneira de mostrar as conexões de um processo? Algo assim:

show PID

em que show é um comando para fazer isso e PID é o pid do processo. A saída que eu quero é composta por toda a conexão do processo (em tempo real). Por exemplo, se o processo tentar se conectar a 173.194.112.151 , a saída será 173.194.112.151 .

Um exemplo mais específico com o Firefox:

show 'pidof firefox'

e com o firefox eu começo primeiro em google.com , depois em unix.stackexchange.com e finalmente 192.30.252.129 . A saída, quando eu fechar o navegador, deve ser:

google.com
stackexchange.com
192.30.252.129

(Obviamente, com o navegador, essa saída não é realista, porque há muitas outras conexões relacionadas, mas isso é apenas um exemplo.)

    
por ᴜsᴇʀ 02.10.2015 / 15:02

4 respostas

19

Você está procurando por strace ! Eu encontrei esta resposta em askubuntu , mas é válida para o Unix:

To start and monitor an new process:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

To monitor an existing process with a known PID:

strace -p $PID -f -e trace=network -s 10000

Caso contrário, mas isso é específico para o Linux, você pode executar o processo em um namespace de rede isolado e usar o wireshark para monitorar o tráfego . Isso provavelmente será mais conveniente do que ler o strace log:

  • create a test network namespace:

    ip netns add test
    
  • create a pair of virtual network interfaces (veth-a and veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • change the active namespace of the veth-a interface:

    ip link set veth-a netns test
    
  • configure the IP addresses of the virtual interfaces:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • configure the routing in the test namespace:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • activate ip_forward and establish a NAT rule to forward the traffic coming in from the namespace you created (you have to adjust the network interface and SNAT ip address):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (You can also use the MASQUERADE rule if you prefer)

  • finally, you can run the process you want to analyze in the new namespace, and wireshark too:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    You'll have to monitor the veth-a interface.

    
por 19.01.2017 / 14:21
10

Tente

lsof -i -a -p 'pidof firefox'
    
por 02.10.2015 / 15:25
6

Aqui está outra abordagem:

ss -nap | grep $(pidof firefox)

Exemplo de saída:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))
    
por 02.10.2015 / 21:25
3

Você também pode tentar com netstat -p . Na página do manual:

netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

Para mostrar apenas as conexões de rede, use netstat -tup . Observe que, para ver o processo PID, você pode precisar ser root.

Se você não tem netstat em seu sistema, você pode ter ss , que tem quase a sintaxe exata. Você pode usar então ss -tup (como root).

    
por 02.10.2015 / 18:50