Ошибка разрешения DNS с именем хоста Unicode

Недавно у некоторых наших клиентов появился странный баг. После некоторого глубокого изучения журналов, предоставленных сборкой консоли разработчика Unity, я обнаружил следующую ошибку: SocketException: Не удалось разрешить хост 'ן§¹ב· ו·©'

Я проследил эту ошибку до этой строки кода:

host = Dns.GetHostEntry(Dns.GetHostName());

где host — это объект IPHostEntry. По сути, это просто для того, чтобы в конечном итоге получить IP-адрес клиентов, но он был написан предыдущим программистом, который здесь больше не работает.

Я не уверен на 100%, что делать с этим именем хоста в журнале ошибок. Из того, что я знаю, Dns.GetHostName() по существу возвращает имя вашего компьютера, поскольку DNS распознает его, но похоже, что для этого конкретного клиента он возвращает какую-то тарабарщину.

Мы из Израиля, так возможно ли, что клиентская машина названа на иврите, и поэтому символы не могут быть разрешены с помощью Dns.GetHostEntry()?


person The Manly Fairy    schedule 07.10.2020    source источник
comment
Это похоже на проблему с кодировкой текста. Я бы посмотрел, какой формат ожидает GetHostEntry().   -  person Immersive    schedule 07.10.2020
comment
В этом коде нет ничего странного, ничего, что требовало бы помощи программиста, написавшего его. Если вы проверите документы для Dns.GetHostName() и GetHostEntry вы увидите, что делают эти методы - эти два вызова пытаются получить запись DNS для локальной машины. Разделите два вызова на отдельные строки — что возвращает Dns.GetHostName()? Если вы используете это имя с nslookup, вы получите результат?   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
@Immersive Unicode, как и все строки .NET. Это метод BCL возвращает запись DNS локального компьютера, а не пользовательский код   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
Этот вопрос не должен быть закрыт - проблема ясна и имеет правильный ответ   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
Я не могу опубликовать ответ, который я писал, пока вопрос не будет открыт повторно. Хотя технически DNS допускает Unicode, он использует только подмножество ASCII. Имена Unicode должны быть закодированы с использованием Punycode. Вы можете сделать это в .NET с помощью IdnMapping.GetAscii метод   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
Кстати, использование неанглийских имен машин очень редко. ИТ-специалисты определенно не делают этого — они даже не разрешают имя пользователя, если могут. Экономит много времени, когда эту машину отдают кому-то другому. Бьюсь об заклад, эта машина - машина какого-то менеджера? Кого-то, кого они не могли заставить использовать, например, Manager34-PC в качестве имени своей машины?   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
comment
Чтобы решить вашу настоящую проблему, получение IP-адресов локальной машины, гораздо лучшим решением является получение конфигурации ip через NetworkInterface.GetAllNetworkInterfaces(). Нет необходимости подключаться к DNS-серверу, нет проблем с DNS. Вы заметите, что в других ответах используется Dns.GetHostEntry(Dns.GetHostName()), что не удалось в вашем случае.   -  person Panagiotis Kanavos    schedule 07.10.2020
comment
@PanagiotisKanavos На самом деле нет, эта конкретная машина является личным ПК, который клиент использует на своем рабочем месте. Дело в том, что у него есть наше программное обеспечение и дома, и на работе, но он испытывает эту проблему только на своем рабочем ПК, поэтому мне любопытно, в чем может быть разница, которая в первую очередь вызывает этот беспорядок. Я рассмотрю класс NetworkInterface, я все еще новичок в сетевой среде, поэтому я не искал альтернативные способы получения IP-адресов. Спасибо за всю информацию.   -  person The Manly Fairy    schedule 07.10.2020
comment
И я занимаюсь этим уже 20 лет, но еще не сталкивался с этим. Если вы не специалист по сетям, вы не знаете проблем, вызванных DNS, маршрутизацией и т. д. В вашем случае NetworkingInterfaces еще более важно, поскольку вы не можете знать, какой DNS используется на домашних машинах - на домашнем маршрутизаторе? Мобильная связь? Роутер кафе?   -  person Panagiotis Kanavos    schedule 07.10.2020