Блокирование смешанного форматирования IPv6 в системе.Чистая.Класс адрес


Я искал ответ, но не могу его найти. Я использую что-то вроде этого

            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?

2 2

2 ответа:

Нотация фактически корректна в соответствии с RFC 5952 (рекомендация для представления текста адреса IPv6). В разделе 5 говорится:

Адреса, такие как IPv4-сопоставленные IPv6-адреса, ISATAP [RFC5214 ], и IPv4-переводимый адреса [ADDR-ФОРМАТ ] имейте адреса IPv4, встроенные в младшие 32 бита адреса. Эти адреса имеют специальное представление, которое может смешиваться с шестнадцатеричным и точечные десятичные обозначения. То десятичная система счисления может использоваться только для последние 32 бита адреса. По этим адресам, смешанное обозначение рекомендуется, если выполняется следующее условие: адрес может быть отличается наличием IPv4 адресов, встроенных в нижние 32 бита исключительно из адресного поля с помощью известного префикса. Такие префиксы определяются в [RFC4291 ] и [RFC2765 ] во время этого пишу.

IPv6-адрес, который вы показываете, является IPv4-Совместимый Адрес IPv6. Его использование в настоящее время устарело, но это все еще IPv6-адрес со встроенными IPv4-адресами в соответствии с разделом 2.5.5 RFC 4291. Поэтому анализируемый вывод является правильным и рекомендуемым.

Решение: это строка, которую вы пытаетесь разобрать. IPv6-адреса должны иметь что-то в первой части адреса, поэтому, если вы добавите туда что-то вроде 2000, например: 2000:0:0:0:0:0:1111:0, он будет правильно его анализировать. Это связано с тем, как IPv6-адрес понимается компьютером.