Wie kann ich unter Linux feststellen, welcher Prozess Ethernet-Pakete sendet?

18

Ich führe gkrellm aus, was zeigt, dass ein Prozess auf meinem Debian-Linux-System ungefähr 500 KB / s in eth0 schreibt. Ich möchte herausfinden, um welchen Prozess es sich handelt. Ich weiß ein bisschen über Netstat Bescheid, aber es zeigt eine Unmenge offener TCP-Verbindungen und ich kann nicht scheinen, dass es irgendwelche Informationen über den Verkehr erzeugt.

Weiß jemand, wie ich eine Liste von Prozessen erhalten kann , die tatsächlich mit der eth0 - Schnittstelle , so dass ich den Täter ausfindig zu machen kann?


FOLLOWUP : Die Debian-Linux-Distribution enthält ein nethogsPaket, das dieses Problem definitiv löst. Verwandte Tools, die nicht ganz auf dem neuesten Stand sind iftop, sind netstat, und lsof.

Norman Ramsey
quelle
iptrafist gut
Luv33preet
Dies funktionierte für mich für sehr kurzlebige UDP-Börsen: serverfault.com/a/683327/119360
Luc

Antworten:

16

Ich bevorzuge Nethogs . Es ist ein kleines ncurses-basiertes Konsolenprogramm, das den Netzwerkverkehrsstatus pro Prozess auf bequeme Weise anzeigt.

Janne Pikkarainen
quelle
18

netstat -ptuSie erhalten die Prozess-IDs (zusammen mit den Standard-Netstat-Informationen) für alle TCP- und UDP-Verbindungen. (Normale Benutzer können nicht alle Prozesse identifizieren.)

Wenn etwas eine ganze Menge reger Verkehr aussenden sollten Sie es sehen auf Recv-Qoder Send-QSpalten 2 und 3 jeweils.

Beispiele:
Recv-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k2'

Send-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k3'

Wenn Sie vermuten, dass dieser Prozess von einem anderen Prozess ausgelöst wird ps axf.

84104
quelle
(Nicht, dass das Flag -u erforderlich ist, wenn Sie wissen, dass Sie nach TCP-Verbindungen suchen.)
andol
5

Eine manuellere Operation, wenn Sie nur einen Prozess zum Senden / Empfangen von Daten suchen, ist das Ausführen des lsofBefehls. Dies listet alle offenen Dateien für jeden Prozess auf, die Netzwerkverbindungen enthalten, da sie Dateideskriptoren für das Betriebssystem sind

Nicht sicher, ob dies das ist, wonach Sie suchen.

gdurham
quelle
4

Installieren Sie iftop(einfach textbasiert) oder ntop(grafisch).

David Schwartz
quelle
1
iftopNur Bandbreitennutzung auf einer Schnittstelle anzeigen.
Quanten
Es zeigt viel mehr als das. Standardmäßig wird es nach Host unterteilt.
David Schwartz
Kann es alle Prozesse auflisten, die eine Schnittstelle verwenden? Wenn ja, können Sie uns bitte den Befehl und die Optionen zeigen?
Quanten
1
Nicht direkt. Aber sobald Sie den Host gefunden haben, können Sie den Prozess zum Beispiel mit finden netstat -pn.
David Schwartz
3

Verwenden Sie tcpdumpdiese Option, um einige Pakete auf dieser Schnittstelle zu durchsuchen:

# tcpdump -vv -s0 -i eth0 -c 100 -w /tmp/eth0.pcap

Auf Client kopieren und mit Wireshark öffnen, um zu sehen, was passiert.

Quanten
quelle
Es ist nicht der einfachste Weg, um einfache Statistiken zu erhalten, aber alles, was noch etwas komplizierter ist und wireshark wird glänzen!
Silverfire