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?J'ai rencontré un problème similaire et j'ai pu le résoudre en me basant sur les éléments suivants cette réponse par ioerror en utilisant NFLOG comme décrit aquí :
# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30
# dumpcap -i nflog:30 -w uid-1000.pcap
Ensuite, vous pouvez créer l'exécution du processus en question à partir d'un compte utilisateur qui ne fait rien d'autre - et voilà, vous venez d'isoler et de capturer le trafic d'un seul processus.
Je voulais juste poster un message au cas où ça aiderait quelqu'un.
J'ai écrit une application C qui fait ce qui est décrit dans l'excellente réponse ci-dessus par felahdab !
Voir ici : nsntrace github repo
Vous pouvez essayer tracedump - http://mutrics.iitis.pl/tracedump
Il fait exactement ce que vous voulez, vous pouvez lui donner un ID de processus ou un programme à exécuter.
Essayez d'exécuter le processus qui vous intéresse sous strace :
strace ping www.askubuntu.com
Il vous donnera des informations très détaillées sur ce que fait votre processus. Comme un processus peut ouvrir tous les ports qu'il veut où il veut, en utilisant un filtre prédéfini, vous pouvez manquer quelque chose.
Une autre approche consisterait à utiliser une machine virtuelle dépouillée ou une machine de test sur votre réseau, et à y placer votre processus de manière isolée. Vous pouvez alors simplement utiliser Wireshark pour tout attraper de cette machine. Vous serez pratiquement sûr que le trafic que vous capturerez sera pertinent.
C'est un sale hack mais je suggérerais soit un détournement ou une cible de log avec iptables pour un UID donné. eg :
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG
Il pourrait également être utile de chercher quelque chose comme '--log-tcp-sequence', '--log-tcp-options', '--log-ip-options', '--log-uid' pour cette cible d'enregistrement. Bien que je pense que cela ne vous aidera qu'à post-traiter un pcap qui inclut une tonne d'autres données.
La cible NFLOG peut être utile si vous voulez marquer des paquets et ensuite certains paquets marqués seront envoyés sur une socket netlink à un processus de votre choix. Je me demande si cela serait utile pour pirater quelque chose avec wireshark et votre application spécifique s'exécutant sous un utilisateur spécifique ?