web-dev-qa-db-fra.com

Afficher les connexions réseau d'un processus

Il existe un moyen de montrer les connexions d'un processus? Quelque chose comme ca:

show PID

dans lequel show est une commande pour ce faire et PID est le pid du processus. La sortie que je veux est composée de toute la connexion du processus (en temps réel). Par exemple, si le processus tente de se connecter à 173.194.112.151 la sortie est 173.194.112.151.

Un exemple plus spécifique avec Firefox:

show `pidof firefox`

et avec firefox je vais d'abord sur google.com, puis sur nix.stackexchange.com et enfin 192.30.252.129. La sortie, quand je ferme le brower, doit être:

google.com
stackexchange.com
192.30.252.129

(Évidemment, avec le navigateur, cette sortie n'est pas réaliste, car il existe de nombreuses autres connexions associées, mais ce n'est qu'un exemple.)

29
ᴜsᴇʀ

Vous recherchez strace! J'ai trouvé cette réponse sur askubunt , mais elle est valable pour Unix:

Pour démarrer et surveiller un nouveau processus:

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

Pour surveiller un processus existant avec un PID connu:

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

Sinon, mais c'est spécifique à Linux, vous pouvez exécuter le processus dans un espace de noms de réseau isolé et utiliser wirehark pour surveiller le trafic . Ce sera probablement plus pratique que de lire le journal strace:

  • créer un espace de noms de réseau de test:

    ip netns add test
    
  • créer une paire d'interfaces réseau virtuelles (veth-a et veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • changer l'espace de noms actif de l'interface veth-a:

    ip link set veth-a netns test
    
  • configurer les adresses IP des interfaces virtuelles:

    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
    
  • configurer le routage dans l'espace de noms de test:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • activez ip_forward et établissez une règle NAT pour transférer le trafic provenant de l'espace de noms que vous avez créé (vous devez ajuster l'interface réseau et l'adresse IP SNAT):

    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
    

    (Vous pouvez également utiliser la règle MASQUERADE si vous préférez)

  • enfin, vous pouvez exécuter le processus que vous souhaitez analyser dans le nouvel espace de noms, et wirehark aussi:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Vous devrez surveiller l'interface veth-a.

31
Olivier

Essayer

lsof -i -a -p `pidof firefox`
16
alxrem

Voici une autre approche:

ss -nap | grep $(pidof firefox)

Exemple de sortie:

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))
9

Vous pouvez également essayer avec netstat -p. Depuis la page de manuel:

netstat - Imprimer les connexions réseau, les tables de routage, les statistiques d'interface, les connexions de mascarade et les appartenances multicast

Pour afficher uniquement les connexions réseau, utilisez netstat -tup. Notez que pour voir le processus PID, vous devrez peut-être être root.

Si vous n'avez pas netstat sur votre système, vous pouvez avoir ss, qui a presque la syntaxe exacte. Vous pouvez alors utiliser ss -tup (en tant que root).

5
abel