多个进程在同一个端口上侦听?

我想了解如何启动多个进程在Windows XP上侦听同一个TCP {IP,Port}对。

例如,我可以启动两个在端口371上侦听的ncat.exe程序。第二个启动时没有任何问题,接收到连接,而第一个没有。 一旦最后开始的过程终止,第一个接收它们。

 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连接被允许”。

Solutions Collecting From Web of "多个进程在同一个端口上侦听?"

SO_REUSEADDR套接字选项在Windows中的解释不同,即在Linux中,它将允许您重复使用相同的套接字,除非所有五元组(src / dst端口/ ip和协议完全相同)。

但是,窗口实际上允许你窃取插座。 我在这里引用一个更好的书面答案来阐述两者。

Windows只知道SO_REUSEADDR选项,没有SO_REUSEPORT。 在Windows的套接字上设置SO_REUSEADDR就像在BSD套接字上设置SO_REUSEPORT和SO_REUSEADDR一样,只有一个例外:带有SO_REUSEADDR的套接字可以始终绑定到与已经绑定的套接字完全相同的源地址和端口,即使其他套接字绑定时没有设置此选项。 这种行为有点危险,因为它允许应用程序“窃取”另一个应用程序的连接端口。 不用说,这可能会有重大的安全隐患。