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

时间:2013-06-20 11:44:46

标签: windows sockets networking tcp

我试图了解如何在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连接”。

1 个答案:

答案 0 :(得分:14)

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的套接字始终可以绑定到完全相同的源   地址和端口作为已绑定的套接字,即使是另一个套接字   绑定时没有设置此选项。这种行为是   有点危险,因为它允许*应用程序“窃取”   另一个应用程序的连接端口不用说,这可以   主要的安全隐患。