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

Jul*_*rra 11 sockets windows networking tcp

我试图了解如何在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
Run Code Online (Sandbox Code Playgroud)

假设这是一种Windows(XP)行为,它如何成为一种安全可靠的行为?这意味着可以"重载"任何已经侦听的端口,而不是获取通常的"已使用的地址"错误消息,并简单地绕过防火墙,规则只是说"允许端口371上的任何传入TCP连接".

fkl*_*fkl 15

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

但是,Windows实际上允许您窃取套接字.我会在这里详细说明一个更好的书面答案.

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