Почему IPAddress.TryParse разрешает что-либо после ']' - PullRequest
1 голос
/ 14 мая 2010

Я бы хотел использовать System.Net.IPAddress.TryParse для проверки адресов IPv6, потому что я не хочу писать собственный reg exp: -)

Однако, это, кажется, разрешает строки, такие как "(validIPv6)] (что-нибудь здесь)" - например, "1234 :: 5678: abcd] whargarbl".

Есть ли причина, по которой они действительны, или это ошибка?

Это еще более усложняется тем фактом, что на самом деле мне нужны только строки вида "[(validIPv6)] :( номер_порта)", поэтому мне придется выполнить небольшую проверку самостоятельно.

1 Ответ

0 голосов
/ 14 мая 2010

Я просматривал рефлектор, и кажется, что если ваша текущая ОС не поддерживает IPV6, вызывается подпрограмма синтаксического анализа, которая будет игнорировать все, что находится за последним символом ']'.

В данном случае это код, вызывающий сбой, обратите внимание на секунду или условие, поскольку оно относится к предыдущему биту кода.

int length = ipString.Length;
fixed (char* str2 = ((char*) ipString))
{
    char* name = str2;
    if (IPv6AddressHelper.IsValid(name, start, ref length) || (length != ipString.Length))
...