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


11

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

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

Como posso fazer isso?

Respostas:


17

Você pode usar netstatpara isso. Veja o exemplo (esperei por 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: mostre portas / conexões udp
  • -t: mostre portas / conexões tcp
  • -a: mostra soquetes de escuta e 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 existe um processo ssh daemon ( sshd) com o PID 1725escutando na porta 22em todas as interfaces de rede ( 0.0.0.0). Também existe um processo de cliente ssh (PID 2491) conectado ao endereço IP 1.2.3.5no número da porta 22, meu endereço IP é 1.2.3.4e minha porta externa 45734. Você vê que a conexão está estabelecida. Portanto, eu estou logado via ssh.


Uma conexão TCP estabelecida na porta 22 não indica autenticação bem-sucedida. O TCP deve ser estabelecido antes que a autenticação em qualquer direção possa ocorrer.
jamesbtate

@Puddingfox yes true, poderíamos dizer melhor "Estou conectado a essa porta", mas, para compreensão, eu disse "estou logado", porque é mais ilustrativo.
caos

1
hehe ... `` -putan '' Estou tão tentado a corrigir esse pequeno erro de ortografia;)
James Mertz

Por que usar utilitários obsoletos quando os modernos estão disponíveis? ss -lntp é o utilitário fornecido pelo pacote iproute2 .
MariusMatutiae

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

lsoftem a vantagem de poder especificar o processo a ser verificado, em vez de precisar cumpri-lo com uma saída maior. netstatestá disponível de forma mais confiável nos sistemas, embora lsofesteja se tornando mais padrão do que costumava ser.


Gostaria de executar este comando antes de iniciar o aplicativo que desejo monitorar, mas posso estabelecer qual o pid que um aplicativo receberá antes de iniciá-lo?
Baz

@Az, se você deseja monitorar um aplicativo quando ele inicia (por exemplo, antes que você saiba que é o PID), tente a stracesolução sugerida pelo @olivecoder.
gowenfawr


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 do aplicativo:

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

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


0

ss -a4 | less

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.