Testando a conectividade da porta UDP

35

Estou tentando testar se consigo acessar uma porta específica em um servidor remoto (ao qual eu tenho acesso) por meio do UDP.

Ambos os servidores estã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 ser.

Iptables está desativado.

Alguma sugestão de como 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.

    
por Lock 10.08.2012 / 10:42

8 respostas

41
Não existe uma porta UDP "aberta", pelo menos não no sentido em que a maioria das pessoas está acostumada a pensar (que está respondendo algo como "ok, eu aceitei sua conexão"). O UDP é sem sessão, portanto, "uma porta" (leia-se: o protocolo UDP na pilha IP do sistema operacional) nunca responderá "sucesso" por conta própria.

As portas UDP têm apenas dois estados: escutar ou não. Isso geralmente se traduz em "ter um soquete aberto nele 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 poderiam cortar esses pacotes, então se você não obtiver nada de volta, você não tem certeza se a porta está nesse estado ou não. E não vamos esquecer que o ICMP é uma sessão a menos e não faz retransmissões: o pacote Port Unreachable pode muito bem ser perdido em algum lugar na rede.

Uma porta UDP no estado de "escuta" não pode responder a nada (o processo escuta apenas recebe o pacote e não transmite nada) ou pode enviar algo de volta (se o processo atuar na recepção e se atuar respondendo via UDP ao IP original do remetente: port), então, novamente, você nunca saberá ao certo qual é o estado se não receber nada de volta.

Você diz que pode ter controle do host de recebimento: isso faz com que você consiga construir seu próprio protocolo para verificar a acessibilidade da porta UDP: basta colocar um processo no host de recebimento que ouvirá na porta UDP especificada e responda (ou envie um e-mail, ou apenas surte e unlink() tudo no sistema de arquivos do host ... qualquer coisa que acione sua atenção).

    
por 10.08.2012 / 14:13
48

Para testar se a porta do udp está respondendo, use netcat .

Um exemplo da página do manual :

nc -v -u -z -w 3 example.host 20-30
    Send UDP packets to ports 20-30 of example.host, and report which ones
    did not respond with an ICMP packet after three seconds.

É claro que, se um firewall for DROP ing, o que normalmente é o caso quando se lida com gateways com acesso à Internet, você não receberá uma resposta de ICMP.

    
por 28.04.2015 / 18:45
21
  1. tanto no cliente quanto no servidor install nc: yum install nc (para centos)
  2. no servidor escuta porta UDP: nc -ul 6111
  3. no cliente nc -u <server> 6111
  4. digite qualquer coisa no cliente e aperte enter - você deve ver este texto no servidor

Observação: Quando você executa o comando nc -ul no servidor, ele conecta somente a primeira conexão que chega a ele. Você não pode, como eu descobri, alternar entre servidores pingando sem parar e reiniciar nc -ul . Na verdade, se você ^ C parar o cliente ( nc -u ... ), também não poderá reiniciar o cliente sem primeiro reiniciar o listener do servidor.

    
por 04.11.2015 / 18:42
9

Testar portas UDP abertas com o nmap é repleto de perigos - não há um aperto de mão de três vias para indicar abertura. A menos que o processo de escuta responda ao que o nmap envia, 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 escutar em uma ponta com o netcat e usar o netcat na outra ponta para enviar pacotes, e ver eles chegarem na outra ponta. Faça as duas coisas, apenas tenha certeza. Você também pode tcpdump para ver os pacotes chegando onde eles precisam ir.

    
por 10.08.2012 / 10:50
8

Eu estava tendo um problema semelhante e encontrei uma boa solução usando o netcat aqui: link

nc -vzu <host> <port>

Consegui confirmar que a minha porta UDP estava aberta e, depois, posso continuar a testar o meu código real.

    
por 17.10.2012 / 23:22
1

Você pode verificar as portas do udp usando o seguinte comando

nmap -sU -v <hostname or ip>
    
por 05.07.2017 / 01:47
0

Você pode fazer isso com netcat (nc) ou iperf , supondo que você tenha outra máquina para testar fora da rede. Minha escolha seria uma varredura nmap UDP de um sistema fora do seu ambiente. Qual foi a sua linha de comando nmap? Existem firewalls de hardware ou outros dispositivos no mix?

    
por 10.08.2012 / 13:21
0

Eu tenho uma abordagem simplista. Se o servidor UDP não retornar os dados esperados, acabei de parar de coletar os dgrams, supondo que ele esteja inativo:

LINE: while(1)
{
    my $line;
    my $flags;

    local $SIG{ALRM} = sub {die "exceeded timeout for recv"};
    alarm 5;
    eval {
        $socket->recv($line,2024,$flags);
    };

    unless($line =~ /\{.*\}/){
        if($verbose){
            print STDERR "Invalid or empty dgram:\n",'"', $line, '"',"\n";
        }

        last LINE;
    }
}
    
por 21.07.2017 / 20:40