Условия ошибки Dns.GetHostEntry и методы разрешения

У меня очень специфическая проблема с Dns.GetHostEntry:

Служба использует Dns.GetHostEntry для получения всех IP-адресов хоста, используя имя хоста. Это всегда работало нормально. У конкретного клиента Dns.GetHostEntry выдает ошибку «такой хост неизвестен» при запросе определенных хостов. Проблема возникает только при попытке разрешить хосты, находящиеся в домене, отличном от машины, на которой установлена ​​служба. Служба работала в течение достаточно долгого времени, но недавно перестала работать, выдавая ошибку «такой хост неизвестен» (к сожалению, трассировка стека недоступна). Но Nslookup работает, проблем нет. Рассматриваемая служба написана на VB.NET и ориентирована на .NET Framwork 2.0.

Комментарии в записи MSDN для .NET 3.0 (http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx указывают на то, что может быть проблема с обратными записями DNS для хостов, но я не смог чтобы воспроизвести проблему в тестовой сети, даже при удалении всех зон обратного просмотра (есть больше комментариев для других версий .NET, все имеют аналогичные проблемы) [EDIT:] Даже преднамеренное добавление неправильной записи PTR не приводит к возникновению проблемы. на моей тестовой машине.

[EDIT2:] Единственное, что вызвало ошибку, — это отключение сетевого адаптера и, таким образом, делает DNS-сервер недоступным, хотя прямое разрешение все еще работало из-за кэширования.

Итак, мои вопросы:

  1. При каких условиях GetHostEntry выдает эту конкретную ошибку?
  2. Какие методы разрешения он использует? Если я не ошибаюсь, он использует неуправляемую функцию WinSock getnameinfo (http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx): "Разрешение имен может осуществляться системой доменных имен (DNS), локальный файл hosts, или с помощью других механизмов именования".
  3. Любые идеи, почему это внезапно выходит из строя для машин в другом домене (но не для машин в том же домене)?

Спасибо и с наилучшими пожеланиями, cun83


person cun83    schedule 04.02.2011    source источник
comment
Вы выполнили ipconfig /flushdns на локальном компьютере и перезапустили DNS-сервер после изменения записей PTR? Возможно, вы все еще используете кешированные результаты.   -  person Harvey Kwok    schedule 04.02.2011
comment
Да, я очистил кэш, я даже перезапустил службу DNS-сервера и службу клиента, чтобы убедиться, что ничего не кэшируется.   -  person cun83    schedule 07.02.2011


Ответы (1)


Лично я всегда использую Dns.GetHostAddresses. Это всегда дает мне надежный результат.

Относительно того, почему Dns.GetHostEntry дает вам указанная ошибка, я думаю, это связано с тем, что DnsGetHostEntry попытается выполнить обратный поиск DNS, прежде чем вернуть вам IP-адрес. Если обратный поиск DNS не удался, он выдаст вам «такой хост не известен».

Насколько мне известно, Dns.GetHostAddresses просто возвращает IP-адрес.

person Harvey Kwok    schedule 29.11.2011