Dica 14 – Como saber qual processo está utilizando determinada porta
Pra que saber qual processo está utilizando determinada porta ?
Imagine a situação: seu servidor está se comportando de maneira estranha, muito tráfego na rede por exemplo, e você analisa a rede e descobre que seu servidor está com uma ou mais portas abertas e ouvindo conexões.
Primeiro, como saber quais são as portas que estão abertas no Linux ? Para isso, vamos utilizar o comando netstat. De acordo com a página man do netstat (que pode ser acessada digitando man netstat), o netstat mostra conexões de rede, tabelas de roteamento, estatísticas de interface e conexões, mascaradas.
Neste artigo, precisaremos saber quais portas estão listen ou ouvindo (ou seja, aguardando conexões) no protocolo tcp. Para isso, usaremos os parâmetros n e a do netstat para não resolver nomes (vai mostrar somente o IP, que deixa o comando mais rápido) e mostrar todas as conexões respectivamente. Sem usar o a, o netstat só irá mostrar as portas que está conectadas. Alé disso, vamos usar o grep para filtrar o que for somente tcp e o que estiver com status listen, assim:
netstat -na | grep tcp | grep -i listen
Para saber que processo está utilizando determinada porta, execute o fuser seguido da porta/protocolo. Por exemplo, para ver qual processo está utilizando a porta 22, usamos o fuser assim:
# fuser 22/tcp
22/tcp: 1683
O comando fuser informou que a porta 22/tcp está sendo usada pelo processo cujo PID é 1683. Então temos que somente usar o ps para descobrir quem é o processo 1683:
# ps aux | grep 1683
root 1683 0.0 0.2 4984 1080 ? Ss 08:46 0:00 /usr/sbin/sshd
Neste caso, descobrirmos que a porta 22/tcp estava sendo usada pelo sshd. Nada anormal neste servidor :)
Podemos usar este procedimento para verificar todas as portas que estão abertas.
Para melhorar a dica, pode-se elaborar um script para automatizar esta tarefa. Este script poderia comparar as portas que estão abertas no momento com uma lista predefinida e, caso não estivesse ok, o script poderia enviar um email informando isso.
Atualizado em 14 de julho de 2009:
Complementando, no caso de um Sun Solaris, pode-se usar uma combinação dos comandos lsof, grep e ps, assim (supondo que desejamos saber o que roda na porta 12345):
# lsof |grep 12345
java 11110 root 10u IPv4 0x300099a61e0 0t0 TCP *:12345 (LISTEN)
# ps -ef|grep 11110
root 11110 1 0 jul 06 ? 11:15 /opt/java/bin/java
Atualizado em 15 de maio de 2020:
# lsof -i tcp:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 40u IPv6 0xd7b650b0ec48643b 0t0 TCP *:ssh (LISTEN)
# lsof -i tcp:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 21u IPv4 0xd7b650b0f19880eb 0t0 TCP 10.0.1.9:ssh->10.0.1.4:rfio (ESTABLISHED)
launchd 1 root 40u IPv6 0xd7b650b0ec48643b 0t0 TCP *:ssh (LISTEN)
Caso queria visualizar todas portas abertas, basta executar lsof -i.
Muito loko esse comando fuser…
Mas por exemplo e no caso de portas que não são padrão?
Por exemplo como sei o que está rodando na porta 1025?
hehehe dexa queto…
eu vacilei… por que aki num tava rodando nenhuma porta 1025 tcp…
kkkkk
Dae cara,
Uma coisinha um pouco mais encardida, hehehe. Como descobrir o processo que está ABRINDO uma conexão (porta de origem, não de destino). Exemplo: vc acha que tem algum processo que está abrindo portas pra algum lugar e que não deveria (ex. algum tipo de malware, ou usuário fazendo o q não deve). To pesquisando isso, mas tá meio chato de achar, vc já viu isso?
Valeus a força :)
Há outros meios de se obter resultado semelhante ao fuser, normalmente com o netstat. Se o seu netstat aceitar o parâmetro “-p”, ele deverá resolver seu problema.
Exemplo, se quiser saber qual processo está conectado num determinado host na porta 80. Então, usamos o parâmetro “-p” no netstat (não tenho certeza de que qualquer netstat aceite este parâmetro):
$ netstat -nap |grep -w 80
tcp 0 0 72.14.181.75:60892 200.221.2.45:80 ESTABLISHED 26294/telnet
Neste exemplo, há um telnet, cujo PID é 26294, conectado na porta 80 do IP 200.221.2.45.
Entendi, só que no meu caso está um pouco mais chato. É uma máquina que não fui eu quem fez e q tem está abrindo uma conexão em localhost 127.0.0.1. Dai ele somente mostra o processo da posta q está escutando, e não abrindo. Tentei com o fuser e ele me dah um resposta em banco.
Alguma ideia?
Valeus.
Vlww Cenoura!!! salvou minha vida hoje hehe, ainda bem que não esqueci esta url!
abss
MANO! Obrigado velho…
Ajudou pra caralho..
Pelo NMAP, detectei duas portas abertas: 9001 e 10001.
Que susto velho..
Pesquisei várias vezes, ai pelo seu Tuto eu vi que era o Aptana Studio. haha’
Fique com Deus! Falow!
Nossa!! Me ajudou pra caramba. Valeu!!!
Nossa, muito bom mesmo. E para saber qual porta sobe uma determinada aplicação, como seria? Muito obg
Post de matar amigo ! Parabéns !
Eu já tava cansado de toda hora de ter usar a porcaria do netstat demorado e confuso para achar os programas que acessam as portas.
Obrigado! Resolveu o meu problema.