AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 72112
Accepted
Etienne Dechamps
Etienne Dechamps
Asked: 2009-10-08 03:41:59 +0800 CST2009-10-08 03:41:59 +0800 CST 2009-10-08 03:41:59 +0800 CST

如何更改 Windows 上的全局广播地址 (255.255.255.255) 行为?

  • 772

期望的行为

当应用程序向全局广播 IP 地址发送数据包时255.255.255.255,我希望将数据包发送到ff:ff:ff:ff:ff:ff所有接口上的以太网全局广播地址 ()。

在 Linux 和可能的其他操作系统上,这似乎也有效。Windows XP 和 Windows 7 对此表现出不同的行为,这两种行为都不适合我的情况。

Windows XP 行为

数据包将正确发送到第一个网络接口(接口顺序在“网络连接/高级/高级设置”中指定)。它也将被发送到其他接口。

到目前为止一切都是正确的。问题是,当发送到其他接口时,广播包的源地址是第一个接口的IP地址。例如,想象一下这个网络配置(顺序很重要):

  • 适配器 1:IP 地址192.168.0.1
  • 适配器 2:IP 地址10.0.0.1
  • 适配器 3:IP 地址172.17.0.1

现在,如果我发送一个广播数据包,将发送以下数据包(带有源和目标 IP 地址):

  • 在适配器 1 上:192.168.0.1=>255.255.255.255

  • 在适配器 2 上:192.168.0.1=>255.255.255.255

  • 在适配器 3 上:192.168.0.1=>255.255.255.255

    实际上,使用广播数据包的应用程序在适配器 1 以外的任何接口上都无法工作。在我看来,这是 Windows XP 的 TCP/IP 堆栈中的一个明显错误。

Windows 7 行为

修改网络接口顺序似乎对 Windows 7 没有任何影响。相反,广播似乎是由 IP 路由表控制的。

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0   10.202.254.254       10.202.1.2    286
          0.0.0.0          0.0.0.0      192.168.0.1      192.168.0.3     10
       10.202.0.0      255.255.0.0         On-link        10.202.1.2    286
       10.202.1.2  255.255.255.255         On-link        10.202.1.2    286
   10.202.255.255  255.255.255.255         On-link        10.202.1.2    286
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      192.168.0.0    255.255.255.0         On-link       192.168.0.3    266
      192.168.0.3  255.255.255.255         On-link       192.168.0.3    266
    192.168.0.255  255.255.255.255         On-link       192.168.0.3    266
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link       192.168.0.3    266
        224.0.0.0        240.0.0.0         On-link        10.202.1.2    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link       192.168.0.3    266
  255.255.255.255  255.255.255.255         On-link        10.202.1.2    286
===========================================================================

看255.255.255.255路线?是的,它们控制广播数据包。在这种情况下,广播数据包将通过 发送,192.168.0.3因为它的度量较低……但不会发送到其他接口。

您可以非常轻松地更改发送全局广播数据包的接口(只需添加255.255.255.255一个低度量的持久路由)。但是无论你怎么努力,广播数据包只会在一个接口上发送,并不是所有的接口都像我希望的那样。

结论

  • Windows 7 只向一个接口发送广播数据包。你可以选择哪一个,但这不是重点。
  • Windows XP 将广播数据包发送到所有接口,但它只将它们按预期发送到一个接口,这实际上相当于 Windows 7 的行为。

目标

我想一劳永逸地更改 Windows(最好是 Windows 7)中的这种全球 IP 广播支持。当然,更好的方法是进行某种受支持的配置更改(注册表黑客或类似),但我愿意接受所有建议。

有任何想法吗?

windows
  • 2 2 个回答
  • 21522 Views

2 个回答

  • Voted
  1. Scott Lundberg
    2009-10-08T06:17:14+08:002009-10-08T06:17:14+08:00

    并不是说我在为微软辩护,而是在阅读了以下试图定义广播如何工作的 RFC 之后,我认为微软不一定违反任何 RFC。IMO 问题应该在应用程序级别解决(即定向广播,而不是全局),这将命中路由表中的适当路由,并且仅从该 IP 网络的正确接口发送。

    • RFC922
    • RFC919

    他们都表示没有为广播定义标准。它还在 919 中提到应该为广播选择特定的物理接口。在生成广播的多宿主、多 NIC 机器的情况下,我认为它没有明确说明应该发生什么。广播不应该由路由器从一个接口传递到另一个接口,那么在这种情况下,Windows 机器是否是路由器?
    如果它充当路由器,则任何使用该网络的错误 IP 地址响应广播的主机(在您的示例中为适配器 2 和 3)都应将数据包发送回适配器 2 和 3 的以太网地址以响应适配器1 的 IP 地址和 Windows 主机应将其路由到正确的接口。
    这听起来令人困惑......但想不出更好的表达方式

    最后,RFC 919 明确表示 From RFC 919

    由于我们假设问题已经在数据链路层得到解决,所以希望
    发送本地广播或定向广播的 IP 主机只需
    指定适当的目标地址并
    照常发送数据报即可。任何复杂的算法只需要驻留在网关中。

    阅读这表明源 IP 地址与广播无关。


    由于每个应用程序似乎处理广播的方式不同,我认为这就是责任所在。例如。 nbtstat在多 NIC 的机器上发送定向广播,而游戏可能使用全局广播。
    简而言之,应该修复应用程序,而不是这种情况下的操作系统......

    编辑:这是相同情况下的链接,但在 Linux 上。linux 内核只通过默认接口(本例中的 NIC A)发送一个数据包来处理它。他们建议应用程序枚举 NIC 并向每个 NIC 发送定向广播。 关联

    • 7
  2. Best Answer
    Etienne Dechamps
    2009-11-01T15:14:45+08:002009-11-01T15:14:45+08:00

    最后,我以编程方式解决了它。我编写了一个名为WinIPBroadcast的小软件,它负责将广播帧中继到所有接口。

    它使用一个有趣的事实:在侦听环回地址 (127.0.0.1) 时,可以接收本地生成的全局广播数据包。WinIPBroadcast 使用 RAW 套接字侦听所有广播的本地地址,然后对于每个广播数据包,它将其中继到除首选接口之外的所有接口。

    2021 年 12 月 6 日更新:更新了社区链接

    • 4

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 如何在笔记本电脑上使用 Tobit David?[关闭]

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve