Разбор IP-адреса в .NET - PullRequest
       30

Разбор IP-адреса в .NET

2 голосов
/ 18 декабря 2008

Я использую IPAddress.TryParse () для разбора IP-адресов. Тем не менее, это слишком допустимо (разбор «1» возвращает 0.0.0.1). Я хотел бы ограничить ввод октетными точками. Какой лучший способ сделать это?

(Примечание: я использую .NET 2.0)


Редактировать

Позвольте мне уточнить:

Я пишу приложение, которое будет сканировать различные IP-адреса в поисках определенных устройств (в основном, сканера портов). Когда пользователь вводит «192.168.0.1» для начального адреса, я хочу автоматически заполнить «192.168.0.255» в качестве конечного адреса. Проблема в том, что когда они набирают «1», он анализируется как «0.0.0.1», а конечный адрес заполняется как «0.0.0.255», что выглядит глупо.

Ответы [ 2 ]

7 голосов
/ 18 декабря 2008

Если вы заинтересованы в разборе формата, то я бы использовал регулярное выражение. Вот хороший ( источник ):

bool IsDottedDecimalIP(string possibleIP)
{
    Regex R = New Regex(@"\b(?:\d{1,3}\.){3}\d{1,3}\b");
    return R.IsMatch(possibleIP) && Net.IPAddress.TryParse(possibleIP, null);
}

Это регулярное выражение не перехватывает недействительные IP-адреса, но применяет ваш шаблон TryParse проверяет их действительность.

0 голосов
/ 18 декабря 2008

IP-адрес на самом деле является 32-битным числом - это не xxx.xxx.xxx.xxx - это просто читаемый формат для того же. Таким образом, IP-адрес 1 на самом деле 0.0.0.1.

РЕДАКТИРОВАТЬ: Учитывая разъяснение, вы можете либо использовать регулярное выражение, как было предложено, либо форматировать ярлыки по своему вкусу, поэтому, если вы хотите, чтобы «1» отображалось как «1.0.0.0». Вы можете добавить это и при этом использовать метод разбора.

...