Проблема: в приложении есть поле ввода, где пользователь может ввести либо имя хоста, либо IP-адрес. Мне нужно сказать, соответствует ли введенный адрес реальному хосту.
Я не говорю о простой проверке регулярного выражения или IPAddress.TryParse или Uri.CheckHostName. У меня нет проблем с проверкой имени хоста: если оно не может быть преобразовано в IP-адрес, то Dns.GetHostEntry выдаст исключение. Это кусок пирога.
Однако. Если я получу ввод IP-адреса, то вызов Dns.GetHostAddresses всегда будет успешным, даже если я введу глупый IP-адрес, например «1.1.1.1» («1.1.1.1» — это зарезервированный IANA IP-адрес, наш DNS-сервер сообщает «несуществующий хост/домен»). Dns.GetHostAddresses сразу же просто возвращает IP-адрес, который я только что передал, как будто все будет в порядке.
Я также не могу использовать Dns.GetHostEntry, потому что есть некоторые IP-адреса (например, мои виртуальные машины в локальной сети), с которыми не связаны никакие имена хостов DNS, но у них все еще есть действительные IP-адреса, и Dns.GetHostEntry вызовет исключение для них (я думаю, он пытается разрешить для них имя хоста?).
Мне нужен вызов метода, который на самом деле говорит мне, является ли это поддельным IP-адресом или нет, даже если он выглядит как хороший IP-адрес (по Uri.CheckHostName), но у него нет соответствующего имени хоста DNS.