2013-06-20 79 views
8

我想了解如何在Windows XP上啓動偵聽同一個TCP {IP,Port}對上的多個進程。在同一端口上偵聽多個進程?

例如,我可以啓動兩個ncat.exe程序監聽端口371.第二個啓動沒有任何問題,並且接收傳入的連接,而第一個沒有。一旦最後開始的過程終止,第一個接收它們。

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奇葩,它允許進程竊取對方的連接。 – EJP

回答

9

SO_REUSEADDR套接字選項在Windows中的解釋不同,即在Linux中,它將允許您重複使用相同的套接字,除非所有五元組(src/dst端口/ ip和協議完全相同)。

但是,windows實際上允許你竊取套接字。我會引用一個更好的written answer這裏闡述兩個。

Windows只知道SO_REUSEADDR選項,沒有SO_REUSEPORT。 在Windows的套接字上設置SO_REUSEADDR的行爲類似於在BSD套接字上設置SO_REUSEPORT和SO_REUSEADDR,設置爲 ,但有一個例外: 具有SO_REUSEADDR的套接字始終可以與已綁定套接字完全相同的源地址和端口綁定,即使另一個套接字 在綁定時沒有設置此選項。這種行爲是 有點危險,因爲它允許*應用程序「竊取」其他應用程序的連接端口 。毋庸置疑,這可能會對主要安全產生影響 。

相關問題