/// <summary> /// Retrieves an A-record from a DNS server /// </summary> /// <param name="dnsServer"></param> /// <param name="name"></param> /// <param name="options"></param> /// <returns></returns> public static ARecord[] QueryARecord(IPAddress dnsServer, string name, QueryOptions options) { IntPtr dnsRecord = IntPtr.Zero; IP4_ARRAY server = new IP4_ARRAY(); server.AddrCount = 1; server.AddrArray = dnsServer.GetAddressBytes(); int result = NativeMethods.DnsQuery_W(name, DNS_TYPE.TypeA, options, server, ref dnsRecord, IntPtr.Zero); if (result != 0) { throw DnsException.FromErrorCode(result); } using (DNS_RECORD_LIST records = DNS_RECORD_LIST.FromIntPtr(dnsRecord)) { List <ARecord> list = new List <ARecord>(); foreach (DNS_RECORD record in records) { ARecord r = new ARecord(); r.Address = new IPAddress(record.data); r.Name = record.pName; r.TTL = (int)record.dwTtl; list.Add(r); } return(list.ToArray()); } }
public static DNS_RECORD_LIST FromIntPtr(IntPtr ptr) { DNS_RECORD_LIST list = new DNS_RECORD_LIST(); DNS_RECORD record = new DNS_RECORD(ptr); list.Add(record); return(list); }