Dump du trafic réseau d'une seule application (de type strace)

11

Je suis à la recherche d'un moyen de vider pcap des données réseau générées par une application, d'une manière stracesimilaire aux vidages syscalls, etc. par exemple:

net-strace somecommand -args

somecommandferait quelque chose sur le réseau et net-straceéconomiserait un vidage pcap de tout le trafic généré par cette application (+ réponses et trafic associé).

Peut-on y parvenir?

gesti
la source
Le problème est que les applications n'envoient pas de paquets (sauf celles qui utilisent des sockets brutes comme ping) mais utilisent une API de mise en réseau qui oblige le noyau à envoyer des paquets (et à en recevoir un associé) en leur nom.
Stéphane Chazelas
Oui, mais il existe des applications (par exemple, proxychains - proxychains.sourceforge.net ) qui exécutent toutes les données d'application via un proxy. Je ne sais pas comment ils le font, mais ils peuvent le capturer et l'envoyer via un proxy. Peut-être que s'il existe un simple proxy (exécuté localement), qui peut vider pcap, les combinés proxychains + proxy peuvent être utilisés pour obtenir le vidage.
gesti
Ils détournent plus probablement l'API (avec LD_PRELOAD) que les paquets. Cela dit, on pourrait peut-être injecter des setsockopt (SO_MARK) dans les applications et utiliser netfilter pour enregistrer les paquets dans ulog.
Stéphane Chazelas
3
Créez un nouvel espace de noms de réseau pour l'application et capturez tout le trafic qui s'y trouve peut également être une approche acceptable pour certains cas d'utilisation.
Stéphane Chazelas

Réponses:

3

Que diriez-vous d'utiliser Strace lui-même?

strace -f -e trace=network -o output_file -s 10000 somecommand -args
Christian Long
la source
La ligne de commande que vous avez donnée semble afficher uniquement les requêtes DNS. L' -eoption de strace ne sélectionne pas souvent ce que vous voulez réellement.
Robin Green du
2

Vous pouvez vider le trafic généré par l'application par différentes méthodes:

Si vous connaissez les ports que l'application utilise, vous pouvez exécuter tcpdump ou cableshark avec des règles de filtrage spécifiques pour ces ports.

Si ce n'est pas une option, vous pouvez marquer les paquets d'application à l'aide d'une règle iptables , correspondant au propriétaire du processus. Vous devrez peut-être créer un nouveau compte d'utilisateur pour isoler complètement le processus. Ensuite, vous pouvez capturer le trafic qui ne correspond qu'à la règle.

Vous pouvez trouver des informations plus complètes sur ce sujet connexe: /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process

Vous pouvez également trouver intéressant ce programme tracedump comme indiqué par le sujet précédent. http://mutrics.iitis.pl/tracedump

almlys
la source