Testen der UDP-Anschlusskonnektivität

37

Ich versuche zu testen, ob ich über UDP auf einen bestimmten Port auf einem Remoteserver zugreifen kann (auf den ich beide Zugriff habe).

Beide Server sind mit dem Internet verbunden. Ich benutze Netcat, um einen bestimmten Port abhören zu lassen.

Ich benutze dann nmap, um zu überprüfen, ob dieser Port offen ist, aber es scheint nicht so zu sein.

Iptables ist ausgeschaltet.

Irgendwelche Vorschläge, warum das sein könnte? Ich werde irgendwann einen VPN-Tunnel einrichten, aber da ich noch kein Anfänger in Tunneln bin, möchte ich sicherstellen, dass ich Konnektivität auf Port UDP 1194 habe, bevor ich fortfahre.

Sperren
quelle
Ich habe auf die Frage "Testen der UDP-Portkonnektivität" geantwortet. Ich schlage jedoch vor, mich auf den genaueren Teil "Sicherstellen, dass OpenVPN meine UDP-Pakete empfängt" zu konzentrieren. Dies kann leicht durch Betrachten von OpenVPN-Protokollen erreicht werden.
Luke404

Antworten:

46

Es gibt keinen "offenen" UDP-Port, zumindest nicht in dem Sinne, wie die meisten Leute es gewohnt sind, darüber nachzudenken (was so etwas wie "OK, ich habe Ihre Verbindung angenommen" beantwortet). UDP ist sitzungslos, daher antwortet "ein Port" (gelesen: das UDP-Protokoll im IP-Stack des Betriebssystems) niemals "erfolgreich".

UDP-Ports haben nur zwei Zustände: Abhören oder nicht. Das bedeutet normalerweise, dass ein Socket durch einen Prozess geöffnet ist oder dass kein Socket geöffnet ist. Der letztere Fall sollte leicht zu erkennen sein, da das System mit einem ICMP-Ziel-Unreachable- Paket mit dem Code = 3 (Port nicht erreichbar) antworten sollte . Leider könnten viele Firewalls diese Pakete verwerfen. Wenn Sie also nichts zurückbekommen, wissen Sie nicht genau, ob sich der Port in diesem Zustand befindet oder nicht. Und vergessen wir nicht, dass ICMP auch sitzungslos ist und keine Neuübertragungen durchführt: Das Paket "Port Unreachable" kann sehr gut irgendwo im Internet verloren gehen.

Ein UDP-Port im Status "Abhören" antwortet möglicherweise überhaupt nicht (der Prozess, der darauf wartet, empfängt nur das Paket und überträgt nichts) oder er kann etwas zurücksenden (wenn der Prozess beim Empfang reagiert und wenn er von handelt) Antwort über UDP an den ursprünglichen Absender (IP: Port). Sie wissen also nie genau, wie der Zustand ist, wenn Sie nichts zurückerhalten.

Sie sagen, Sie können die Kontrolle über den empfangenden Host haben: Dies ermöglicht es Ihnen, Ihr eigenes Protokoll zu erstellen, um die Erreichbarkeit des UDP-Ports zu überprüfen. Legen Sie einfach einen Prozess auf dem empfangenden Host ab, der den angegebenen UDP-Port überwacht und antwortet (oder Sie sendet) eine E-Mail oder einfach nur ausflippen und unlink()alles auf dem Host-Dateisystem ... alles, was Ihre Aufmerksamkeit auslöst, wird tun.

Luke404
quelle
Denke, ich verstehe es jetzt. Ein netstat auf dem Server mit dem lauschenden udp-Port wird also niemals den entfernten Host anzeigen ... Nur ein tcpdump sollte die entfernten Anforderungen anzeigen?
Sperren Sie den
Sowohl netstat als auch tcpdump haben die Möglichkeit, Daten über Sie zu sichern, wobei letztere in einer besser lesbaren Form vorliegen. Schauen Sie sich die Manpages für Details an.
Luke404
56

