出于诊断目的,我想在 Windows 上完全禁用 TCP/IP 堆栈对多播的支持。我该怎么做?
我希望在 Windows XP 上执行此操作,但如果无法提供,其他版本的说明也是可以接受的(服务器和客户端 SKU,所有变体,跨版本)。
答案1
Win7防火墙有一个关于阻止IGMP的选项
入站规则,新规则,自定义,选择协议,然后选择 IGMP。出站规则,新规则,同上
我在 XP 防火墙中没有看到此选项。它支持 ICMP,但不支持 IGMP。
以下是 Morbid 的回答
win7
http://technet.microsoft.com/en-us/library/cc957547.aspx HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IGMPLevel <-- set to 0
这有点像病态的“答案”。
将 IGMPLevel 设置为 0
操作系统
http://support.microsoft.com/kb/314053/en-gb
所有 TCP/IP 参数都是位于以下两个不同子项之一下的注册表值
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
和
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID for Adapter
在这些键处,将 IGMPLevel 设置为 0
不过,我还没有测试过,在我的系统上,在我的 Win7 系统或我的 XP 系统上。虽然有键,但名称 (IGMPLevel) 不在我的注册表中的这些键中。所以在我的情况下,我必须创建它。
答案2
*已更新答案,以纠正我阅读问题时的错误。;) 2014.07.25
如何在 Windows 的 TCP/IP 堆栈上禁用多播?
出于诊断目的,我想在 Windows 上完全禁用 TCP/IP 堆栈对多播的支持。我该怎么做?
我希望在 Windows XP 上执行此操作,但如果无法提供,其他版本的说明也是可以接受的(服务器和客户端 SKU,所有变体,跨版本)。
似乎我忽略了多播部分,我的坏已经持续了一段时间了。就多播而言,似乎你有一些选择:
请参阅此处:强制 Windows 7 SP1 禁用 NIC 上的多播
和这里:Windows XP 的 TCP/IP 和 NBT 配置参数 (Q314053)
概括
本文定义了用于配置实现标准 TCP/IP 网络协议的协议驱动程序 Tcpip.sys 的所有注册表参数。
Windows XP 的 TCP/IP 协议套件实现从注册表中读取其所有配置数据。此信息由控制面板中的网络工具作为安装过程的一部分写入注册表。如果启用了 DHCP 客户端服务,则其中一些信息也由动态主机配置协议 (DHCP) 客户端服务提供... 阅读更多。
有关如何编辑注册表的信息,请查看注册表编辑器 (Regedit.exe) 中的“更改项和值”帮助主题或 Regedt32.exe 中的“添加和删除注册表中的信息”和“编辑注册表数据”帮助主题。请注意,在编辑注册表之前应先备份注册表。如果您运行的是 Windows NT 或 Windows 2000,还应更新紧急修复磁盘 (ERD)。
要更改这些参数,请按照以下步骤操作:
Start Registry Editor (Regedit.exe).
From the HKEY_LOCAL_MACHINE subtree, go to the following key:
>\SYSTEM\CurrentControlSet\Services
Add a value to the key as described in the appropriate
entry below by clicking Add Value on the Edit menu, typing
the value, and then setting the value type under Data Type .
Click OK .
Quit Registry Editor.
Restart the computer to make the change take effect.
所有 TCP/IP 参数都是位于以下两个不同子项之一下的注册表值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
Tcpip\Parameters
Tcpip\Parameters\Interfaces\ ID for Adapter
其中适配器 ID 表示与 TCP/IP 绑定的网络适配器。适配器 ID 和网络连接之间的关系可以通过检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network{4D36E972-E325-11CE-BFC1-08002BE10318}\ 适配器 ID \Connection 来确定。这些键中的名称值为网络连接文件夹中使用的网络连接提供友好名称。后面这些键下的值特定于每个适配器。可能存在或不存在 DHCP 和静态配置值的参数,具体取决于系统/适配器是否配置为 DHCP 以及是否指定了静态覆盖值。要使这些参数中的任何一个更改生效,需要重新启动系统...
这是你正在寻找的钥匙我相信:
>IGMPLevel
Key: Tcpip\Parameters
Value Type: REG_DWORD - Number
Valid Range: 0,1,2
Default: 2
此参数决定系统在多大程度上支持 IP 多播和参与 Internet 组管理协议。在级别 0 时,系统不提供多播支持。在级别 1 时,系统只能发送 IP 多播数据包。在级别 2 时,系统可以发送 IP 多播数据包并完全参与 IGMP 以接收多播数据包。
您应该将注册表项设置为 0,以不支持多播。
希望这比以前的答案更有帮助。哈哈:)
已编辑,请忽略以下内容:
问题“如何禁用 Windows 的 TCP/IP 堆栈?”的答案:
不行!你可以重新安装或重置。
“在 Windows XP 中,TCP/IP 堆栈被视为操作系统的核心组件,您无法删除 TCP/IP。”
“在极端情况下,此问题的最佳解决方案可能是重新安装 IP 堆栈。但使用 NetShell 实用程序,您可以重置 TCP/IP 堆栈以将其恢复到安装操作系统时的状态”
另请参阅此处:“如何在 VC++ 中禁用 Windows TCP/IP 堆栈 [以编程方式]“如下所述……
如何在 VC++ 中禁用 Windows TCP/IP 堆栈 [以编程方式]
想知道如何在 VC++ 中禁用 Windows TCP/IP 堆栈 [以编程方式]。
我们正在使用 winpcap 进行一些原始套接字编程。因此我们的应用程序不需要 Windows TCP/IP 堆栈,并且我们希望在应用程序启动时将其卸载。
请帮忙。
提前致谢。
TCP/IP 堆栈是任何现代操作系统(包括最新版本的 MS Windows)的重要组成部分。如上所述MS 知识库 Q299357(谈论 Win XP):
由于 TCP/IP 是 Windows 的核心组件,因此您无法删除它。
无论如何,即使可能,使用 TCP/IP 的程序(这是大多数现代软件,因为大多数包含某种网络集成、自动更新等)都无法运行,并且大多数程序可能会以神秘的方式失败,因为没有人测试过该配置。
因此简短的回答是:不要这样做。
也许您可以解释一下为什么您认为有必要删除 TCP/IP 网络?这样我们也许能够帮助您。
编辑:
根据您下面的评论,如果您想绕过/禁用 TCP/IP 堆栈的 ARP 处理,那么 WinPcap 应该可以让您做到这一点。如果不想,您可能需要编写自己的 Windows 网络驱动程序。同样,这似乎非常复杂和具有侵入性。您能否描述一下您的应用程序的作用以及为什么您甚至需要处理低级网络?
似乎徒劳无功我的朋友如果他们对你的问题有答案不,你不能。
答案3
我在 XP 注册表中寻找这些项,但找不到它们,因此我找到了一个更好的解决方案:
在提升的命令提示符中:
C:\Windows\system32> netsh
netsh>firewall
netsh firewall>set multicastbroadcastresponse disable
netsh firewall>set multicastbroadcastresponse mode=disable profile=all
要检查配置是否正确,请写入:
netsh firewall>show multicastbrodcastresponse
来源:微软网站 – “Windows 防火墙的 Netsh 命令”
IGMPLevel 注册表项在 XP 中不存在,如上图所示。但是,必须创建此注册表项才能存在。
除非 XP 中的注册表项是:“UseZeroBroadcast”。无论如何,就像之前所说的那样,它在我的 XP 中有效,至少 wireshark 不会检测到到 224.0.0.1 或 239.255.255.255 的广播数据包。
重要提示:netsh firewall
在较新版本的 Windows 中已弃用;请使用netsh advfirewall firewall
。有关使用netsh advfirewall firewall
命令代替 的更多信息netsh firewall
,请参阅知识库文章 947709:“如何使用上下文netsh advfirewall firewall
而不是netsh firewall
上下文来控制 Windows Server 2008 和 Windows Vista 中的 Windows 防火墙行为”。