2013-06-20 77 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的套接字始终可以与已绑定套接字完全相同的源地址和端口绑定,即使另一个套接字 在绑定时没有设置此选项。这种行为是 有点危险,因为它允许*应用程序“窃取”其他应用程序的连接端口 。毋庸置疑,这可能会对主要安全产生影响 。

相关问题