Pular para o conteúdo principal

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.

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

Postar um comentário

Postagens mais visitadas deste blog

Integração Zabbix + GLPI

Versão atualizada Essa atualização é em consequência de pedidos vindo dos gringos e também a pedido da Zabbix SIA por ser o 4.º conteúdo mais popular no recém criado  https://share.zabbix.com/  e o 1.º entre os brasileiros.   Para conferir a lista dos mais populares, acesse  https://share.zabbix.com/popular Há um tempo que eu queria desenvolver algo para integrar o Zabbix a algum outro sistema. Esse ano surgiu uma oportunidade de implementação de alguns sistemas de inventário e gerenciamento de chamados. Logo pensei em fazer uma integração para abertura e fechamento automático dos tickets quando ocorresse algum problema que o Zabbix identificasse. Porém, o meu entusiasmo foi logo caindo quando eu percebi que não era uma coisa tão trivial de se fazer. Pesquisei várias fontes em busca de informações a respeito dessa integração, porém não passavam de tutoriais ensinando como abrir tickets no GLPI enviando um e-mail. Estudando mais um pouco o GLPI, percebi que não era possível

Primeiros passos com API do Zabbix

Bom galera, Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog. Vou mostrar para vocês como utilizar a API do Zabbix. Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber.  :P - API  - Application Programming Interface  - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.