Verwenden Sie, um zu testen, ob der udp-Port reagiert netcat.

Ein Beispiel aus der Manpage :

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.

Wenn eine Firewall DROPinstalliert ist, wie dies normalerweise bei Gateways mit Internetverbindung der Fall ist, erhalten Sie natürlich keine ICMP-Antwort.

motobói
quelle
1
Diese Antwort war falsch positiv, während Sashas Antwort das zeigt, was ich erwarte.
Texas-Bronius
@ Texas-Bronius Wenn Sie Zugriff auf den anderen Server haben, ist es wahrscheinlich besser, Sashas Weg zu tun
motobói
27
  1. beide auf Client und Server installieren nc: yum install nc(für Centos)
  2. auf dem Server lauschen UDP-Port: nc -ul 6111
  3. auf Client nc -u <server> 6111
  4. tippe irgendetwas auf dem Client und drücke Enter - du solltest diesen Text auf dem Server sehen

Hinweis: Wenn Sie den nc -ulBefehl auf dem Server ausführen , wird die Verbindung nur für die erste Verbindung hergestellt, die zu ihm kommt. Wie ich herausgefunden habe, können Sie nicht zwischen Servern wechseln, die Pings senden, ohne anzuhalten und neu zu starten nc -ul. Wenn Sie den Client ( nc -u ...) stoppen , können Sie den Client auch nicht neu starten, ohne zuvor den Server-Listener neu zu starten.

Sasha
quelle
1
Ich mag diese clevere Antwort, weil sie mein eigenes Verständnis (und Missverständnisse!) Davon nährt, wie UDP "Senden und Vergessen" ist und jede Bestätigung nur von der richtigen Konfiguration erhalten werden kann. Zu viele Faktoren. Diese Antwort gibt einen wirklich einfachen, endgültigen Aufruf und eine Antwort, die entweder funktioniert oder nicht funktioniert, die Konfiguration ändert, spült und wiederholt.
Texas-Bronius
10

Das Testen offener UDP-Ports mit nmap ist mit Risiken behaftet - es gibt keinen Drei-Wege-Handshake, der auf Offenheit hinweist. Wenn der Abhörprozess nicht auf die von nmap gesendeten Daten reagiert, kann nmap nicht zwischen einem offenen Port, der nicht antwortet, und einem gefilterten Port unterscheiden.

Viel einfacher ist es, mit netcat nur an einem Ende zuzuhören und am anderen Ende netcat zu verwenden, um Pakete zu senden und zu sehen, dass sie am anderen Ende ankommen. Mach es in beide Richtungen, sei einfach sicher. Sie können auch tcpdumpsehen, wie die Pakete dorthin gelangen, wo sie benötigt werden.

womble
quelle
Ich verstehe ... Woher kennt nmap einen offenen Port genau? Sendet es Daten an diesen Port und wird es als offen eingestuft, wenn es eine Antwort erhält? Ich werde eine Kombination aus tcpdump und netcat verwenden. Vielen Dank für Ihre gut erläuterte Antwort.
Sperren Sie den
2

Sie können udp-Ports mit dem folgenden Befehl scannen

nmap -sU -v <hostname or ip>
Koray Güclü
quelle
1

Sie können dies mit netcat(nc) tun oder iperfvorausgesetzt, Sie haben einen anderen Rechner zum Testen außerhalb des Netzwerks. Ich würde nmapmich für einen UDP-Scan von einem System außerhalb Ihrer Umgebung entscheiden. Was war deine nmap Kommandozeile? Befinden sich Hardware-Firewalls oder andere Geräte im Mix?

ewwhite
quelle
1

Ich habe einen einfältigen Ansatz. Wenn der UDP-Server keine erwarteten Daten zurückgibt, höre ich einfach auf, Dgramme zu sammeln, vorausgesetzt, er ist ausgefallen:

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;
    }
}
David Waddell
quelle