C# 为什么.NET不使用嵌入的IPv4值解析某些IPv6?
在我的计算机中,此代码:C# 为什么.NET不使用嵌入的IPv4值解析某些IPv6?,c#,.net,.net-4.5,ip-address,ipv6,C#,.net,.net 4.5,Ip Address,Ipv6,在我的计算机中,此代码: var someIps = new[] { "::1.2.3.4", "::0000:1.2.3.4", "0:0:0:0:0:0:0000:1.2.3.4", "1::0000:1.2.3.4", "0000:0000:0000:0000:0000:0000:0000:1.2.3.4", "::
var someIps = new[]
{
"::1.2.3.4",
"::0000:1.2.3.4",
"0:0:0:0:0:0:0000:1.2.3.4",
"1::0000:1.2.3.4",
"0000:0000:0000:0000:0000:0000:0000:1.2.3.4",
"::abcd:1.2.3.4",
"0:0:0:0:0:0:abcd:1.2.3.4",
"1::abcd:1.2.3.4",
"0000:0000:0000:0000:0000:0000:abcd:1.2.3.4",
"::ffff:1.2.3.4",
"0:0:0:0:0:0:ffff:1.2.3.4",
"1::ffff:1.2.3.4",
"0001:0000:0000:0000:0000:0000:ffff:1.2.3.4",
};
foreach ( var ip in someIps )
{
if (IPAddress.TryParse( ip, out var parsed ))
Console.WriteLine( "{0} parses to {1}", ip, parsed );
else
Console.WriteLine( "{0} does not parse.", ip, parsed );
}
生成此输出:
::1.2.3.4 parses to ::1.2.3.4
::0000:1.2.3.4 parses to ::1.2.3.4
0:0:0:0:0:0:0000:1.2.3.4 does not parse.
1::0000:1.2.3.4 parses to 1::102:304
0000:0000:0000:0000:0000:0000:0000:1.2.3.4 does not parse.
::abcd:1.2.3.4 parses to ::abcd:102:304
0:0:0:0:0:0:abcd:1.2.3.4 does not parse.
1::abcd:1.2.3.4 parses to 1::abcd:102:304
0000:0000:0000:0000:0000:0000:abcd:1.2.3.4 does not parse.
::ffff:1.2.3.4 parses to ::ffff:1.2.3.4
0:0:0:0:0:0:ffff:1.2.3.4 does not parse.
1::ffff:1.2.3.4 parses to 1::ffff:102:304
0001:0000:0000:0000:0000:0000:ffff:1.2.3.4 does not parse.
为什么它解析::ffff:1.2.3.4
,但不能解析0:0:0:0:0:ffff:1.2.3.4
?他们不应该是同一个地址吗
IPv6表示中是否缺少使这些字符串无效的内容?还是我刚刚在[IPAddress.TryParse][1]中发现了一个bug?您在完整的书面行中有一个错误。它应该是8组十六进制数。然而,0:0:0:0:0:0:ffff仅为7组-6个0组,1个f组 事实上,像这样的数字只有6组: 0001:0000:0000:0000:0000:ffff-1 01组,4 0组,1 f组
只是一个经典的错误,重复似乎让你忽略了一些东西。我发现了我的错误。问题是IPv4最终采用了IPv6表示法中的两组十六进制数字,我直觉地认为这只是一组
因此,IPv4之前有7个组的术语(如
0:0:0:0:0:0:1.2.3.4
)将无法解析。但是,像0:0:0:0:0:0:1.2.3.4
这样的术语,只要6组就可以解析了。谢谢。我只是提供了一个更明确的解释,引用IPv4号码。