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.
centos
udp
networking
Sperren
quelle
quelle
Antworten:
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.quelle
Verwenden Sie, um zu testen, ob der udp-Port reagiert
netcat
.Ein Beispiel aus der Manpage :
Wenn eine Firewall
DROP
installiert ist, wie dies normalerweise bei Gateways mit Internetverbindung der Fall ist, erhalten Sie natürlich keine ICMP-Antwort.quelle
yum install nc
(für Centos)nc -ul 6111
nc -u <server> 6111
Hinweis: Wenn Sie den
nc -ul
Befehl 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 startennc -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.quelle
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
tcpdump
sehen, wie die Pakete dorthin gelangen, wo sie benötigt werden.quelle
Ich hatte ein ähnliches Problem und fand hier mit Netcat eine gute Lösung: 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 dann meinen tatsächlichen Code testen.
quelle
Sie können udp-Ports mit dem folgenden Befehl scannen
quelle
Sie können dies mit
netcat
(nc) tun oderiperf
vorausgesetzt, Sie haben einen anderen Rechner zum Testen außerhalb des Netzwerks. Ich würdenmap
mich 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?quelle
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:
quelle