Ich versuche zu verstehen, wie es möglich ist, mehrere Prozesse zu starten, die unter Windows XP auf demselben TCP {IP, Port} -Paar empfangsbereit sind.
Zum Beispiel kann ich zwei ncat.exe
Programme starten, die auf Port 371 hören. Der zweite wird ohne Probleme gestartet und empfängt eingehende Verbindungen, während der erste nicht funktioniert. Sobald der zuletzt gestartete Prozess beendet ist, erhält der erste sie.
Unter der Annahme, dass dies ein Windows (XP) Verhalten ist, wie kann es ein sicheres & amp sein; sicheres Verhalten? Das bedeutet, dass man jeden bereits abhörenden Port "überladen" kann, anstatt die übliche "Adresse wird bereits verwendet" -Fehlermeldung zu erhalten und einfach Firewalls mit Regeln zu umgehen, die nur sagen, "alle eingehenden TCP-Verbindungen an Port 371 sind erlaubt".
Die SO_REUSEADDR-Socket-Option wird in Windows anders interpretiert, d. h. in Linux würde es Ihnen ermöglichen, denselben Socket wiederzuverwenden, wenn nicht alle fünf Tupel (src / dst port / ip und protocol genau identisch sind).
Aber Fenster erlauben es Ihnen tatsächlich, den Socket zu stehlen. Ich würde hier eine viel bessere schriftliche Antwort zitieren, die beide aufarbeiten.
Windows kennt nur die Option SO_REUSEADDR, es gibt kein SO_REUSEPORT. Das Festlegen von SO_REUSEADDR auf einem Socket in Windows verhält sich wie Einstellung SO_REUSEPORT und SO_REUSEADDR auf einem Socket in BSD mit einer Ausnahme: Ein Socket mit SO_REUSEADDR kann immer an genau die gleiche Quelle binden Adresse und Port als bereits gebundene Socket, auch wenn der andere Socket hatte diese Option nicht eingestellt, als es gebunden war. Dieses Verhalten ist etwas gefährlich, weil es eine * Anwendung erlaubt, "die" zu stehlen " verbundener Port einer anderen Anwendung. Unnötig zu sagen, dies kann haben wichtige Auswirkungen auf die Sicherheit.
Tags und Links sockets windows networking tcp