Como descubro mais sobre arquivos de soquete em / proc / fd?

20

Olhando em / proc / $ mypid / fd /, vejo esses arquivos

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]

Como tenho acesso ao código, sei que esses soquetes estão ligados a conexões TCP (um é uma conexão com a porta 5672 em alguma máquina, outro é uma conexão com a porta 3306 em outra máquina), mas eu quero saber qual soquete está vinculado a qual conexão. Como eu posso fazer isso?

Mais geralmente, como posso perguntar ao SO qual é a outra extremidade do soquete?

    
por benhsu 14.10.2015 / 05:38

1 resposta

20

Comando lsof

Uma boa opção pode ser lsof . Como man lsof declara que é útil para obter informações sobre open files such as Internet sockets or Unix Domain sockets .

Usando

Primeiro, obtenha uma visão geral sobre /proc/$PID/fd/ e os números de soquete listados.
Por exemplo, socket:[14240] pode interessar você.

Em seguida, use lsof -i -a -p $PID para imprimir uma lista de todos os arquivos de rede $PID usa.

  • -i produz uma lista de arquivos de rede pertencentes a um usuário ou processo

  • -a combina logicamente ou os parâmetros fornecidos pelo AND

  • -p $PID seleciona informações apenas sobre seu processo

Uma saída típica para meu navegador em execução com um PID de 2543 pode ser:

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)

e mais linhas semelhantes.

Ótimo! Agora, dê uma olhada mais de perto na coluna DEVICE . Ele corresponde ao nosso soquete listado anteriormente de /proc/$PID/fd/ !
E graças à seção NAME , podemos dizer qual é a outra extremidade do nosso soquete.

Em um mundo real, você pode obter uma boa quantidade de resultados, mas apenas filtrar ou grep para seu soquete de interesse.

Tenho certeza de que é possível combinar todos os comandos, mas isso deve ser suficiente para você começar.

    
por 14.10.2015 / 09:08