Как выполнить "хост-сервер nslookup"
Мой сервис C#
должен периодически опросить nslookup host server
. В настоящее время он запускает Process
, который выполняет пакетный пакет script. Из-за соображений производительности я собираюсь сделать эту проверку, используя некоторые API
. Но проблема в том, что, используя, например, System.Net.Dns.GetHostAddresses
, я могу только эмулировать проверку nslookup host
, но не nslookup host server
(без секунд param).
Я посмотрел на кучу похожих вопросов SO, но никто из них, похоже, не решил мою проблему.
Есть ли способ выполнить nslookup host server
в C#
без использования какой-либо тяжелой библиотеки третьего образца?
Ответы
Ответ 1
Проблема решена!
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);
...
Ответ 2
Я посмотрел на это некоторое время назад. Это невозможно в стандартных библиотеках классов, поэтому вам придется использовать внешний компонент для этого.
Существует несколько бесплатных и платных вариантов. Моя реализация была основана на публикации в CodeProject, которая работала достаточно хорошо. DNS-клиентская библиотека для .NET (также упоминаемая kprobst) была выпущена после того, как я закончил свою работу, или я бы сначала использовал ее.
Ответ 3
Я не уверен, как это сделать, используя фреймворк напрямую, потому что мне никогда не нужно было использовать DNS-сервер, отличный от того, который указан в конфигурации локального компьютера. Но вы можете попробовать эту библиотеку попробовать. Я никогда не использовал его, но, насколько я могу судить, он позволит вам указать DNS-сервер, который будет использоваться для разрешения имени хоста, которое вы передаете.