Filtrer par processus / PID dans Wireshark


Réponses:


58

Je ne vois pas comment. Le PID ne parvient pas sur le fil (en général), et Wireshark vous permet de regarder ce qui se trouve sur le fil - potentiellement toutes les machines qui communiquent sur le fil. De toute façon, les ID de processus ne sont pas uniques sur différentes machines.


7
bon point ... c'est ce que je pensais aussi ... laissez-moi attendre un jour avant de fermer ceci, juste au cas où il y aurait un ninja de wirehark là-bas qui parvient à le faire ..
Ryan Fernandes

30
Wireshark sait quel port est utilisé et le système d'exploitation connaît le PID du processus qui utilise le port. Avec les changements de code, il devrait être possible pour Wireshark de mapper le port au PID. Dans certains cas, cela échouerait, comme lorsque le système d'exploitation réalloue un port à une application différente juste avant que Wireshark ne demande au système d'exploitation le PID d'un port. Donc, cela ne sera pas infaillible et à l'épreuve des pépins, mais si l'utilisateur est informé de ces limitations, ce serait toujours une fonctionnalité utile.
Dojo

Je dis simplement ajouter un module à Wireshark qui écoute les ouvertures / fermetures de port et mappe le PID au port. Synchronisez-le avec le processus principal et vous obtenez un mappeur de port à processus parfait. Cependant, en lisant le bogue du commentaire de la question, le module n'est pas aussi simple à créer.
Vesper

Je me souviens de la première fois que j'ai téléchargé WireShark, il montrait un arbre de processus et vous pouviez sélectionner un processus à surveiller. Je ne sais pas quand cette option a disparu, mais elle était là.
Tomáš Zato - Réintégrer Monica

90

Juste au cas où vous cherchez un autre moyen et que l'environnement que vous utilisez est Windows, le Moniteur réseau 3.3 de Microsoft est un bon choix. Il a la colonne de nom de processus. Vous l'ajoutez facilement à un filtre à l'aide du menu contextuel et appliquez le filtre .. Comme d'habitude, l'interface graphique est très intuitive ...


10
Microsoft Network Monitor 3.4 est à microsoft.com/en-us/download/details.aspx?id=4865
gt

39
Il y a aussi Microsoft Message Analyzer qui est essentiellement la version de Microsoft de Wireshark (et le successeur de Network Monitor si je comprends bien), mais un peu mieux intégré. Dans le sélecteur de colonne, sous «Etw» -> «EtwProviderMsg», il y a une colonne pour «PID». Ça marche bien!
Cameron

3
Le chemin exact est EtwProviderMsg -> EventRecord -> Header -> ProcessId
r590

Je viens de l'essayer et que Microsoft Message Analyzer est un logiciel si terne! J'ai presque amené mon système à une exploration. Interface utilisateur très contre-intuitive aussi. Quelqu'un a-t-il trouvé un moyen d'effacer la liste avec les données collectées? J'ai abandonné et désinstallé cette poubelle. (PS. Dommage que les développeurs de Wireshark n'aient pas ajouté de fonctionnalité pour connecter le nom du PID / Processus à un port dans le filtre. C'est très facile à faire. Cela peut être critique pour voir ce qui se passe dans le processus pendant son démarrage. Comme une solution de contournement que je pourrais avoir une idée générale en utilisant ProcMon de SysInternals.)
c00000fd

1
Je viens de découvrir Microsoft Message Analyzer récemment et c'est un outil tellement utile! Comment est-il possible que je n'en ai jamais entendu parler. Tellement sous-estimé. Il a d'excellentes capacités de filtrage en raison d'une bien meilleure intégration avec Windows que Wireshark. J'y suis passé sur tous les hôtes de mon entreprise dans les 3 mois suivant le travail quotidien. Une immense gratitude à @Cameron pour son commentaire sous cette réponse! :-)
Skipper

16

Vous pouvez faire correspondre les numéros de port de WireShark aux numéros de port de, par exemple, netstat qui vous indiquera le PID d'un processus écoutant sur ce port.


12
eh bien, cela pourrait ne pas fonctionner ... le programme s'ouvre et ferme beaucoup de ports locaux et distants
Ryan Fernandes

11

Utilisez Microsoft Message Analyzer v1.4

Accédez à ProcessId à partir du sélecteur de champ.

Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId

Faites un clic droit et ajoutez en tant que colonne


1
Merci de m'avoir indiqué dans cette direction, c'est exactement ce dont j'avais besoin. FWIW, le groupe de niveau supérieur "ProcMon" semble contenir le même ProcessId, ainsi que d'autres informations telles que le nom du processus, ParentId, etc.
Tobias J

3

Sur Windows, il existe une version expérimentale qui fait cela, comme décrit sur la liste de diffusion, Filtrer par nom de processus local


