Filtern nach Prozess / PID in Wireshark

117

Gibt es eine Möglichkeit, einen TCP / SSL- Stream basierend auf einer bestimmten Prozess-ID mithilfe zu filtern / zu verfolgen ? Wireshark ?

Ryan Fernandes
quelle
7
Zum jetzigen Zeitpunkt unterstützt Wireshark diese Funktion noch nicht. Sie können jedoch den Fortschritt (falls vorhanden) in [Fehler 1184] [1] verfolgen. [1]: bugs.wireshark.org/bugzilla/show_bug.cgi?id=1184
Christopher Maynard

Antworten:

58

Ich verstehe nicht wie. Die PID schafft es nicht auf das Kabel (im Allgemeinen), und mit Wireshark können Sie sehen, was sich auf dem Kabel befindet - möglicherweise alle Maschinen, die über das Kabel kommunizieren. Prozess-IDs sind ohnehin nicht auf verschiedenen Computern eindeutig.

Vinay Sajip
quelle
7
Guter Punkt ... das habe ich auch gedacht ... lass mich einen Tag warten, bevor ich das schließe, nur für den Fall, dass es einen Wireshark-Ninja gibt, der das schafft.
Ryan Fernandes
30
Wireshark weiß, welcher Port verwendet wird, und das Betriebssystem kennt die PID des Prozesses, der den Port verwendet. Bei Codeänderungen sollte es Wireshark möglich sein, den Port der PID zuzuordnen. In einigen Fällen schlägt dies fehl, wenn das Betriebssystem einen Port einer anderen App neu zuweist, bevor Wireshark das Betriebssystem nach der PID für einen Port abfragt. Dies ist also nicht narrensicher und störungssicher, aber wenn der Benutzer auf diese Einschränkungen aufmerksam gemacht wird, ist dies dennoch eine nützliche Funktion.
Dojo
Ich sage, fügen Sie einfach ein Modul zu Wireshark hinzu, das auf das Öffnen / Schließen des Ports wartet und die PID dem Port zuordnet. Wenn Sie dies mit dem Hauptprozess synchronisieren, erhalten Sie einen perfekten Port-to-Process-Mapper. Beim Lesen des Fehlers aus dem Fragekommentar ist das Modul jedoch nicht so einfach zu erstellen.
Vesper
Ich erinnere mich, dass beim ersten Herunterladen von wireshark ein Prozessbaum angezeigt wurde und Sie einen zu überwachenden Prozess auswählen konnten. Keine Ahnung, wann diese Option verschwand, aber sie war da.
Tomáš Zato - Wiedereinsetzung Monica
90

Nur für den Fall, dass Sie nach einem alternativen Weg suchen und die von Ihnen verwendete Umgebung Windows ist, ist Microsoft Network Monitor 3.3 eine gute Wahl. Es hat die Spalte Prozessname. Sie können es einfach über das Kontextmenü zu einem Filter hinzufügen und den Filter anwenden. Wie üblich ist die GUI sehr intuitiv ...

