Leia “/ proc” para saber se um processo abriu uma porta

8

Eu preciso saber se um processo com um determinado PID abriu uma porta sem usar comandos externos. Eu devo então usar o sistema de arquivos /proc . Eu posso ler o arquivo /proc/$PID/net/tcp por exemplo e obter informações sobre as portas TCP abertas pelo processo. No entanto, em um processo multithread, o diretório /proc/$PID/task/$TID também conterá um arquivo net/tcp . Minha pergunta é:

eu preciso percorrer todos os arquivos net/tcp dos encadeamentos, ou a porta aberta pelos encadeamentos será gravada no arquivo net/tcp do processo.

    
por rmonjo 29.08.2015 / 15:11

1 resposta

17

I can read the /proc/$PID/net/tcp file for example and get information about TCP ports opened by the process.

Esse arquivo não é uma lista de portas tcp abertas pelo processo . É uma lista de todas as portas tcp abertas no namespace de rede atual, e para processos em execução no mesmo namespace de rede é idêntico ao conteúdo de /proc/net/tcp .

Para encontrar portas abertas pelo seu processo, você precisaria obter uma lista de descritores de soquete de /proc/<pid>/fd e, em seguida, associar esses descritores ao campo inode de /proc/net/tcp .

    
por 29.08.2015 / 15:37