private IPAddress[] GetDnsRecords(string hostName, IPAddress dnsServer) { IntPtr ptr = default(IntPtr); List <IPAddress> list = new List <IPAddress>(); IntPtr zero = IntPtr.Zero; IPv4Array iPv4ArrayFromIPAddress = GetIPv4ArrayFromIPAddress(dnsServer); if (DnsQueryA(hostName, 1, 72, ref iPv4ArrayFromIPAddress, ref ptr, ref zero) == 0) { DnsRecordA dnsRecordA = (DnsRecordA)Marshal.PtrToStructure(ptr, typeof(DnsRecordA)); IPAddress addressFromRecord = GetAddressFromRecord(dnsRecordA); if (addressFromRecord != IPAddress.None) { list.Add(addressFromRecord); } while (!(dnsRecordA.NextRecord == IntPtr.Zero)) { dnsRecordA = (DnsRecordA)Marshal.PtrToStructure(dnsRecordA.NextRecord, typeof(DnsRecordA)); addressFromRecord = GetAddressFromRecord(dnsRecordA); if (addressFromRecord != IPAddress.None) { list.Add(addressFromRecord); } } } return(list.ToArray()); }
private IPv4Array GetIPv4ArrayFromIPAddress(IPAddress address) { IPv4Array result = default(IPv4Array); if (address != null) { result.Count = 1; result.Addresses = new uint[1] { BitConverter.ToUInt32(address.GetAddressBytes(), 0) }; } return(result); }
private static extern int DnsQueryA(string hostName, short type, int options, ref IPv4Array dnsServers, ref IntPtr recordList, ref IntPtr reserved);