Почему .NET не анализирует определенные IPv6 со встроенными значениями IPv4? - PullRequest
0 голосов
/ 15 января 2019

В моем компьютере этот код:

        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]?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я нашел свою ошибку. Проблема заключается в том, что IPv4 в конце занимает 2 группы шестнадцатеричных цифр в нотации IPv6, и я интуитивно думал, что это всего лишь одна группа.

Следовательно, такие термины, как 0:0:0:0:0:0:0:1.2.3.4 с 7 группами до IPv4, не будут анализироваться. Тем не менее, такие термины, как 0:0:0:0:0:0:1.2.3.4, только с 6 группами разбираются просто отлично.

0 голосов
/ 15 января 2019

У вас есть ошибка в полной письменной строке. Предполагается, что это 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 группа.

Просто классическая ошибка, когда повторение, кажется, заставило вас упустить что-то.

...