【问题标题】:ipv6 equivalent for loopback address环回地址的 ipv6 等效项
【发布时间】:2014-02-25 15:45:07
【问题描述】:

我试图在 Visual Basic 2012 中将 IPv6 地址(那些带有嵌入式 IPv4 地址的 IPv6 地址)“表示”为其等效的 IPv4 地址。以下是我用于相同的代码 sn-p:

Dim ip As IPAddress = IPAddress.Parse(strIP)
Dim ipv4 As IPAddress
Dim ipStr As String = ip.ToString()
IPAddress.TryParse(ipStr.Substring(ipStr.LastIndexOf(":") + 1), ipv4)
Console.Writeline(ipv4.MapToIPv4().ToString)

但是对于环回接口 (127.0.0.1),ipv6 表示似乎是 ::1 而不是 0:0:0:0:0:ffff:7f00:1?这个地址是唯一的“偏差”吗?还有其他需要“特殊”处理的地址吗?

谢谢!

【问题讨论】:

    标签: .net vb.net ip ipv6 loopback


    【解决方案1】:

    您无法将 IPv6 地址“转换”为 IPv4,因此我不太确定您要实现的目标。

    您指的是IPAddress.IsIPv4MappedToIPv6 属性吗?这不是一回事。请注意,此属性是在 .Net 4.5 中引入的,因此在 VB2012 中不起作用

    您说 IPv6 的环回地址是 ::1 是正确的

    不确定这是否有帮助,但您可以将字符串解析为 .Net IPAddress 并检查 IPAddress.AddressFamily 属性以查看它是否设置为 InternNetworkV6(如果 IPAddress 为 v6)。

    例如

    Dim ip1 As IPAddress = IPAddress.Parse("::1")
    Dim ip2 As IPAddress = IPAddress.Parse("127.0.0.1")
    Debug.WriteLine("Is ip1 a v6 address:" + (ip1.AddressFamily = Sockets.AddressFamily.InterNetworkV6).ToString)
    Debug.WriteLine("Is ip2 a v6 address:" + (ip2.AddressFamily = Sockets.AddressFamily.InterNetworkV6).ToString)
    

    输出:

    Is ip1 a v6 address:True
    Is ip2 a v6 address:False
    

    【讨论】:

      【解决方案2】:

      我的理解是 .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。

      失败了。

      我仍在努力弄清楚应该如何使用这些方法。

      [edit] 实际上,我错误地假设主机 AddressList 中的第一个 IP 地址是我想要的。有 3 个,其中 2 个是 IPv6,一个是 IPv4,它是我的调制解调器的网关。

      所以我对解决方案贡献不大。对不起。

      【讨论】:

        猜你喜欢
        • 2017-03-07
        • 2020-02-24
        • 1970-01-01
        • 2023-04-08
        • 2012-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        相关资源
        最近更新 更多