Quais portas são usadas por um aplicativo [duplicado]

11

Estou testando um aplicativo que abre suas próprias portas (atua como um servidor para essas portas, portanto, escuta essas portas) e onde o mesmo aplicativo se conecta a portas ligadas por outros aplicativos (atua como cliente para essas portas).

Gostaria de obter uma visão geral de quais portas o aplicativo cria e para quais aplicativos e portas ele se conecta.

Como posso fazer isso?

    
por Baz 06.05.2015 / 09:07

5 respostas

17

Você pode usar netstat para isso. Veja o exemplo (eu usei ssh ):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Explicação:

Costumo usar os parâmetros -putan (porque são simples de lembrar).

  • -p : mostra os PIDs do aplicativo / processo
  • -u : mostrar portas / conexões udp
  • -t : mostra portas / conexões tcp
  • -a : mostra os sockets de escuta e de não escuta
  • -n : saída numérica (não faça pesquisas de DNS para nomes de host, etc.)

Na saída acima, você vê que há um processo de daemon ssh ( sshd ) com PID 1725 ouvindo na porta 22 em todas as interfaces de rede ( 0.0.0.0 ). Também há um processo de cliente ssh (PID 2491 ) conectado ao endereço IP 1.2.3.5 no número da porta 22 , meu endereço IP é 1.2.3.4 e minha porta externa é 45734 . Você vê que a conexão é estabelecida. Por isso, estou logado via ssh .

    
por 06.05.2015 / 09:42
7

Outra ferramenta que pode fazer isso é lsof :

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

As opções usadas são as seguintes:

  • -i para imprimir portas da Internet abertas por um processo
  • -a para fazer com que todas as opções sejam AND-ed
  • -p 1981 para mostrar a saída para o processo 1981
  • -n para inibir a pesquisa do nome do host e mostrar o IP
  • -P para inibir a pesquisa de serviço e mostrar o número da porta

lsof tem a vantagem de poder especificar o processo a ser verificado, em vez de precisar obtê-lo de saída maior. netstat é mais confiável disponível nos sistemas, embora lsof esteja se tornando mais padrão do que costumava ser.

    
por 06.05.2015 / 14:12
3
Utilitário

ss do pacote iproute para Linux

    
por 06.05.2015 / 14:31
3

Já temos boas respostas, mas elas listam apenas as portas que estão abertas no momento em que o comando é executado.

strace é a ferramenta certa para monitorar as conexões abertas durante a vida útil da aplicação:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

A saída mostrará informações adicionais, como solicitações de UDP e conexões abertas, mas fechadas.

    
por 06.05.2015 / 17:19
0

ss -a4 | less

Estou assumindo que você está falando sobre o IPv4 ... Se não, você pode substituir o 4 no comando anterior com 6. O parâmetro -a é mostrar todas as portas (escuta e não). Você pode adicionar -n aos parâmetros se não quiser resolver nomes na exibição.

    
por 06.05.2015 / 18:51