Descubra os detalhes de um soquete pelo nome do caminho do soquete?

Descubra os detalhes de um soquete pelo nome do caminho do soquete?

Executei uma stracefalha no aplicativo cliente e obtive algo assim:

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

Eu então tenteiadivinharo tipo de soquete emulando o soquete com vários parâmetros socat, mas sem sucesso.

Eu também olhei o código desta respostaaqui, mas parece estar criando um soquete, não usando um existente, e não consigo descobrir como obter um soquete de um caminho.

Sem pesquisar o código-fonte, existe uma maneira fácil de determinar os detalhes (como o tipo de protocolo) de um soquete existente a partir do caminho do soquete (se existir)?

Responder1

Você pode usar 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

Conhecendo o PIDvocê poderá saber mais sobre o processo em si:

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

Ou você pode usar sspara exibir todos os soquetes Unix.

ss -x
  • -xExibir soquetes de domínio Unix
  • -eMostrar informações detalhadas do soquete
  • -mMostrar uso de memória do soquete

e você pode filtrar por algum tipo:

ss -x -A unix_stream

informação relacionada