Determina o processo usando uma porta, sem sudo

9

Gostaria de descobrir qual processo (em particular, o ID do processo) está usando uma determinada porta. O único problema é que não quero usar o sudo, nem estou logado como root. Os processos que eu quero que isso funcione são executados pelo mesmo usuário que eu quero encontrar o id do processo - então eu teria pensado que isso era simples.

Tanto lsof como netstat não me dizem o ID do processo, a menos que eu o execute usando o sudo - eles me dirão que a porta está sendo usada.

Como algum contexto extra - tenho vários aplicativos conectados por meio de SSH a um servidor que gerencio e criando encaminhamentos de porta reversa. Uma vez que estes estão configurados, meu servidor faz algum processamento usando a porta encaminhada e, em seguida, a conexão pode ser eliminada. Se eu puder mapear portas específicas (cada aplicativo tem seus próprios) para processos, este é um script simples. Alguma sugestão?

Isso está em uma caixa do Ubuntu, a propósito - mas acredito que qualquer solução será padrão na maioria das distribuições Linux.

    
por pat 08.05.2011 / 15:47

2 respostas

6

A opção --program para netstat mostra seus PIDs e nomes de seus próprios processos. Esta opção está presente e funcionando no RHEL 6 no netstat 1.42 fora da net-tools 1.60.

Eu verifiquei que netstat -an --tcp --program mostra os PIDs dos meus processos.

    
por 08.05.2011 / 16:44
3

A sugestão de Pawel parece funcionar bem para mim, mas como uma alternativa, aqui está eu ouvindo do shell1:

[madhatta@risby ~]$ nc -l  localhost 3456

e aqui estou eu vendo isso com lsof do shell2:

[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nc      18109 madhatta    3u  IPv4 69205153      0t0  TCP localhost.localdomain:vat (LISTEN)

Editar : você escreve em um comentário que

SSH forwards must behave differently - even though the process is owned by the same user, I can't see it listed at all in lsof output unless I run it as root/sudo.

mas isto não é assim para mim. Tendo usado o ssh para encaminhar a porta local 8001, com ssh vpn.example.com -L 8001:rt.int:80 , depois encontro:

[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh     5375 madhatta    8u  IPv6 381234      0t0  TCP [::1]:vcom-tunnel (LISTEN)
ssh     5375 madhatta    9u  IPv4 381235      0t0  TCP 127.0.0.1:vcom-tunnel (LISTEN)

Você poderia nos mostrar um pouco de sua amostra de saída, preferivelmente não muito redigida?

    
por 08.05.2011 / 16:45