Au moment d'écrire ces lignes, Wireshark ne prend toujours pas en charge cette fonctionnalité; cependant, vous pouvez suivre sa progression (le cas échéant) dans [bug 1184] [1]. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard
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.
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 ...
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.
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 ...
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)
Installez votre application dans le conteneur de la même manière que vous l'installeriez dans un système réel.
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.
Commencer à capturer
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.
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.
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.
Réponses:
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.
la source
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 ...
la source
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.
la source
Utilisez Microsoft Message Analyzer v1.4
Accédez à ProcessId à partir du sélecteur de champ.
Faites un clic droit et ajoutez en tant que colonne
la source
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
la source
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
sg
pour 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 ...
la source
Si vous souhaitez suivre une application qui doit encore être lancée, c'est certainement possible:
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)any
,wlan0
,eth0
, ... choisissez la nouvelle interface virtuelle à ladocker0
place.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:
la source
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==someip
et le tour est joué. Cela ne fonctionnera en aucun cas, mais pour certains, c'est utile.la source
Obtenez le numéro de port en utilisant
netstat
:Et puis utilisez le filtre Wireshark:
la source
L'utilisation
strace
est plus adaptée à cette situation.options
-f
permettant également de suivre tous les processus fourchus,-e trace=netwrok
de filtrer uniquement les appels système du réseau et-s
d'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.
la source
Vous pouvez vérifier les numéros de port avec ces exemples de commandes sur WireShark: -
tcp.port == 80
tcp.port == 14220
la source