Блокирование смешанного форматирования 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 ответа:
Нотация фактически корректна в соответствии с 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. Поэтому анализируемый вывод является правильным и рекомендуемым.