Ich würde gerne den Netzwerkverkehr untersuchen, der von einem einzelnen Prozess verarbeitet wird, aber einfache Netzwerkerfassungen funktionieren nicht, da ich mit einem so ausgelasteten System zu tun habe (viel anderer Verkehr geschieht zur gleichen Zeit). Gibt es eine Möglichkeit, den Netzwerkverkehr eines bestimmten Prozesses zu isolieren tcpdump
oder für diesen zu wireshark
erfassen? (Verwenden netstat
ist nicht ausreichend.)
quelle
netstat
auf einem ausgelasteten Computer keine einfache Möglichkeit gibt, einfach Netzwerkerfassungsfilter zu verwenden.netstat
; Ich werde nur langlebige Verbindungen knüpfen können. :(So starten und überwachen Sie einen neuen Prozess:
So überwachen Sie einen vorhandenen Prozess mit einer bekannten PID:
-f
ist für "folge neuen Prozessen"-e
definiert einen Filter-s
Setzt das Limit von Strings auf mehr als 32-p
Nimmt die Prozess-ID, an die angefügt werden sollquelle
Ich weiß, dass dieser Thread ein bisschen alt ist, aber ich denke, das könnte einigen von Ihnen helfen:
Wenn Ihr Kernel dies zulässt, können Sie den Netzwerkverkehr eines einzelnen Prozesses sehr einfach erfassen, indem Sie den Prozess in einem isolierten Netzwerk-Namespace ausführen und im Namespace auch Wireshark (oder andere Standard-Netzwerk-Tools) verwenden.
Das Setup mag etwas komplex erscheinen, aber wenn Sie es erst einmal verstanden haben und sich damit vertraut gemacht haben, wird es Ihnen die Arbeit erheblich erleichtern.
Um dies zu tun:
Erstellen Sie einen Testnetzwerk-Namespace:
Erstellen Sie ein Paar virtueller Netzwerkschnittstellen (veth-a und veth-b):
Ändern Sie den aktiven Namespace der Veth-A-Schnittstelle:
Konfigurieren Sie die IP-Adressen der virtuellen Schnittstellen:
Konfigurieren Sie das Routing im Testnamespace:
Aktivieren Sie ip_forward und richten Sie eine NAT-Regel ein, um den vom erstellten Namespace eingehenden Datenverkehr weiterzuleiten (Sie müssen die Netzwerkschnittstelle und die SNAT-IP-Adresse anpassen):
(Sie können auch die MASQUERADE-Regel verwenden, wenn Sie es vorziehen)
Schließlich können Sie den zu analysierenden Prozess im neuen Namespace ausführen und auch wireshark:
Sie müssen die veth-a-Schnittstelle überwachen.
quelle
socat
.--to-source
Argument aniptables
? Ist dies die IP-Adresse der Schnittstelle, die Sie an die-o
Option übergeben, eine von Ihnen erstellte IP-Adresse oder ??? Ich habe die Maskerade-Version ausprobiert, die nicht benötigt wird--to-source
, wie hier beschrieben , und das hat funktioniert!Hier werden die Verbindungen angezeigt, die eine Anwendung herstellt, einschließlich des verwendeten Ports.
quelle
Nur eine Idee: Ist es möglich, Ihre Anwendung an eine andere IP-Adresse zu binden? In diesem Fall können Sie die üblichen Verdächtigen ( tcpdump usw.) verwenden.
Tools für Anwendungen, die nicht an eine andere IP-Adresse gebunden werden können:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
quelle
Ich habe ein ähnliches Problem kommen , und ich war in der Lage , es zu klären , basierend auf dieser Antwort von IOError , mit NFLOG wie hier :
Dann können Sie den fraglichen Prozess von einem Benutzerkonto aus ausführen, das nichts anderes tut - und voila, Sie haben gerade den Datenverkehr von einem einzelnen Prozess isoliert und erfasst.
Ich wollte nur zurückschicken, falls es jemandem hilft.
quelle
Ich habe eine C-Anwendung geschrieben, die das tut, was in der großartigen Antwort oben von felahdab beschrieben ist!
Siehe hier: nsntrace github repo
quelle
Dies ist ein schmutziger Hack, aber ich würde entweder eine Umleitung oder ein Protokollziel mit iptables für eine bestimmte UID vorschlagen. z.B:
Es könnte sich auch lohnen, etwas wie "--log-tcp-sequence", "--log-tcp-options", "--log-ip-options", "--log-uid" für dieses Protokollziel zu untersuchen . Obwohl ich vermute, dass Ihnen das nur dabei helfen wird, einen PCap nachzubearbeiten, der eine Menge anderer Daten enthält.
Das NFLOG-Ziel kann nützlich sein, wenn Sie Pakete kennzeichnen möchten und dann bestimmte markierte Pakete über einen Netlink-Socket an einen Prozess Ihrer Wahl gesendet werden. Ich frage mich, ob das nützlich wäre, um etwas mit wireshark und Ihrer spezifischen Anwendung, die als bestimmter Benutzer ausgeführt wird, zu hacken.
quelle
Sie können versuchen, tracedump - http://mutrics.iitis.pl/tracedump
Es macht genau das, was Sie wollen, Sie können ihm entweder eine Prozess-ID geben oder ein Programm ausführen.
quelle
Versuchen Sie, den gewünschten Prozess auszuführen :
Es gibt Ihnen einige sehr detaillierte Informationen darüber, was Ihr Prozess tut. Da ein Prozess beliebige Ports öffnen kann, können Sie mithilfe eines vordefinierten Filters möglicherweise etwas verpassen.
Ein anderer Ansatz wäre, eine abgespeckte virtuelle Maschine oder eine Testmaschine in Ihrem Netzwerk zu verwenden und Ihren Prozess isoliert darauf abzulegen. Dann können Sie einfach Wireshark verwenden , um alles von dieser Maschine zu fangen. Sie sind sich ziemlich sicher, dass der von Ihnen erfasste Datenverkehr relevant ist.
quelle
Aufbauend auf der Antwort von ioerror können Sie vermutlich
iptables --uid-owner
eine Markierung für den Verkehr setzen, und dann können Sie wireshark auffordern, nur den Verkehr mit dieser Markierung zu erfassen. Möglicherweise können Sie einen DSCP-Marker (Differential Services Marker), eine Flow-ID oder einen QOS-Marker verwenden.Oder Sie können dies verwenden, um diese Pakete über eine andere Schnittstelle zu senden und dann nur auf dieser Schnittstelle zu erfassen.
quelle
Wireshark Bug # 1184 ist diese Funktion. Es ist noch nicht implementiert.
Kopiert vom Benutzer cmanynard unter ask.wireshark.org
quelle
vielleicht können iptables und ulog funktionieren? Nicht, dass ich ein genaues Rezept hätte, aber ich denke, iptables kann mit Prozessen übereinstimmen. Einmal abgestimmt, könnten Sie ulog verwenden.
quelle
iptables -m owner --pid-owner $PID
wurde in Linux 2.6.14 entfernt: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Ich denke, Sie können ein Shell-Skript erstellen, um die Ausführung von netstat zu durchlaufen und es in einer Textdatei zu protokollieren. So etwas wie (sehr grobe Schritte):
Ich bin kein Programmierer, deshalb kann ich das nicht verfeinern. Aber hier kann jemand dort anfangen, wo ich aufgehört habe, und ein funktionierendes Skript für Sie erstellen.
quelle