我的理解是 .NET(在我的测试中是 v3.5 到 4.5.2)将返回带有两个冒号的 IPv6 地址,如下所示 -
Dim host As String = Dns.GetHostName()
Dim ip As IPHostEntry = Dns.GetHostEntry(host)
Console.WriteLine(ip.AddressList(0).ToString())
Console.ReadKey()
在我的情况下,它输出 fe80::2d36:51be:16dc:257b%36,通过网关到 ADSL 调制解调器的无线连接。我对您的问题的兴趣是我想返回 IPv4 地址,我知道它是 203.214.36.136(直到我重置调制解调器)。我可以通过登录我的 ISP 或使用这样的代码来看到这一点 -
Using client = New WebClient()
Dim ret As String = client.DownloadString("http://icanhazip.com/").Trim()
Console.WriteLine(ret)
Console.ReadKey()
client.Dispose()
End Using
使用的网页将返回一个 IPv4 IP 地址(我可以通过登录到我的 ADSL 调制解调器和我的 ISP 的网页来验证它是正确的)。我不确定页面上的哪些代码重定向以返回 IP 地址(我从一个也处理 IP 地址的 SO 答案中复制了这个)。
尝试使用 .MaptoIPv4 的代码(当然我使用 VS2012 或 2013,以及 .NET v4.5)我还为 ipv4 (你的变量)使用了空值,但是从我上面的第一个代码块返回的字符串值,对于你的变量strIP。
它失败了。
我仍在努力弄清楚应该如何使用这些方法。
[编辑] 实际上,我错误地假设主机 AddressList 中的第一个 IP 地址是我想要的。有 3 个,其中 2 个是 IPv6,一个是 IPv4,它是我的调制解调器的网关。
所以我对解决方案的贡献不大。对不起。