Cela fait, dans Wireshark, le "Vous pouvez faire correspondre les numéros de port de Wireshark aux numéros de port de, par exemple, netstat qui vous indiquera le PID d'un processus écoutant sur ce port." contenu du commentaire de Tom Woolfrey, il est donc (comme le note le message) soumis aux limitations de ce mécanisme.

3

C'est une chose importante à faire pour surveiller où certains processus essaient de se connecter, et il semble qu'il n'y ait aucun moyen pratique de le faire sous Linux. Cependant, plusieurs solutions de contournement sont possibles, et je pense donc qu'il vaut la peine de les mentionner.

Il existe un programme appelé nonet qui permet d'exécuter un programme sans accès à Internet (j'ai configuré la plupart des lanceurs de programme sur mon système). Il utilise setguid pour exécuter un processus dans le groupe nonet et définit une règle iptables pour refuser toutes les connexions de ce groupe.

Mise à jour: j'utilise maintenant un système encore plus simple, vous pouvez facilement avoir une configuration iptables lisible avec ferm, et utiliser simplement le programme sgpour exécuter un programme avec un groupe spécifique. Iptables vous permet également de rediriger le trafic afin que vous puissiez même l'acheminer vers une interface distincte ou un proxy local sur un port qui vous permet de filtrer dans WireShark ou de LOGER les paquets directement à partir d'iptables si vous ne voulez pas désactiver tout Internet pendant que vous vérifient le trafic.

Ce n'est pas très compliqué de l'adapter pour exécuter un programme dans un groupe et couper tout autre trafic avec iptables pendant la durée de vie de l'exécution, puis vous pourriez capturer le trafic de ce processus uniquement.

Si jamais j'arrive à l'écrire, je posterai un lien ici.

Sur une autre note, vous pouvez toujours exécuter un processus dans une machine virtuelle et renifler la bonne interface pour isoler les connexions qu'il établit, mais ce serait une solution assez inférieure ...


3

Si vous souhaitez suivre une application qui doit encore être lancée, c'est certainement possible:

  1. Installez docker (voir https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ )
  2. Ouvrez un terminal et exécutez un petit conteneur: docker run -t -i ubuntu /bin/bash(remplacez "ubuntu" par votre distribution préférée, ce n'est pas forcément la même chose que dans votre système réel)
  3. Installez votre application dans le conteneur de la même manière que vous l'installeriez dans un système réel.
  4. Démarrez WireShark dans votre système réel, allez dans capture> options. Dans la fenêtre qui s'ouvrira, vous verrez toutes vos interfaces. Au lieu de choisir any, wlan0, eth0, ... choisissez la nouvelle interface virtuelle à la docker0place.
  5. Commencer à capturer
  6. Démarrez votre application dans le conteneur

Vous pourriez avoir des doutes sur l'exécution de votre logiciel dans un conteneur, voici donc les réponses aux questions que vous voudrez probablement poser:

  • Mon application fonctionnera-t-elle dans un conteneur? Presque certainement oui, mais vous devrez peut-être en apprendre un peu plus sur docker pour le faire fonctionner
  • Mon application ne fonctionnera-t-elle pas lentement? Négligeable. Si votre programme exécute des calculs lourds pendant une semaine, cela peut maintenant prendre une semaine et 3 secondes
  • Et si mon logiciel ou autre chose se brise dans le conteneur? C'est la bonne chose à propos des conteneurs. Tout ce qui se passe à l'intérieur ne peut que briser le conteneur actuel et ne peut pas nuire au reste du système.

0

Dans certains cas, vous ne pouvez pas filtrer par identifiant de processus. Par exemple, dans mon cas, j'avais besoin de renifler le trafic d'un processus. Mais j'ai trouvé dans sa configuration l'adresse IP de la machine cible, un filtre ajouté ip.dst==someipet le tour est joué. Cela ne fonctionnera en aucun cas, mais pour certains, c'est utile.


0

Obtenez le numéro de port en utilisant netstat:

netstat -b

Et puis utilisez le filtre Wireshark:

tcp.port == portnumber

Je ne suis pas sûr que ce soit un moyen infaillible. Si vous avez un serveur TCP à l'écoute sur un port mais que vous n'avez pas bloqué la gestion TCP du noyau, l'un ou les deux du noyau ou de votre application peuvent répondre sur le port.
aeb0

0

L'utilisation straceest plus adaptée à cette situation.

strace -f -e trace=network -s 10000 -p <PID>;

options -fpermettant également de suivre tous les processus fourchus, -e trace=netwrokde filtrer uniquement les appels système du réseau et -sd'afficher une longueur de chaîne allant jusqu'à 10000 caractères.

Vous pouvez également suivre uniquement certains appels tels que les opérations d'envoi, de réception et de lecture.

strace -f -e trace=send,recv,read -s 10000 -p <PID>;

-16

Vous pouvez vérifier les numéros de port avec ces exemples de commandes sur WireShark: -

tcp.port == 80

tcp.port == 14220

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.