Estou tentando testar se consigo acessar uma porta específica em um servidor remoto (aos quais tenho acesso) por meio do UDP.
Ambos os servidores são voltados para a Internet. Estou usando o netcat para ter uma certa porta escutando.
Eu então uso o nmap para verificar essa porta para ver se ela está aberta, mas não parece estar.
O Iptables está desligado.
Alguma sugestão por que isso poderia ser? Eventualmente, vou configurar um túnel VPN, mas como sou muito novo em túneis, quero ter certeza de que tenho conectividade na porta UDP 1194 antes de avançar.
Para testar se a porta udp está respondendo, use
netcat
.Um exemplo da página man :
Obviamente, se um firewall estiver
DROP
funcionando, o que normalmente é o caso ao lidar com gateways voltados para a Internet, você não receberá uma resposta ICMP.yum install nc
(para centos)nc -ul 6111
(adicione a-6
opção se você estiver testando uma conexão ipv6)nc -u <server> 6111
Nota: Quando você executa o
nc -ul
comando no servidor, ele se conectará apenas na primeira conexão que chegar a ele. Você não pode, como descobri, alternar entre servidores fazendo ping sem parar e reiniciarnc -ul
. Na verdade, se você ^C parar o cliente (nc -u ...
), você também não poderá reiniciar o cliente sem primeiro reiniciar o ouvinte do servidor.Não existe uma porta UDP "aberta", pelo menos não no sentido que a maioria das pessoas está acostumada a pensar (que é responder algo como "OK, aceitei sua conexão"). O UDP é sem sessão, portanto, "uma porta" (leia-se: o protocolo UDP na pilha de IP do sistema operacional) nunca responderá "sucesso" por conta própria.
As portas UDP têm apenas dois estados: escutando ou não. Isso geralmente se traduz em "ter um soquete aberto por um processo" ou "não ter nenhum soquete aberto". O último caso deve ser fácil de detectar, pois o sistema deve responder com um pacote ICMP Destination Unreachable com código=3 (Porta inacessível). Infelizmente, muitos firewalls podem descartar esses pacotes, portanto, se você não receber nada de volta, não terá certeza se a porta está nesse estado ou não. E não vamos esquecer que o ICMP também é sem sessão e não faz retransmissões: o pacote Port Unreachable pode muito bem ser perdido em algum lugar da rede.
Uma porta UDP no estado "escutando" pode não responder (o processo que está ouvindo apenas recebe o pacote e não transmite nada) ou pode enviar algo de volta (se o processo agir na recepção e se agir por respondendo via UDP ao IP do remetente original:porta). Então, novamente, você nunca sabe ao certo qual é o estado se você não receber nada de volta.
Você diz que pode ter controle do host receptor: isso o torna capaz de construir seu próprio protocolo para verificar a acessibilidade da porta UDP: basta colocar um processo no host receptor que ouvirá a porta UDP fornecida e responderá de volta (ou enviará um e-mail, ou simplesmente surte e
unlink()
tudo no sistema de arquivos do host... qualquer coisa que chame sua atenção fará).Eu estava tendo um problema semelhante e encontrei uma boa solução usando o netcat aqui: http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open:_simple_UDP_server_and_client
nc -vzu <host> <port>
Consegui confirmar que minha porta UDP estava aberta e, em seguida, pude continuar testando meu código real.
Testar portas UDP abertas com nmap é cheio de perigos - não há handshake de três vias para indicar abertura. A menos que o processo de escuta responda a qualquer envio do nmap, não há como o nmap diferenciar entre uma porta aberta que não está respondendo e uma porta filtrada.
Muito mais fácil é apenas ouvir em uma extremidade com o netcat e usar o netcat na outra extremidade para enviar pacotes e ver que eles chegam na outra extremidade. Faça as duas coisas, apenas certifique-se. Você também pode
tcpdump
ver os pacotes chegando onde eles precisam ir.Você pode verificar as portas udp usando o seguinte comando
Você pode fazer isso com
netcat
(nc) ouiperf
, supondo que você tenha outra máquina para testar fora da rede. Minha escolha seria umanmap
varredura UDP de um sistema fora do seu ambiente. Qual era a sua linha de comando do nmap? Existem firewalls de hardware ou outros dispositivos no mix?Eu tenho uma abordagem simples. Se o servidor UDP não retornar os dados esperados, simplesmente paro de coletar dgrams, supondo que tenha caído:
Na verdade, se a porta de escuta do servidor 6111, o netcat declara explicitamente: