Obtém o endereço IP do soquete usado pelo processo

0

dado um ID de processo (que usa sockets), eu gostaria de obter o IP em endpoints de soquete.

Por exemplo, quando uma nova sessão SSH é criada, o processo de bifurcação do sshd por sessão. Eu quero obter os endpoints IP dessa sessão.

Eu acho que essa lógica funcione:
1. Listar todos os soquetes TCP, "cat / proc / net / tcp"
2. Liste todos os descritores de arquivo para o processo de entrada e "socket" do grep: "ls -la / proc / PID / fd | socket do grep"
3. Mesclar os resultados

Saída 1:

root@L137B-DV3:/home/ilan# cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
...
  18: 519A0A0A:E0D1 3C890A0A:C006 01 00000000:00000000 00:00000000 00000000     0        0 10494 1 ffff88003c44f640 20 4 30 10 -1
  19: 519A0A0A:9930 3C890A0A:C004 01 00000000:00000000 00:00000000 00000000     0        0 10496 1 ffff88003c44ee80 20 4 32 10 -1
  20: 519A0A0A:01BD 59890A0A:C1FA 01 00000000:00000000 02:0004F47D 00000000     0        0 76451 2 ffff88003b39d740 21 4 30 10 -1

Saída # 2

root@L137B-DV3:/home/ilan# ls -la /proc/4038/fd/ | grep socket
lrwx------ 1 root root 64 Jun  4 13:40 30 -> socket:[6347]
lrwx------ 1 root root 64 Jun  4 13:40 32 -> socket:[76483]
lrwx------ 1 root root 64 Jun  4 13:40 35 -> socket:[6357]
lrwx------ 1 root root 64 Jun  4 13:40 36 -> socket:[76451]
lrwx------ 1 root root 64 Jun  4 13:40 6 -> socket:[76453]

Vemos que o inode 76451 é o resultado da mesclagem, o endereço IP do soquete é localhost: 519A0A0A e remoto: 59890A0A.

Minhas perguntas são:
1. É possível "cat / proc / net / tcp" um processo específico ? Eu tentei cat / proc / PID / net / tcp - ele retorna os mesmos resultados que cat / proc / net / tcp.
2. Existe uma maneira mais eficiente de recuperar o IP?

    
por ilansch 04.06.2018 / 16:09

1 resposta

2

Você pode listar o arquivo aberto de um PID com lsof :

lsof -p <PID>

Mas você pode preferir usar a filtragem de nome de comando nos processos ssh:

# filters on both ssh and sshd command (client/server)
lsof -i -na -c /sshd?/ -sTCP:ESTABLISHED

E combine ambos, claro:

lsof -p <PID> -i -na -sTCP:ESTABLISHED
    
por 04.06.2018 / 16:21

Tags