Como descobrir os processos associados as portas no Linux


Obs: Esse artigo é sobre ferramentas de rede Linux. Caso precise de uma ferramenta para windows, veja esse artigo sobre o TCPView . 
Existem diversas formas simples de descobrir qual processo está escutando em determinada porta no Linux. Este artigo trata de duas dessas ferramentas: o fuser e o lsof

fuser:
O fuser serve para indicar o usuário e o processo que estão acessando determinado arquivo/diretório. Para descobrir qual processo está associado a uma porta TCP/UDP (e o nome do usuário dono do processo) basta executar:
fuser -n protocolo porta
Por exemplo: em uma máquina Linux típica, ao se executar o comando
debian:~# fuser -vn tcp 22
obteremos como resposta
                     USER        PID   ACCESS COMMAND
22/tcp:            root         2694   F....          sshd
que mostra que o processo sshd, de propriedade do usuário root e com o PID 2694, está conectado à porta 22.

lsof:
o lsof tem uma funcionalidade semalhante à do fuser: ele serve para indicar quais arquivos/diretórios estão abertos (sendo acessados) e por quem. Para exibir processos associados a portas TCP/UDP execute:
lsof -i [PROTOCOLO]:porta
Utilizando um exemplo semelhante ao anterior, executando o comando
debian:~# lsof -i TCP:22
O resultado seria similar a esse:
COMMAND PID     USER   FD   TYPE   DEVICE SIZE NODE NAME
sshd                2694     root     3u     IPv6     6348                TCP     *:ssh (LISTEN)
As mesmas informações (nome do processo, PID e usuário dono) são exibidas aqui, entre outras.

O lsof possui ainda algumas vantagens em relação ao fuser:


O protocolo pode ser omitido
Nesse caso, os parâmetros ficariam assim
debian:~# lsof -i :22
Seriam exibidas as conexões para ambos os protocolos (TCP e UDP), caso houvessem.

Riqueza de detalhes: o lsof exibe mais informações que o fuser, como a versão do protocolo IP utilizada (IPv4 ou IPv6), em quais endereços IP/hostnames a porta está sendo utilizada e o estado atual da conexão(LISTENESTABLISHED, SYN_SENT, etc). Caso o processo escute em todos os endereços disponíveis, é exibido um * (como em *:ssh). Se o processo utilizar apenas um endereço IP, seria exibido esse endereço seguido da porta (por exemplo 192.168.1.100:ssh).

2 comentários:

Anônimo disse...

Hey, I am checking this blog using the phone and this appears to be kind of odd. Thought you'd wish to know. This is a great write-up nevertheless, did not mess that up.

- David

Fabiano Pires disse...

Which phone you use?