/// <summary> /// Get IPHostEntry for given domainName. /// </summary> /// <param name="domainName">domainName</param> /// <param name="queryType">QueryType.Address or QueryType.MailExchange</param> /// <param name="dnsServer">dnsServer</param> /// <returns></returns> public static IPHostEntry GetIPHostEntry(string domainName, QueryType queryType, IPAddress dnsServer) { DnsMessage message = DnsMessage.StandardQuery(); DnsQuery query = new DnsQuery(domainName, queryType); message.Querys.Add(query); byte[] msgData = DnsMessageCoder.EncodeDnsMessage(message); try { byte[] reply = QueryServer(msgData, dnsServer); if (reply != null) { DnsMessage answer = DnsMessageCoder.DecodeDnsMessage(reply); if (answer.ID == message.ID) { if (answer.Answers.Count > 0) { IPHostEntry host = new IPHostEntry(); host.HostName = domainName; if (queryType == QueryType.Address) { host.AddressList = GetAddressList(domainName, answer); } else if (queryType == QueryType.MailExchange) { host.Aliases = GetMailExchangeAliases(domainName, answer); host.AddressList = GetAddressList(answer, new List <string>(host.Aliases)); } return(host); } else if (answer.AuthorityRecords.Count > 0) { IPAddress[] serverAddresses = GetAuthorityServers(answer); // depth first search foreach (IPAddress serverIP in serverAddresses) { IPHostEntry host = GetIPHostEntry(domainName, queryType, serverIP); if (host != null) { return(host); } } } } } } catch { } return(null); }