
Estou testando um aplicativo que abre suas próprias portas (atua como um servidor para essas portas e, portanto, escuta nessas portas) e onde o mesmo aplicativo se conecta a 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?
Responder1
Você pode usar netstat
para isso. Veja o exemplo (eu procurei 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 da aplicação/processo-u
: mostra portas/conexões udp-t
: mostra portas/conexões tcp-a
: mostra os soquetes 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 daemon ssh ( sshd
) com PID 1725
escutando na porta 22
em todas as interfaces de rede ( 0.0.0.0
). Também há um processo cliente ssh (PID 2491
) conectado ao endereço IP 1.2.3.5
na porta number 22
, meu endereço IP é 1.2.3.4
e minha porta externa é 45734
. Você vê que a conexão foi estabelecida. Portanto, estou logado via ssh
.
Responder2
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 utilizadas são as seguintes:
-i
para imprimir portas de internet abertas por um processo-a
para fazer com que todas as opções sejam AND-ed-p 1981
para mostrar a saída do processo 1981-n
para inibir a pesquisa de nome de 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 ter que obtê-lo com uma saída maior. netstat
está disponível de forma mais confiável nos sistemas, embora lsof
esteja se tornando mais padrão do que costumava ser.
Responder3
Já temos boas respostas, mas elas listam apenas as portas que estão abertas no momento da execução do comando.
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.
Responder4
ss -a4 | less
Presumo que você esteja falando sobre IPv4... Caso contrário, você pode substituir o 4 no comando anterior por 6. O parâmetro -a serve para mostrar todas as portas (em escuta e não). Você pode adicionar -n aos parâmetros se não quiser resolver nomes na exibição.