Details eines Sockets anhand des Pfadnamens des Sockets herausfinden?

Details eines Sockets anhand des Pfadnamens des Sockets herausfinden?

Ich habe stracebei einem Client-Anwendungsfehler einen Fehler ausgeführt und das Ergebnis war ungefähr wie folgt:

socket(PF_LOCAL, SOCK_SEQPACKET|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
setsockopt(3, SOL_SOCKET, SO_PASSCRED, [1], 4) = 0
connect(3, {sa_family=AF_LOCAL, sun_path="/path/to/socket"}, 19) = -1 EPROTOTYPE (Protocol wrong type for socket)
close(3)                                = 0
exit_group(2)                           = ?
+++ exited with 2 +++

Ich habe dann versucht,erratenden Socket-Typ, indem der Socket vor Ort mit verschiedenen Parametern emuliert wird socat, jedoch ohne Erfolg.

Ich habe mir auch den Code aus dieser Antwort angesehenHier, aber es scheint, als würde ein Socket erstellt und kein vorhandener verwendet, und ich kann anscheinend nicht herausfinden, wie ich einen Socket aus einem Pfad erhalte.

Gibt es eine einfache Möglichkeit, die Details (z. B. den Protokolltyp) eines vorhandenen Sockets anhand des Socket-Pfads (sofern vorhanden) zu ermitteln, ohne den Quellcode zu durchsuchen?

Antwort1

Sie können Folgendes verwenden lsof /path/to/socket:

COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
hindsight 19619 root    6u  unix 0xffff88038612b480      0t0 257123917 /path/to/socket

Wenn Sie das wissen, PIDkönnen Sie mehr über den Prozess selbst erfahren:

cat /proc/19619/io 
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400

Oder Sie können es sszur Anzeige aller Unix-Sockets verwenden.

ss -x
  • -xAnzeige von Unix-Domain-Sockets
  • -eDetaillierte Socket-Informationen anzeigen
  • -mSocket-Speichernutzung anzeigen

und Sie können nach einem bestimmten Typ filtern:

ss -x -A unix_stream

verwandte Informationen