Comment tracer l'activité de mise en réseau d'une commande?

13

Je veux retracer l'activité de mise en réseau d'une commande, j'ai essayé tcpdump et strace sans succès.

Par exemple, si j'installe un package ou que j'utilise une commande qui tente d'atteindre un site, je souhaite afficher cette activité de mise en réseau (le site qu'il tente d'atteindre).

Je suppose que nous pouvons le faire en utilisant tcpdump. J'ai essayé mais il suit toute l'activité de mise en réseau de mon système. Supposons que si j'exécute plusieurs commandes liées au réseau et que je souhaite suivre uniquement une activité de réseau de commandes particulière, il est difficile de trouver la solution exacte.

Y-a-t-il un moyen de faire ça?

MISE À JOUR:

Je ne veux pas suivre tout ce qui se passe sur mon interface réseau. Je veux juste suivre l'activité de mise en réseau de la commande (pour un exemple #yum install -y vim). Tels que le site qu'il tente d'atteindre.

Buvanesh Kumar
la source
1
Placez l'application dans un espace de noms réseau, puis utilisez tcpdump / cableshark. Voir par exemple ici .
dirkt

Réponses:

17

netstat pour plus de simplicité

Utilisation netstatet grepping sur le PID ou le nom du processus:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

Et vous pouvez utiliser watchpour les mises à jour dynamiques:

watch 'netstat -np --inet | grep "thunderbird"'

Avec:

  • -n: Afficher les adresses numériques au lieu d'essayer de déterminer les noms symboliques d'hôte, de port ou d'utilisateur
  • -p: Affiche le PID et le nom du programme auquel appartient chaque socket.
  • --inet: Affiche uniquement les sockets de protocole raw, udp et tcp.

lutte pour la verbosité

Vous avez dit que vous avez essayé l' straceoutil, mais avez-vous essayé l'option trace=network? Notez que la sortie peut être assez verbeuse, vous pourriez donc avoir besoin de quelques salutations. Vous pouvez commencer par saluer "sin_addr".

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

Ou, pour un processus déjà en cours, utilisez le PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr
Gohu
la source
+1 pour netstatlequel IMHO est la solution la plus simple et la plus soignée.
dr01
@Gohu J'ai fait la même chose pour dnf. mais pas de chance. J'ai essayé d'installer certains packages en utilisant dnf, puis je vois que le processus dnf est en cours d'exécution (nom du processus: dnf selon top et ps aux commande). Malheureusement, je n'ai obtenu aucune sortie de netstat -np --inet | grep "dnf".
Buvanesh Kumar
+1 pour strace. Il est résolu mon problème. Je peux obtenir les adresses IP. Merci beaucoup pour votre réponse :) @Gohu. Je suppose qu'il donne toutes les adresses IP qu'il atteint sur le réseau (par exemple, l'IP du routeur et d'autres IP). Si vous le savez, est-il possible de suivre uniquement l'IP de destination?
Buvanesh Kumar
Vous pouvez essayer de filtrer la stracesortie encore plus, en ne gardant que les connectappels système et en supprimant les dnsdemandes (port 53) avec:| grep connect | grep -v 'sin_port=htons(53)'
Gohu
+1 pour l'option trace-network sur strace
phreed
5

Je créerais un nouvel espace de noms de réseau , le relierais au vrai réseau, puis surveillerais le pont avec tcpdump.

Simon Richter
la source
1
Merci d'avoir répondu. Ce serait génial si vous me disiez comment :).
Buvanesh Kumar
5

sysdig vous permet de surveiller toute l'activité du noyau ou de plusieurs commandes en cours d'exécution dans votre système à la fois, y compris et sans s'y limiter, l'activité du réseau.

Comme la sortie peut être volumineuse, vous devez créer des filtres, la page par défaut pour les filtres les plus basiques est assez compréhensible.

Il a également l'avantage de ne pas être utilisé comme enveloppe d'application comme dans straceet il peut être assez puissant.

À partir d'exemples Sysdig

La mise en réseau

Voir les meilleurs processus en termes d'utilisation de la bande passante réseau

sysdig -c topprocs_net 

Afficher les données réseau échangées avec l'hôte 192.168.0.1

Comme binaire:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

En ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

Voir les principaux ports de serveur local:

En termes de connexions établies:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

En termes d'octets totaux:

sysdig -c fdbytes_by fd.sport 

Voir les meilleures adresses IP des clients

En termes de connexions établies

sysdig -c fdcount_by fd.cip "evt.type=accept"   

En termes d'octets totaux

sysdig -c fdbytes_by fd.cip 

Liste toutes les connexions entrantes qui ne sont pas desservies par apache.

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
Rui F Ribeiro
la source
1

Vous pouvez utiliser WireShark pour renifler tout le trafic d'entrée et de sortie d'une interface réseau. Si vous avez besoin d'une option sans interface graphique, vous pouvez utiliser tshark.

Avec les deux options, vous pouvez voir tout le trafic réseau et l'enregistrer pour analyser plus tard toutes les connexions établies.

Ricard Molins
la source
1
Comme je l'ai dit plus tôt, si j'exécute plusieurs commandes liées au réseau, comment puis-je savoir quelle commande obtient quel site?
Buvanesh Kumar
Il s'agit d'une réponse plus générique. Que je sais déjà que nous pouvons suivre l'activité de mise en réseau d'une interface de mise en réseau :). Je recherche le suivi d'une statique de réseau de commande particulière.
Buvanesh Kumar
Si vous savez quels ports la commande utilise, vous pourrez peut-être filtrer le sniff pour le limiter à la commande souhaitée. Cependant, cela peut ne pas être possible dans votre situation.
Ricard Molins