在System.Net.IPAddress类中阻止混合IPv6格式

本文关键字:混合 IPv6 格式 System Net IPAddress | 更新日期: 2023-09-27 18:05:47

我正在寻找答案,但我找不到它。我用的是这样的

            if (IPAddress.TryParse(val, out parsedOutput))
            {    
                // ip address
                parsedOk = true;
            }

我传递的val字符串看起来像这样:0:0:0:0:0:0:1111:0

我得到在parsedOutput这:::17.17.0.0

有没有办法得到这样的东西:::1111:0而不是这个"混合"ipv4/ipv6值?

在System.Net.IPAddress类中阻止混合IPv6格式

根据RFC 5952 (IPv6地址文本表示建议),表示法实际上是正确的。在第5部分,它说:

IPv4-Mapped IPv6 address, ISATAP等地址[RFC5214], ipv4可翻译地址(ADDR-FORMAT)在地址的低序32位中嵌入IPv4地址。这些地址有一个特殊的表示,可以混合十六进制点十进制符号。十进制记数法只能用于地址的最后32位。对于这些地址,使用混合表示法当满足以下条件时,建议使用:地址为区分为具有嵌入在低32位的IPv4地址完全从地址字段通过使用一个众所周知的前缀。中定义了这些前缀(RFC4291)和[RFC2765]在这个时候写作。

显示的IPv6地址是IPv4-Compatible IPv6 address。它的使用现在被弃用,但它仍然是一个IPv6地址与嵌入式IPv4地址根据RFC 4291节2.5.5。因此,解析后的输出是正确的,推荐使用。

解决方案:这是您试图解析的字符串。IPv6地址必须在地址的第一部分有一些东西,所以如果你在那里扔像2000这样的东西:2000:0:0:0:0:0:1111:0它将正确地解析它。这与计算机理解IPv6地址的方式有关。