Sreejith Menon
quelle
10
Microsoft Network Monitor 3.4 ist unter microsoft.com/en-us/download/details.aspx?id=4865
gt
39
Es gibt auch Microsoft Message Analyzer , eine Microsoft-Version von Wireshark (und, wie ich verstehe, der Nachfolger von Network Monitor), die jedoch etwas besser integriert ist. In der Spaltenauswahl befindet sich unter 'Etw' -> 'EtwProviderMsg' eine Spalte für 'PID'. Es funktioniert gut!
Cameron
3
Der genaue Pfad ist EtwProviderMsg -> EventRecord -> Header ->
ProcessId
Ich habe es gerade versucht und Microsoft Message Analyzer ist so eine langweilige Software! Fast brachte mein System zum Kriechen. Sehr eingängige Benutzeroberfläche. Hat jemand einen Weg gefunden, die Liste mit den gesammelten Daten zu löschen? Ich gab auf und deinstallierte dieses Stück Müll. (PS. Schade, dass Wireshark-Entwickler keine Funktion zum Verbinden des PID- / Prozessnamens mit einem Port im Filter hinzugefügt haben. Dies ist sehr einfach. Dies kann wichtig sein, um zu sehen, was während des Startvorgangs im Prozess vor sich geht Eine Problemumgehung Ich könnte eine allgemeine Vorstellung von ProcMon von SysInternals bekommen.)
c00000fd
1
Ich habe kürzlich den Microsoft Message Analyzer entdeckt und er ist ein nützliches Tool! Wie ist es möglich, dass ich noch nie davon gehört habe? So unterschätzt. Es verfügt über hervorragende Filterfunktionen, da es viel besser in Windows integriert ist als Wireshark. Ich habe auf allen Hosts meiner Firma innerhalb von ca. 3 Monaten nach der täglichen Arbeit darauf umgestellt. Vielen Dank an @Cameron für seinen Kommentar unter dieser Antwort! :-)
Skipper
16

Sie können die Portnummern von Wireshark bis zu den Portnummern von beispielsweise netstat abgleichen, die Ihnen die PID eines Prozesses anzeigen, der diesen Port überwacht .

tw39124
quelle
12
Nun, das könnte nicht funktionieren. Das Programm öffnet und schließt viele lokale und entfernte Ports
Ryan Fernandes
11

Verwenden Sie Microsoft Message Analyzer v1.4

Navigieren Sie in der Feldauswahl zu ProcessId.

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

Klicken Sie mit der rechten Maustaste und klicken Sie als Spalte hinzufügen

Enki
quelle
1
Danke, dass du mich in diese Richtung gelenkt hast, es ist genau das, was ich brauchte. FWIW, die Top-Level-Gruppe "ProcMon" scheint dieselbe ProcessId sowie andere Informationen wie Prozessname, ParentId usw. zu enthalten
Tobias J
3

Unter Windows gibt es einen experimentellen Build, der dies tut, wie in der Mailingliste Filtern nach lokalem Prozessnamen beschrieben

patraulea
quelle
In Wireshark bedeutet dies: "Sie können die Portnummern von Wireshark bis zu den Portnummern von beispielsweise netstat abgleichen, die Ihnen die PID eines Prozesses anzeigen, der diesen Port überwacht." Zeug aus Tom Woolfreys Kommentar, daher unterliegt es (wie in der Nachricht vermerkt) den Einschränkungen dieses Mechanismus.
3

Dies ist eine wichtige Sache, um zu überwachen, wo bestimmte Prozesse versuchen, eine Verbindung herzustellen, und es scheint, dass es unter Linux keine bequeme Möglichkeit gibt, dies zu tun. Es sind jedoch mehrere Problemumgehungen möglich, und ich halte es daher für erwähnenswert, sie zu erwähnen.

Es gibt ein Programm namens nonet , mit dem ein Programm ohne Internetzugang ausgeführt werden kann (ich habe die meisten Programmstarter auf meinem System damit eingerichtet). Es verwendet setguid, um einen Prozess in der Gruppe nonet auszuführen, und legt eine iptables- Regel fest, um alle Verbindungen aus dieser Gruppe abzulehnen.

Update: Mittlerweile verwende ich ein noch einfacheres System. Mit ferm können Sie problemlos eine lesbare iptables-Konfiguration erstellen und mit dem Programm einfach sgein Programm mit einer bestimmten Gruppe ausführen. Mit Iptables können Sie auch den Datenverkehr umleiten, sodass Sie ihn sogar an eine separate Schnittstelle oder einen lokalen Proxy an einem Port weiterleiten können, über den Sie die Pakete direkt von iptables aus in Wireshark filtern oder protokollieren können, wenn Sie nicht das gesamte Internet deaktivieren möchten, während Sie dies tun überprüfen den Verkehr.

