我正在使用这些.NET Framework
类来获取我机器的 IP 地址。
Dns.GetHostAddresses(Dns.GetHostName())
Run Code Online (Sandbox Code Playgroud)
我有一个 VirtualBox 适配器,它同时具有 IPv4 和 IPv6 地址。使用 .NET 代码,我将 IPv6 地址作为fe80::71a3:2b00:ddd3:753f%16
注意到末尾的 %16 了吗?
但是,如果我使用相同的查询WMI
,我得到的地址为'fe80::71a3:2b00:ddd3:753f'
那么,%16 有什么特殊意义吗?
编辑:
我只是对此有更多的观察。它们与斯蒂芬詹宁斯在他的回答中所说的非常吻合。
我安装了 Vmware 以查看它发出的 IPv6 地址。地址是:fe80::3dd0:7f8e:57b7:34d5%19
fe80::b059:65f4:e877:c40%20
显然,% 之后的数字不是某种十六进制表示。我使用 Wmi 检查了网络适配器的所有可用属性,发现这些数字与每个网络适配器的 InterfaceIndex 属性完全相同。根据MSDN,它唯一标识每个网络适配器,这个属性是在 Vista 中引入的。
仍然让我感到困惑的是,为什么 IPAddress 类允许您以该格式创建 IP 地址,除非它有效。斯蒂芬提供了答案。数字是范围 ID。IPAddress 有一个接受地址和范围 ID 的构造函数。
哦,所有这三个网络适配器都是本地链接。通过 ipconfig 确认
凉爽的。那很有趣!!
ipv6 ×1