【问题标题】:Multiple processes listening on the same port?多个进程监听同一个端口?
【发布时间】:2013-06-17 06:13:52
【问题描述】:

我试图了解如何在 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 连接”的规则绕过防火墙。

【问题讨论】:

  • 这不是一种“安全可靠的行为”。这是一个奇怪的 Windows 奇怪之处,它允许进程窃取彼此的连接。

标签: windows sockets networking tcp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2023-03-09
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多