Wie erfahre ich mehr über Socket-Dateien in / proc / fd?

33

Wenn ich in / proc / $ mypid / fd / schaue, sehe ich diese Dateien

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

Da ich Zugriff auf den Code habe, weiß ich, dass diese Sockets an TCP-Verbindungen gebunden sind (einer ist eine Verbindung zu Port 5672 auf einem Computer, ein anderer ist eine Verbindung zu Port 3306 auf einem anderen Computer), aber ich möchte wissen, welcher Socket ist an welche verbindung gebunden. Wie kann ich das machen?

Wie kann ich das Betriebssystem generell fragen, was sich am anderen Ende des Sockets befindet?

benhsu
quelle
1
Verwenden Sie socat....
heemayl
Siehe auch Wer hat das andere Ende dieses Unix-Socketpaars?
Gilles 'SO- hör auf böse zu sein'

Antworten:

40

Befehl lsof

Eine gute Option könnte sein lsof. Wie es man lsofheißt, ist es praktisch, um Informationen zu erhalten open files such as Internet sockets or Unix Domain sockets.


Es benutzen

Verschaffen Sie sich zunächst einen Überblick über /proc/$PID/fd/und die aufgeführten Steckdosennummern.
Zum Beispiel socket:[14240]könnte Sie interessieren.

Verwenden Sie dann lsof -i -a -p $PID, um eine Liste aller verwendeten Netzwerkdateien zu drucken $PID.

  • -i Erzeugt eine Liste von Netzwerkdateien, die zu einem Benutzer oder Prozess gehören

  • -a Kombiniert oder verknüpft die angegebenen Parameter mit AND

  • -p $PID Wählt nur Informationen zu Ihrem Prozess aus

Eine typische Ausgabe für meinen Browser mit einer PID von 2543könnte sein:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

und ähnliche Zeilen.

Groß! Schauen Sie sich nun die DEVICESäule genauer an . Es passt zu unserer bisher gelisteten Steckdose von /proc/$PID/fd/!
Und dank des NAMEAbschnitts können wir sagen, was das andere Ende unserer Steckdose ist.

In einer realen Umgebung erhalten Sie möglicherweise eine gute Menge an Ausgabe, aber nur Filter oder grepfür Ihre Socket von Interesse.

Ich bin mir ziemlich sicher, dass man alle Befehle kombinieren kann, aber das sollte ausreichen, um Ihnen den Einstieg zu erleichtern.

pidi
quelle
Vielen Dank! Upvoted und akzeptiert. Ich sehe einen Socket in lsof als "Unix 0xffff88002704d380 0t0 1423733559 Socket", wie grabe ich in was 0xffff88002704d380 ist?
benhsu
1
"unix 0xfff ..." scheint die Kernel-Speicheradresse einer unix_sock-Struktur zu sein. Diese Struktur enthält einen Zeiger auf Ihren Socket-Endpunkt. Schauen Sie sich an grep -rni ffff88002704d380 /proc. irgendwo unter / proc / kann deine antwort liegen, catdeine datei grep gefunden. Aber nimm mich nicht fest ... Kann hier furchtbar falsch sein.
pidi
lsofliest andere Informationen über die Buchse aus /proc/net/tcp, /proc/net/tcp6, /proc/net/udp, und so weiter auf Socket - Typ abhängig.
Jesin