2013-06-20 16 views
8

Windows XPの同じTCP {IP、Port}ペアで複数のプロセスをリッスンする方法を理解するために、どのように理解できるかを試しています。複数のプロセスが同じポートでリスンしていますか?

たとえば、ポート371でリッスンする2つのncat.exeプログラムを開始できます。第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接続が許可されている」というルールでファイアウォールをバイパスします。

+3

「安全で安全な動作」ではありません。これは、プロセスがお互いの接続を盗むことを可能にする奇妙なWindowsのwierdnessです。 – EJP

答えて

9

SO_REUSEADDR socketオプションは、WindowsではLinuxでは異なる5つのタプル(src/dst port/ipとprotocolが完全に同じでない場合)以外は同じソケットを再利用できます。

しかし、実際には、ウィンドウではソケットを盗むことができます。私はここでもっとうまくいっています。written answerここで詳しく説明します。

WindowsはSO_REUSEADDRオプションのみを認識します.SO_REUSEPORTはありません。 WindowsのソケットでSO_REUSEADDRを設定すると、 ソケットを使用すると、SO_REUSEPORTとSO_REUSEADDRのように振る舞います。 SO_REUSEADDRのソケットは、他のソケット には、バインド時にこのオプションが設定されていませんでした。この動作は です。アプリケーションが別のアプリケーションの ポートに「盗む」ことができるため、やや危険です。言うまでもなく、これにはセキュリティの重要な意味合いがあります( )。

関連する問題