12

Windows XP で同じ TCP {IP, Port} ペアをリッスンする複数のプロセスを開始する方法を理解しようとしています。

たとえば、ncat.exeポート 371 でリッスンする 2 つのプログラムを開始できます。最後に開始されたプロセスが終了すると、最初のプロセスがそれらを受け取ります。

netstat -a -n | find "LISTENING"
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING

これが Windows (XP) の動作であると仮定すると、どのようにして安全で安全な動作になるのでしょうか? これは、通常の「アドレスは既に使用されています」というエラー メッセージを表示する代わりに、既にリッスンしているポートを「過負荷」にし、「ポート 371 での受信 TCP 接続はすべて許可する」というルールだけでファイアウォールをバイパスできることを意味します。

4

1 に答える 1

17

SO_REUSEADDR ソケット オプションは、Windows では解釈が異なります。つまり、Linux では、5 つのタプル (src/dst ポート/IP とプロトコルがまったく同じ) がすべて同じでない限り、同じソケットを再利用できます。

ただし、Windows では実際にソケットを盗むことができます。ここで、両方を詳しく説明した、はるかに優れた書面による回答を引用します。

Windows は SO_REUSEADDR オプションのみを認識し、SO_REUSEPORT はありません。Windows のソケットに SO_REUSEADDR を設定すると、BSD のソケットに SO_REUSEPORT と SO_REUSEADDR を設定するのと同じように動作します。バインドされたときにこのオプションを設定しないでください。この動作は、アプリケーションが別のアプリケーションの接続ポートを「盗む」ことを可能にするため、やや危険です。言うまでもなく、これはセキュリティに大きな影響を与える可能性があります。

于 2013-06-20T11:57:43.397 に答える