2
A
回答
5
開源,BSD許可庫這裏:http://dndns.codeplex.com/
5
替代解決方案:
P /調用DnsQuery
功能並通過DNS_TYPE_SRV。
一個例子可以在this excellent post by Ruslan中找到。我重現下面的代碼以防鏈接中斷,但強調直接從他的博客中獲取。
public class nDnsQuery
{
public nDnsQuery()
{
}
[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);
public static string[] GetSRVRecords(string needle)
{
IntPtr ptr1 = IntPtr.Zero;
IntPtr ptr2 = IntPtr.Zero;
SRVRecord recSRV;
if (Environment.OSVersion.Platform != PlatformID.Win32NT)
{
throw new NotSupportedException();
}
ArrayList list1 = new ArrayList();
try
{
int num1 = nDnsQuery.DnsQuery(ref needle, QueryTypes.DNS_TYPE_SRV, QueryOptions.DNS_QUERY_BYPASS_CACHE, 0, ref ptr1, 0);
if (num1 != 0)
{
if (num1 == 9003)
{
list1.Add("DNS record does not exist");
}
else
{
throw new Win32Exception(num1);
}
}
for (ptr2 = ptr1; !ptr2.Equals(IntPtr.Zero); ptr2 = recSRV.pNext)
{
recSRV = (SRVRecord)Marshal.PtrToStructure(ptr2, typeof(SRVRecord));
if (recSRV.wType == (short)QueryTypes.DNS_TYPE_SRV)
{
string text1 = Marshal.PtrToStringAuto(recSRV.pNameTarget);
text1 += ":" + recSRV.wPort;
list1.Add(text1);
}
}
}
finally
{
nDnsQuery.DnsRecordListFree(ptr1, 0);
}
return (string[])list1.ToArray(typeof(string));
}
private enum QueryOptions
{
DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE = 1,
DNS_QUERY_BYPASS_CACHE = 8,
DNS_QUERY_DONT_RESET_TTL_VALUES = 0x100000,
DNS_QUERY_NO_HOSTS_FILE = 0x40,
DNS_QUERY_NO_LOCAL_NAME = 0x20,
DNS_QUERY_NO_NETBT = 0x80,
DNS_QUERY_NO_RECURSION = 4,
DNS_QUERY_NO_WIRE_QUERY = 0x10,
DNS_QUERY_RESERVED = -16777216,
DNS_QUERY_RETURN_MESSAGE = 0x200,
DNS_QUERY_STANDARD = 0,
DNS_QUERY_TREAT_AS_FQDN = 0x1000,
DNS_QUERY_USE_TCP_ONLY = 2,
DNS_QUERY_WIRE_ONLY = 0x100
}
private enum QueryTypes
{
DNS_TYPE_A = 0x0001,
DNS_TYPE_MX = 0x000f,
DNS_TYPE_SRV = 0x0021
}
[StructLayout(LayoutKind.Sequential)]
private struct SRVRecord
{
public IntPtr pNext;
public string pName;
public short wType;
public short wDataLength;
public int flags;
public int dwTtl;
public int dwReserved;
public IntPtr pNameTarget;
public short wPriority;
public short wWeight;
public short wPort;
public short Pad;
}
}
0
This看起來像另一個偉大的候選人,是Apache 2.0許可。最新版本是星期四2015年12月17日3:00上午
相關問題
- 1. 使用JNDI獲取DNS SRV記錄
- 2. 用於SRV記錄的Java DNS查找
- 3. 如何使用C#在DNS中創建SRV記錄
- 4. 使用與蟒蛇請求庫SRV DNS記錄
- 5. 如何使用Strophe JS獲取DNS SRV記錄?
- 6. SRV記錄查找與iPhone SDK
- 7. 使用iOS SDK解析SRV記錄
- 8. SRV記錄是否被DNS解析器剝離?
- 9. 解決Android上的DNS SRV記錄的輕量級方法
- 10. SRV記錄從DNS服務器檢索的訂單
- 11. 使用自定義域和DNS SRV記錄在Bluemix中進行負載平衡
- 12. 扭曲的名稱和srv記錄
- 13. PHP查詢SRV記錄
- 14. 從c#添加dns記錄#
- 15. 用於創建SRV記錄的權利
- 16. 記錄SRV或A錄製流量
- 17. 任何人都知道SRV DNS記錄的良好正則表達式?
- 18. Mac OS X上的XMPP SRV記錄x
- 19. 如何解決Python中的SRV記錄?
- 20. 使用php創建DNS區域記錄
- 21. 如何使用VB.NET刪除DNS記錄?
- 22. 領事Java的DNS SRV查找
- 23. PHP的DNS記錄
- 24. Qt4和DNS記錄
- 25. DNS記錄列表
- 26. 如何使用SRV(或任何其他)記錄重定向域?
- 27. 我可以在SRV記錄中使用IP地址嗎?
- 28. 使用SRV DNS條目連接到.NET中的SQL Server
- 29. 獲取NS記錄類型使用C#(dns)
- 30. DNS TXT使用非默認DNS服務器記錄查詢