Gibt es eine Möglichkeit, einen TCP / SSL- Stream basierend auf einer bestimmten Prozess-ID mithilfe zu filtern / zu verfolgen ? Wireshark ?
Gibt es eine Möglichkeit, einen TCP / SSL- Stream basierend auf einer bestimmten Prozess-ID mithilfe zu filtern / zu verfolgen ? Wireshark ?
Antworten:
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.
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 ...
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 .
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
Unter Windows gibt es einen experimentellen Build, der dies tut, wie in der Mailingliste Filtern nach lokalem Prozessnamen beschrieben
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 sg
ein 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 ...
Wenn Sie einer Anwendung folgen möchten, die noch gestartet werden muss, ist dies sicherlich möglich:
docker run -t -i ubuntu /bin/bash
(Ändern Sie "Ubuntu" in Ihre Lieblingsdistribution, dies muss nicht das gleiche sein wie in Ihrem realen System.)any
, wlan0
, eth0
, ... wählen Sie die neue virtuelle Schnittstelle docker0
statt.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:
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==someip
und Voila hinzugefügt . Es wird auf keinen Fall funktionieren, aber für einige ist es nützlich.
Holen Sie sich die Portnummer mit netstat
:
netstat -b
Und dann verwenden Sie den Wireshark-Filter:
tcp.port == portnumber
Die Verwendung strace
ist für diese Situation besser geeignet.
strace -f -e trace=network -s 10000 -p <PID>;
Optionen -f
zum Verfolgen aller gegabelten Prozesse, -e trace=netwrok
zum Filtern nur des Netzwerksystemaufrufs und -s
zum 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>;
Mit den folgenden Befehlsbeispielen können Sie auf wireshark nach Portnummern suchen: -
tcp.port == 80
tcp.port == 14220