我的理解是.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地址(我从一个SO解决方案中复制了这个也处理IP寻址) .
尝试使用.MaptoIPv4的代码(当然我使用VS2012或2013,使用.NET v4.5)我也使用了ipv4的空值(你的变量),但是从我上面的第一个代码块返回的字符串值,你的变量strIP .
它失败了 .
我还在努力确定应该如何使用这些方法 .
[编辑]实际上,我错误地认为主机AddressList中的第一个IP地址是我想要的 . 其中有3个,其中2个是IPv6,还有一个IPv4是调制解调器的网关 .
所以我没有为解决方案做出太多贡献 . 抱歉 .