Ich habe Port 4000 auf meinem lokalen Rechner wie folgt geöffnet:
nc -lvup 4000
und habe dann versucht, wie folgt eine Verbindung zum gleichen Port herzustellen:
nc -vu 127.0.0.1 4000
und konnte erfolgreich eine Verbindung herstellen und Text hin und her senden und empfangen. Wenn ich jedoch auf demselben Port lausche, wie im ersten Snippet gezeigt, und dann einen UDP-Scan versuche mit
nmap -sU 127.0.0.1 -p 4000
Das Ergebnis ist wie folgt:
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
PORT STATE SERVICE
4000/udp closed icq
Sollte da nicht „offen“ stehen, da der Port doch eindeutig offen ist, wie der erste Test festgestellt hat? Bitte erklären Sie mir, was ich meine, denn ich bin wirklich ratlos.
Antwort1
Nein. Du verstehst nicht, was passiert. Das ist UDP, es gibt keineAnschlüsse.
Wenn Sie second ausführen nc
und etwas eingeben, sendet es einfach Pakete. Dannauf andere Weise(auf die andere Seite der Kommunikation schauen, z. B. auf einen anderen Computerbildschirm) bestätigen, dass die Kommunikation stattfindet. Wenn es niemanden gäbe, der „zuhört“ nc
, würde der „sendende“ NC fröhlich dieselben Pakete senden, ohne einen Hinweis darauf zu haben, ob diese empfangen oder gelöscht wurden.
Das tut es auch nmap
. Es sendet Pakete, sieht keine Antworten und entscheidet, dass seine Pakete einfach im schwarzen Loch verschwunden sind.
Das ist UDP, es ist so. Es hat keine intrinsische Empfangsbestätigung. Wenn die Anwendung es braucht, führt sie selbst Bestätigungen durch. Und da wir hier kein Protokoll auf Anwendungsebene haben, um es zu tun, sieht nmap keine Antwort, es wurde kein „offener Port“ erkannt.
Im Vergleich dazu verfügt TCP über integrierte Bestätigungen (ACKs), weshalb wir zuverlässig erkennen können, ob der Port geöffnet ist.