Usando LSOF para verificar porta usada por determinado processo


Outro dia fui realizar alguns testes em aplicações rodando no JBoss e verifiquei que nenhuma aplicação estava funcionando. Verifiquei no log do JBoss que o serviço iniciava e ocorria vários erros, informando que não conseguia fazer o deploy das aplicações.
Mesmo parando o serviço do JBoss, verifiquei com a ferramenta nmap que a porta 8080 continuava aberta.



# nmap -p 8080 localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-11-12 14:09 BRST
Interesting ports on localhost.localdomain (127.0.0.1):
PORT     STATE SERVICE
8080/tcp open  http-proxy
Nmap finished: 1 IP address (1 host up) scanned in 0.012 seconds

Com o comando netstat verifiquei que realmente a porta estava na escuta por conexões.

# netstat -ntal | grep 8080
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN

Atualização: Com a ferramenta netstat também é possível ver qual o número do processo que está utilizando determinada porta com a opção -p. Porém, neste post explicarei como obter o número do processo utilizando a ferramenta LSOF. O LSOF (list open files) é a ferramenta para listar os arquivos abertos no sistema. Utilizando a opção -i tcp o sistema irá retornar apenas os arquivos abertos por conexões tcp.

# lsof -i tcp
redir     10909     root    3u  IPv4 442118       TCP *:webcache (LISTEN)

Dessa forma, se filtrarmos a saída do comando com o grep, não teremos o resultado esperado.

# lsof -i tcp | grep 8080

Isso porque o lsof por padrão faz a conversão das portas pelos serviços que as utilizam. Para desabilitar a conversão na execução do lsof, usamos a opção -P.

# lsof -i tcp -P | grep 8080
redir      12170     root  159u  IPv4 878525       TCP *:8080 (LISTEN)

A segunda coluna nos mostra qual o PID do processo em execução e que está utilizando a porta 8080. Com isso, podemos matar o processo e iniciarmos o serviço que deve utilizar a porta.

Se você não filtrar a saída do lsof, verá que as colunas exibidas por padrão do lsof são:

COMMAND     PID     USER   FD   TYPE DEVICE SIZE NODE NAME

Espero que está dica poupe muito tempo na busca por soluções a respeito de problemas de portas abertas por outros serviços que não seja o que você está acostumado a rodar. Isso acontece muito em ambientes administrados por muitas pessoas. O lsof é uma ferramente bastante poderosa e seu uso deve ser colocado em prática. Para mais detalhes: man lsof.

Share this:

,

COMENTÁRIOS

3 comentários:

  1. Muito boa a dica, o fuser também é interessante:

    $ fuser 8080/tcp

    ResponderExcluir
  2. Só uma correção. Com a opção -p do netstat é possível sim ver o ID e o nome do processo que mantém uma porta aberta.

    $ netstat -tanp | grep 8080

    ResponderExcluir
    Respostas
    1. Obrigado pela contribuição. Já atualizei o post.

      Excluir