Descobre detalhes de um socket pelo nome do caminho do socket?

0

Eu executei um strace em uma falha 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 +++

Em seguida, tentei adivinhar o tipo de soquete, emulando o soquete com vários parâmetros para socat , mas sem sucesso.

Eu também observei o código desta resposta aqui , mas parece que ele está fazendo um soquete, sem usar um existente, e eu não consigo encontrar como obter uma tomada de um caminho.

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

    
por tudor 11.04.2017 / 08:39

1 resposta

0

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 PID , você pode descobrir 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 ss para exibir todos os soquetes Unix.

ss -x
  • -x Exibir soquetes de domínio Unix
  • -e Mostra informações detalhadas sobre o soquete
  • -m mostra o uso da memória do soquete

e você pode filtrar por algum tipo:

ss -x -A unix_stream
    
por 11.04.2017 / 10:30