如何通过WMI/COM连接到链路本地IPv6?

1 投票
1 回答
548 浏览
提问于 2025-04-16 21:31

我正在尝试从主机B对主机A进行一些v4网络配置。因为使用WMI通过v4会遇到一些麻烦,所以我想用链路本地的v6来建立连接。

据说COM从2003年起就支持IPv6,但链路本地的部分似乎被遗忘了。

让人困惑的是:如果主机A有正常工作的IPv4(没错,就是4),那么在Python中这样做是可以的:

>>> c = wmi.WMI('fe80::c0af:e3e1:8383:ddc7%17', user='Administrator', password='blabla')
>>>

但是,当我把A的接口上的v4地址去掉,或者换成一个主机B无法连接的地址时,上面的调用就失败了,报错信息是“指定的对象导出器未找到”。有趣的是,主机A上的netstat显示确实有连接尝试。

补充信息:

  • Windows的telnet.exe可以接受fe80地址,无论有没有%17,都能顺利连接到135端口。
  • Python的socket.socket.connect也是这样。

有没有什么提示呢?

解决了:看起来WMI做了一种回调连接,而在这种情况下,它无法处理链路本地的v6。正在向微软支持寻求帮助。

1 个回答

1

原来,WMI(Windows管理工具)用来实现双向通信的那些奇怪的回调机制,无法处理链接本地地址。我要向微软支持部门升级这个问题。

更新:我和微软支持部门讨论了这个问题。结果发现,Windows防火墙的默认设置会阻止链接本地名称解析,而WMI需要正常的名称解析才能工作。

在你要连接的机器上,启用“网络发现(LLMNR-UDP-In)”的允许规则,就能让一切正常运作。显然,这个问题并不是某种回连,而是WMI坚持要连接到一个有名称的端点。或者说是其他什么原因。

撰写回答