2011-03-29 66 views
10

我的C#服務需要定期輪詢nslookup host server。目前它產生了執行批處理腳本的Process。由於性能原因,我正在考慮使用一些API進行此項檢查。但問題是,使用,例如System.Net.Dns.GetHostAddresses我只能模擬nslookup host檢查,但不是nslookup host server(沒有秒參數)。如何執行「nslookup主機服務器」

我看了一堆類似的SO問題,但他們都沒有解決我的問題。

有沒有什麼辦法在C#中執行nslookup host server而不使用一些沉重的第三方庫?

回答

11

問題解決了!

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); 

... 
0

我不知道如何使用框架直接執行此操作,因爲我從來不需要使用與本地計算機配置中指定的服務器不同的DNS服務器。但你可能想試試this庫。我從來沒有使用它,但據我所知它可以讓你指定一個DNS服務器來解析你傳遞的主機名。

1

我回頭看了一眼。在標準類庫中是不可能的,因此您將不得不使用外部組件來正確執行此操作。

有一些免費和付費的選擇可供您選擇。我的實施基於a posting on CodeProject,效果很好。 DNS Client Library for .NET(也被kprobst提及)在我完成我的作品後發佈,或者我最初會使用這個作品。