Testar conexão com uma porta sem realmente se conectar a ela

0

Eu tenho um servidor de soquete python (single-threaded, aceita apenas uma conexão) em algum lugar.

Eu me conecto a essa porta e faço minhas coisas.

Como posso detectar se a porta está aberta ou fechada sem fazer nenhuma conexão? Quer dizer, eu não quero fechar a porta para ver se ela está aberta ou não: -)

Eu já tentei nc -zvv ip port , mas isso fecha o script (porque ele realmente se conecta à porta).

    
por vfsoraki 25.06.2014 / 13:14

1 resposta

1

Use uma ferramenta de varredura de porta como nmap . Quando executado com privilégios suficientes (no Linux o privilégio cap_net_raw é necessário, "root" em outros sistemas Unix) a ferramenta possui vários modos de varredura que não envolvem o preenchimento do TCP.

O modo de verificação padrão quando privilegiado é "TCP SYN scan" (a opção -sS ), que tenta iniciar um handshake TCP, mas imediatamente o redefine. Dessa forma, o programa não é informado sobre uma tentativa de conexão porque não havia uma conexão não .

Para verificar portas específicas, adicione a opção -p <ports> .

$ sudo nmap --reason -sS -p 22,53,79,80 localhost
PORT    STATE  SERVICE REASON
22/tcp  open   ssh     syn-ack
79/tcp  open   finger  syn-ack
143/tcp closed imap    reset
443/tcp closed https   reset
    
por 25.06.2014 / 13:58