Узнать подробную информацию о сокете по имени пути к сокету?

Узнать подробную информацию о сокете по имени пути к сокету?

Я запустил проверку straceна сбое клиентского приложения и получил что-то вроде этого:

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 +++

Затем я попыталсяпредполагатьтип сокета путем эмуляции сокета на месте с различными параметрами socat, но безрезультатно.

Я также посмотрел код из этого ответаздесь, но, похоже, он создает сокет, а не использует существующий, и я не могу найти, как получить сокет из пути.

Есть ли простой способ, не заглядывая в исходный код, определить детали (например, тип протокола) существующего сокета по пути к сокету (если он существует)?

решение1

Вы можете использовать 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

Зная, PIDвы можете узнать больше о самом процессе:

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

Или вы можете использовать его ssдля отображения всех сокетов Unix.

ss -x
  • -xОтображение сокетов домена Unix
  • -eПоказать подробную информацию о сокетах
  • -mПоказать использование памяти сокета

и вы можете отфильтровать по определенному типу:

ss -x -A unix_stream

Связанный контент