Frage Testen der UDP-Port-Konnektivität


Ich versuche zu testen, ob ich über UDP auf einen bestimmten Port auf einem Remote-Server (auf den ich zugreifen kann) zugreifen kann.

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

Ich benutze dann nmap, um nach diesem Port zu sehen, um zu sehen, ob er offen ist, aber es scheint nicht zu sein.

Iptables ist ausgeschaltet.

Irgendwelche Vorschläge warum das sein könnte? Ich werde schließlich einen VPN-Tunnel einrichten, aber weil ich sehr neu in Tunneln bin, möchte ich sicherstellen, dass ich Konnektivität auf Port UDP 1194 habe, bevor ich fortfahre.


34
2017-08-10 08:42


Ursprung


Ich habe Antwort auf die Frage "Testen von UDP-Port-Konnektivität". Aber ich schlage vor, mich auf den spezifischeren "Sicherstellen, dass OpenVPN empfängt meine UDP-Pakete" Teil - das könnte leicht durch Blick auf OpenVPN-Protokolle erreicht werden. - Luke404


Antworten:


Es gibt keinen "offenen" UDP-Port, zumindest nicht in dem Sinne, in dem die meisten Leute gewohnt sind zu denken (was etwa auf "ok, ich habe deine Verbindung akzeptiert") antwortet. UDP ist session-less, also "ein Port" (lesen: das UDP-Protokoll im Betriebssystem-IP-Stack) wird nie "Erfolg" von selbst reagieren.

UDP-Ports haben nur zwei Zustände: hören oder nicht. Das bedeutet normalerweise, dass "ein Sockel von einem Prozess geöffnet wird" oder "kein Socket offen ist". Der letztere Fall sollte leicht zu erkennen sein, da das System mit einem antworten sollte ICMP-Ziel nicht erreichbar Paket mit Code = 3 (Port nicht erreichbar). Leider können viele Firewalls diese Pakete abschneiden. Wenn Sie also nichts zurückbekommen, wissen Sie nicht genau, ob der Port in diesem Zustand ist oder nicht. Und vergessen wir nicht, dass ICMP auch Session-less ist und keine Retransmissions macht: Das Port Unreachable Packet könnte sehr wohl irgendwo im Netz verloren gehen.

Ein UDP-Port im Zustand "Listening" konnte nichts antworten (der Prozess, der darauf wartet, empfängt nur das Paket und überträgt nichts) oder könnte etwas zurücksenden (wenn der Prozess beim Empfang reagiert) und Wenn es sich verhält, indem es über UDP auf den ursprünglichen Sender IP antwortet: Port), so dass Sie nie wieder sicher wissen, was der Status ist, wenn Sie nichts zurückbekommen.

Sie sagen, Sie können die Kontrolle über den empfangenden Host haben: das macht Sie in der Lage, Ihr eigenes Protokoll zu erstellen, um die Erreichbarkeit von UDP-Ports zu überprüfen: Legen Sie einfach einen Prozess auf den empfangenden Host, der auf dem angegebenen UDP-Port wartet und antworten Sie zurück (oder senden Sie eine E-Mail, oder einfach nur ausflippen und unlink() alles auf dem Host-Dateisystem ... alles, was deine Aufmerksamkeit auslöst, wird es tun).


39
2017-08-10 12:13



Denke, ich verstehe es jetzt. Ein Netstat auf dem Server mit dem UDP-Port wird also niemals den Remote-Host anzeigen ... Nur ein Tcpdump sollte die Remote-Anfragen anzeigen? - Lock
Sowohl Netstat als auch tcpdump können Daten auf Sie übertragen, letztere in einer besser lesbaren Form. Sehen Sie sich ihre Manpages für Details an. - Luke404


Um zu testen, ob der UDP-Port antwortet, verwenden Sie netcat.

Ein Beispiel aus der Man Seite:

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.

Natürlich, wenn eine Firewall ist DROPWie bei Internet-Gateways üblich, erhalten Sie keine ICMP-Antwort.


48
2018-04-28 16:45



Diese Antwort gab mir ein falsch positives Ergebnis, wohingegen Saschas Antwort das zeigt, was ich erwarte. - texas-bronius
@ texas-bronius Wenn du Zugriff auf den anderen Server hast, ist es wahrscheinlich besser, Saschas Weg zu gehen - motobói


  1. sowohl auf Client und Server installieren nc: yum install nc (für Centos)
  2. auf dem Server hören UDP-Port: nc -ul 6111
  3. auf dem Client nc -u <server> 6111
  4. Geben Sie irgendwas auf dem Client ein und drücken Sie Enter - Sie sollten diesen Text sehen Server

Hinweis: Wenn Sie das ausführen nc -ul Befehl auf dem Server wird es nur verbinden für die erste Verbindung, die zu ihm kommt. Sie können nicht, wie ich herausfand, zwischen Servern wechseln, die es anpingen, ohne anzuhalten und neu zu starten nc -ul. In der Tat, wenn Sie den Client stoppen (nc -u ...), können Sie den Client auch nicht neu starten, ohne zuerst den Server-Listener neu zu starten.


21
2017-11-04 17:42



Ich mag diese clevere Antwort, weil sie mein eigenes Verständnis (und Missverständnisse!) Davon vermittelt, wie UDP "senden und vergessen" ist und alle Bestätigung nur von der richtigen Konfiguration erhalten werden kann. Zu viele Faktoren. Diese Antwort gibt einen wirklich einfachen, definitiven Anruf und Antwort, die entweder funktioniert oder nicht funktioniert, Konfiguration ändern, spülen und wiederholen. - texas-bronius


Das Testen von offenen UDP-Ports mit nmap ist voller Gefahren - es gibt keinen Drei-Wege-Handshake, um Offenheit anzuzeigen. Wenn der Abhörprozess nicht auf die von nmap gesendeten Signale reagiert, gibt es keine Möglichkeit für nmap, zwischen einem offenen Port, der nicht antwortet, und einem gefilterten Port zu unterscheiden.

Viel einfacher ist es, an einem Ende mit netcat zu horchen und netcat am anderen Ende zu verwenden, um Pakete zu senden und zu sehen, dass sie am anderen Ende ankommen. Mach es in beiden Richtungen, sei dir sicher. Du kannst auch tcpdump um zu sehen, dass die Pakete dorthin gelangen, wo sie hin müssen.


8
2017-08-10 08:50



Ich verstehe .. Also, woher kennt nmap einen offenen Port genau? Sendet es Daten an diesen Port und wenn es eine Antwort erhält, gilt es als offen? Ich werde eine Kombination aus tcpdump und netcat verwenden. Danke für deine gut erklärte Antwort. - Lock


Ich hatte ein ähnliches Problem und fand hier eine gute Lösung mit netcat: http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open:_simple_UDP_server_and_client

nc -vzu <host> <port>

Ich konnte bestätigen, dass mein UDP-Port offen war, und konnte dann meinen eigentlichen Code testen.


8
2017-10-17 21:22





Sie können dies mit tun netcat (nc) oder iperf, vorausgesetzt, Sie haben eine andere Maschine zum Testen mit außerhalb des Netzwerks. Meine Wahl wäre eine nmap UDP-Scan von einem System außerhalb Ihrer Umgebung Was war deine nmap-Befehlszeile? Gibt es Hardwarefirewalls oder andere Geräte im Mix?


0
2017-08-10 11:21





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

nmap -sU -v <hostname or ip>

0
2017-07-04 23:47