No such host is known в Dns.GetHostEntry

114
14 июня 2019, 10:40

При вызове Dns.GetHostEntry (или Dns.GetHostEntryAsync) валится ошибка:

No such host is known
at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
at System.Net.Dns.EndGetHostEntry(IAsyncResult asyncResult)

Наблюдается это на разных осях. Замечено это было на .NET 4.7.2.

Вызвана эта ошибка Именем компьютера, состоящим только из цифр. Например имя компьютера: 3410890 вызывает данную ошибку. Если имя компьютера выглядит так: WIN-1234567 то ошибки не наблюдается.

Чем вызвана эта ошибка, где она возникает и как программно ее исправить?

Answer 1

Потому что внутри Dns.GetHostEntry вызывается IPAddress.TryParse. И он успешно парсит строку 3410890, как IP и => вся последующая работа этого метода неверная, так как пытается достучаться по несуществующему IP.

В MSDN написано, что это баг, но его правка нарушит работу существующих приложений:

Note that this method accepts as valid an ipString value that can be parsed as an Int64, and then treats that Int64 as the long value of an IP address in network byte order, similar to the way that the IPAddress constructor does. This means that this method returns true if the Int64 is parsed successfully, even if it represents an address that's not a valid IP address. For example, if ipString is "1", this method returns true even though "1" (or 0.0.0.1) is not a valid IP address and you might expect this method to return false. Fixing this bug would break existing apps, so the current behavior will not be changed. Your code can avoid this behavior by ensuring that it only uses this method to parse IP addresses in dotted-decimal format.

Возможно в .NET CORE его пофиксили, так как перед ними не ставилась задача обратной совместимости.

Что бы этого не было используйте другую перегрузку и в ручную передавайте созданный вами собственноручно объектIPAddress.

READ ALSO
Как в C#(WPF) передать переменную при событии MouseDown?

Как в C#(WPF) передать переменную при событии MouseDown?

У меня есть WrapPanel, с помощью Children[0]MouseDown += *Событие* я хочу добавить событие в которое можно было бы передать переменную, в будущем я планирую...

106
Свой VideoPlayer с паттерном MVVM

Свой VideoPlayer с паттерном MVVM

Подскажите как сделать работу MediaElement с использованием паттерна MVVMЯ сделал дизайн VideoPlayer осталось только с помощью кнопок управлять воспроизведением...

111
Вывести содержимое List во view

Вывести содержимое List во view

Каким образом можно вывести выборку на основе модели данныхно с полями в ней не описанными? Например имеется контроллер:

104
Как открыть файл из ресурсов программы? [дубликат]

Как открыть файл из ресурсов программы? [дубликат]

На данный вопрос уже ответили:

119