Как выполнить "хост-сервер nslookup" - PullRequest
11 голосов
/ 29 марта 2011

Мой C# сервис должен периодически опрашивать nslookup host server.В настоящее время он порождает Process, который выполняет пакетный скрипт.Из-за соображений производительности я рассматриваю эту проверку, используя API.Но проблема в том, что, используя, например, System.Net.Dns.GetHostAddresses, я могу эмулировать только проверку nslookup host, но не nslookup host server (без секунд).

Я смотрел на кучу похожих вопросов SO, но ни один из них, похоже, не решил мою проблему.

Есть ли способ выполнить nslookup host server в C# без использования какой-либо тяжелой библиотеки третьего патри?

Ответы [ 3 ]

12 голосов
/ 31 марта 2011

Проблема была решена!

http://msdn.microsoft.com/en-us/library/ms682016(VS.85).aspx

См. Раздел " Отличный пример * "

[DllImport("dnsapi", EntryPoint="DnsQuery_W", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
private static extern int DnsQuery([MarshalAs(UnmanagedType.VBByRefStr)]ref string pszName, QueryTypes wType, QueryOptions options, int aipServers, ref IntPtr ppQueryResults, int pReserved);
[DllImport("dnsapi", CharSet=CharSet.Auto, SetLastError=true)]
private static extern void DnsRecordListFree(IntPtr pRecordList, int FreeType);

...
1 голос
/ 29 марта 2011

Я изучал это некоторое время назад.Это невозможно в стандартных библиотеках классов, поэтому вам придется использовать внешний компонент, чтобы сделать это правильно.

Существует целый ряд бесплатных и платных вариантов.Моя реализация основывалась на публикации на CodeProject , которая работала довольно хорошо. Клиентская библиотека DNS для .NET (также упоминаемая kprobst) была выпущена после того, как я закончил свою, иначе я бы использовал ее изначально.

0 голосов
/ 29 марта 2011

Я не уверен, как сделать это, используя инфраструктуру напрямую, потому что мне никогда не приходилось использовать DNS-сервер, отличный от того, который указан в конфигурации локального компьютера.Но вы можете попробовать эту библиотеку.Я никогда не использовал его, но, насколько я могу судить, он позволит вам указать DNS-сервер, который будет использоваться для разрешения имени хоста, который вы передаете.

...