В моем компьютере этот код:
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:0:ffff:1.2.3.4
? Разве они не должны быть по одному адресу?
Я что-то упускаю в представлении IPv6, которое делает эти строки недействительными? Или я просто нашел ошибку в [IPAddress.TryParse] [1]?