Estou tentando verificar se alguns de nossos servidores podem se comunicar por meio de determinadas portas antes de migrar alguns de nossos serviços para eles e se eles não estão bloqueados pelas ACLs de firewall de nossa organização.
Faz sentido
[mrduki@mybox1~]$ nc -ul 40000
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
Não Faz Sentido
[mrduki@mybox1~]$ nc -ul 40000
[mrduki@mybox1~]$ ^C
---
[mrduki@mybox2~]$ nc -zvuw2 mybox1.com 40000
Connection to mybox1.com 40000 port [udp/*] succeeded!
Na verdade, se eu fizer uma varredura de porta de 40000-40100
, todas as portas serão bem-sucedidas.
Se eu fizer os mesmos testes sem -u
(para testar TCP em vez de UDP), recebo 40000 (tcp) timed out: Operation now in progress
erros, como seria de esperar (já que não tenho esse serviço TCP escutando 40000
).
Fazer um sudo netstat -alnp | grep LISTEN
on , no mybox1
entanto, não mostra esses serviços escutando nessas portas. Então, o que estou perdendo?
O UDP é um protocolo "sem conexão". Se você enviar um pacote e não receber uma rejeição (via ICMP), independentemente de receber uma resposta ou não, é considerado bem-sucedido. Algo bastante comum é um firewall impedindo que os pacotes de rejeição ICMP do alvo sejam enviados de volta para você (que é o que o netcat usa para saber se a porta está fechada, caso contrário, ele pensa que está aberta).
Compare isso com TCP, que é statefull. Uma falha no recebimento de uma resposta (ACK) é considerada uma falha dentro do TCP (geralmente aparece como "filtrada"), assim como as respostas negativas (RST, que aparecerá como fechada).
UDP: aberto|filtrado fechado TCP: aberto fechado filtrado
nc
pode não ser a melhor ferramenta para testar o status da porta. Você já tentounmap
? Na verdade, é um scanner de portas. Verifiquei um servidor de arquivos em minha rede doméstica e 127.0.0.1, ambos informam queUDP port 40000
está fechado.nmap
Kernel + /dev
Você também pode usar o kernel para fazer isso. Mas
nmap
é provavelmente melhor.Quando tentei
nc
no mesmo servidor (igor) estava obtendo os mesmos resultados que você. Mas voltei para tentar novamente e agora não está retornando nenhuma saída (nenhuma mensagem bem-sucedida) e o wireshark está mostrando "Destino inacessível" sendo enviado de volta pelo ICMP. Eu não entendo nada disso. Mas eu mudaria para um método diferente de verificar o status da porta UDP.Nenhum bloqueio de firewall impedirá o sucesso de uma tentativa de conexão UDP, pois a conexão com UDP não envolve o envio de nada ou a escuta de qualquer resposta. Funcionalmente, uma operação de conexão UDP é igual a um envio até o ponto em que os dados são realmente enviados, ou seja:
Observe que nada disso faz nada que um firewall possa interferir, nem nada é enviado na rede.