python - 如何使用 WMI/COM 连接到链路本地 IPv6?

标签 python winapi wmi

我正在尝试从主机 B 对主机 A 进行一些 v4 网络配置。因为在 v4 上使用 WMI 将是一个 catch-22,所以我想使用链接本地 v6 来建立连接。

显然,COM 至少从 2003 年起就支持 IPv6。链接本地似乎被遗忘了。

令人困惑的是:如果主机 A 有可用的 IPv4(是的,4),则这有效(在 Python 中):

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

但是,当我从 A 的接口(interface)中删除 v4 地址,或将其替换为主机 B 无法连接的地址时,上面的调用失败,报告“找不到指定的对象导出器”。有趣的是,主机 A 上的 netstat 确实显示了连接尝试。

其他信息:

  • Windows telnet.exe 接受 fe80 地址(带或不带 %17),并且可以正常连接到端口 135。
  • Python 的 socket.socket.connect 也有同样的作用。

有什么提示吗?

已解决:WMI 似乎执行了某种回调连接,并且在这种情况下无法应对链接本地 v6。升级至 MS 支持。

最佳答案

事实证明,无论 WMI 使用何种奇怪的回调机制来实现双向通信,都无法应对链路本地寻址。我正在升级至 Microsoft 支持。

更新:我已与 MS 支持讨论了该问题。事实证明,Windows 防火墙的默认设置会阻止链接本地名称解析,而 WMI 需要工作名称解析。

在您要连接的计算机上启用“网络发现 (LLMNR-UDP-In)”的允许规则,使一切正常工作。显然,问题不在于某些连接返回,而是 WMI 坚持连接到指定端点。或者其他什么。

关于python - 如何使用 WMI/COM 连接到链路本地 IPv6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693194/

相关文章:

c - 如何在 Windows 上删除 c 中的 .zip 文件? (错误: Directory not empty)

winapi - 如何创建未知大小的 CFSTR_FILEDESCRIPTOR?

c# - 使用 Windows 服务和 Vb.Net 检测 USB 驱动器的插入和移除

python - 按周将时间序列数据叠加在同一图上 - 修复我的多重索引?

python - Jenkins 主/从窗口

C++ 文件系统迭代器无效参数

c# - 从另一台远程计算机上的共享在远程计算机上使用 WMI 启动进程

c# - 如何从 C# 中的打印机删除访问控制条目?

python - 在 Python 中以对数方式缩放二维数组

python - 标记点对象 pyspark 中的错误