J'aimerais examiner le trafic réseau géré par un seul processus, mais les simples captures de réseau ne fonctionneront pas car j'ai affaire à un système très actif (beaucoup d'autres trafics se produisent en même temps). Existe-t-il un moyen d'isoler un tcpdump
o wireshark
au trafic réseau d'un seul processus spécifique ? (En utilisant netstat
est insuffisante).
Réponses
Trop de publicités?Pour lancer 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
-
-f
pour "suivre les nouveaux processus". -
-e
définit un filtre -
-s
limite le nombre de chaînes de caractères à plus de 32. -
-p
prend l'identifiant du processus à rattacher
Je sais que ce fil est un peu ancien mais je pense que cela pourrait aider certains d'entre vous :
Si votre noyau le permet, il est très facile de capturer le trafic réseau d'un seul processus en exécutant ledit processus dans un espace de noms réseau isolé et en utilisant wireshark (ou d'autres outils réseau standard) dans ledit espace de noms également.
La configuration peut sembler un peu complexe, mais une fois que vous l'aurez comprise et que vous vous serez familiarisé avec elle, elle facilitera grandement votre travail.
Afin de le faire :
-
créer un espace de nom 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 nom 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 nom 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 <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
(Vous pouvez aussi utiliser la règle de la MASQUERADE si vous préférez)
-
enfin, vous pouvez exécuter le processus que vous voulez analyser dans le nouvel espace de noms, et wireshark aussi :
ip netns exec test thebinarytotest ip netns exec test wireshark
Vous devrez surveiller l'interface veth-a.
Il existe en effet un moyen, en utilisant le Wireshark filtres. Mais vous ne pouvez pas filtrer directement par le nom du processus ou le PID (parce qu'ils ne sont pas des quantités de réseau).
Vous devez d'abord déterminer les protocoles et les ports utilisés par votre processus. (les netstat dans le commentaire précédent fonctionne bien).
Utilisez ensuite Wireshark pour filtrer le port entrant (ou sortant) avec celui que vous venez de récupérer. Cela devrait isoler le trafic entrant et sortant de votre processus.
Juste une idée : est-il possible de lier votre application à une adresse IP différente ? Si oui, vous pouvez utiliser les suspects habituels ( tcpdump etc.)
Outils pour les applications qui ne sont pas capables de se lier à une autre adresse IP :
http://freshmeat.net/projects/fixsrcip
fixsrcip
est un outil permettant de lier les sockets clients sortants TCP et UDP ( IPv4 ) vers des adresses IP sources spécifiques sur des hôtes multi-hommes
http://freshmeat.net/projects/force_bind
force_bind
vous permet de forcer la liaison sur une IP et/ou un port spécifique. Il fonctionne à la fois avec IPv4 et IPv6 .
- Réponses précédentes
- Plus de réponses