Es ist nicht sehr kompliziert, es anzupassen, um ein Programm in einer Gruppe auszuführen und den gesamten anderen Datenverkehr mit iptables für die Ausführungslebensdauer zu reduzieren. Anschließend können Sie nur den Datenverkehr aus diesem Prozess erfassen.

Wenn ich jemals dazu komme, es zu schreiben, werde ich hier einen Link posten.

Außerdem können Sie jederzeit einen Prozess in einer virtuellen Maschine ausführen und die richtige Schnittstelle abhören, um die damit verbundenen Verbindungen zu isolieren. Dies wäre jedoch eine minderwertige Lösung ...


quelle
3

Wenn Sie einer Anwendung folgen möchten, die noch gestartet werden muss, ist dies sicherlich möglich:

  1. Installieren Sie Docker (siehe https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ ).
  2. Öffnen Sie ein Terminal und führen Sie einen winzigen Container aus: docker run -t -i ubuntu /bin/bash(Ändern Sie "Ubuntu" in Ihre Lieblingsdistribution, dies muss nicht das gleiche sein wie in Ihrem realen System.)
  3. Installieren Sie Ihre Anwendung im Container auf dieselbe Weise, wie Sie sie in einem realen System installieren würden.
  4. Starten Sie Wireshark in Ihrem realen System und gehen Sie zu Capture> Optionen. In dem sich öffnenden Fenster sehen Sie alle Ihre Schnittstellen. Statt der Wahl any, wlan0, eth0, ... wählen Sie die neue virtuelle Schnittstelle docker0statt.
  5. Starten Sie die Aufnahme
  6. Starten Sie Ihre Anwendung im Container

Möglicherweise haben Sie Zweifel daran, Ihre Software in einem Container auszuführen. Hier finden Sie die Antworten auf die Fragen, die Sie wahrscheinlich stellen möchten:

  • Funktioniert meine Anwendung in einem Container? Mit ziemlicher Sicherheit ja, aber möglicherweise müssen Sie etwas über Docker lernen, damit es funktioniert
  • Wird meine Anwendung nicht langsam ausgeführt? Unerheblich. Wenn Ihr Programm eine Woche lang umfangreiche Berechnungen ausführt, kann es jetzt eine Woche und 3 Sekunden dauern
  • Was ist, wenn meine Software oder etwas anderes im Container kaputt geht? Das ist das Schöne an Containern. Was auch immer im Inneren läuft, kann nur den aktuellen Container beschädigen und den Rest des Systems nicht verletzen.
Garo
quelle
0

In einigen Fällen können Sie nicht nach Prozess-ID filtern. In meinem Fall musste ich beispielsweise den Datenverkehr von einem Prozess aus abhören. Aber ich fand in seiner Konfiguration Zielmaschine IP-Adresse, Filter ip.dst==someipund Voila hinzugefügt . Es wird auf keinen Fall funktionieren, aber für einige ist es nützlich.

Alex Zhukovskiy
quelle
0

Holen Sie sich die Portnummer mit netstat:

netstat -b

Und dann verwenden Sie den Wireshark-Filter:

tcp.port == portnumber
Sahil Lakhwani
quelle
Ich bin mir nicht sicher, ob dies ein narrensicherer Weg ist. Wenn ein TCP-Server einen Port überwacht, aber die TCP-Verarbeitung des Kernels nicht blockiert hat, können einer oder beide Kernel oder Ihre Anwendung auf den Port antworten.
aeb0
0

Die Verwendung straceist für diese Situation besser geeignet.

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

Optionen -fzum Verfolgen aller gegabelten Prozesse, -e trace=netwrokzum Filtern nur des Netzwerksystemaufrufs und -szum Anzeigen der Zeichenfolgenlänge von bis zu 10000 Zeichen.

Sie können auch nur bestimmte Anrufe wie Sende-, Empfangs- und Lesevorgänge verfolgen.

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

Mit den folgenden Befehlsbeispielen können Sie auf wireshark nach Portnummern suchen: -

tcp.port == 80

tcp.port == 14220

Rajeev Das
quelle