Abri a porta 4000 na minha máquina local da seguinte forma:
nc -lvup 4000
e então tentei conectar à mesma porta da seguinte maneira:
nc -vu 127.0.0.1 4000
e foi capaz de se conectar, enviar e receber texto com sucesso. No entanto, quando escuto na mesma porta mostrada no primeiro trecho e tento uma varredura UDP usando
nmap -sU 127.0.0.1 -p 4000
O resultado é o seguinte:
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
PORT STATE SERVICE
4000/udp closed icq
Não deveria estar aberto, já que a porta está claramente aberta conforme estabelecido pelo primeiro teste? Por favor, faça sentido, pois estou realmente perplexo com isso.
Responder1
Não. Você não entende o que está acontecendo. Isso é UDP, não háconexões.
Quando você executa o segundo nc
e digita algo nele, ele apenas envia pacotes. Então vocêpor outros meios(ver para o outro lado da comunicação, por exemplo, para outra tela de computador) confirme se a comunicação ocorre. Se não houvesse "escuta" nc
, o nc "enviador" enviaria alegremente os mesmos pacotes, sem qualquer pista se estes foram recebidos ou descartados.
O mesmo acontece nmap
. Ele envia pacotes, não vê nenhuma resposta e decide que seus pacotes simplesmente desapareceram no buraco negro.
Isso é UDP, é assim. Não possui confirmação intrínseca de recepção. Se o aplicativo precisar, ele mesmo faz as confirmações. E como não temos nenhum protocolo de nível de aplicativo para fazer isso aqui, o nmap não vê nenhuma resposta, nenhuma "porta aberta" foi detectada.
Em comparação, o TCP possui confirmações (ACKs) integradas, é por isso que podemos detectar com segurança se a porta está aberta.