Heijden.DNS.Resolver.Query C# (CSharp) Method

Query() public method

Do Query on specified DNS servers
public Query ( string name, DNSQType qtype, QClass qclass, int timeout ) : Heijden.DNS.DNSResponse
name string Name to query
qtype DNSQType Question type
qclass QClass Class type
timeout int Timeout for lookup in seconds.
return Heijden.DNS.DNSResponse
        public DNSResponse Query(string name, DNSQType qtype, QClass qclass, int timeout)
        {
            Question question = new Question(name, qtype, qclass);
            DNSResponse response = SearchInCache(question);
            if (response != null)
                return response;

            DNSRequest request = new DNSRequest();
            request.AddQuestion(question);
            return GetResponse(request, m_DnsServers, timeout);
        }

Same methods

Resolver::Query ( string name, DNSQType qtype, int timeout ) : Heijden.DNS.DNSResponse
Resolver::Query ( string name, DNSQType qtype, int timeout, List dnsServers ) : Heijden.DNS.DNSResponse

Usage Example

示例#1
0
        async Task<bool> GetHostEntry(string name, bool replicas)
        {
            HostName hostName = new HostName(name);

            // Get initial Master server to do direct queries
            HostName hostDomain = hostName.GetParent();
            if (hostDomain == null)
            {
                throw new ArgumentException(string.Format("'{0}' is not a valid host name", name));
            }
            var soaRecords = localResolver.Query(hostDomain.Name, QType.SOA);
            if (soaRecords != null && soaRecords.RecordsSOA.Length > 0)
            {
                // Some local servers provide truncated SOA list, so query authority
                var hostDomainIps = await localResolver.ResolveAsync(soaRecords.RecordsSOA[0].MNAME);
                var remoteResolver = new Resolver(GetIpV4Address(hostDomainIps));

                var soaMessage = remoteResolver.Query(hostDomain.Name, QType.SOA);

                if (soaMessage != null && soaRecords.RecordsSOA.Length > 0)
                {
                    // Search each SOA record
                    bool foundInReplicas = true;
                    foreach (var server in soaMessage.RecordsSOA)
                    {
                        // Search each IP associated with NS Server
                        hostDomainIps = localResolver.GetHostByName(server.MNAME);
                        foreach (var ipEndpoint in GetIpV4Address(hostDomainIps))
                        {
                            remoteResolver = new Resolver(ipEndpoint);
                            remoteResolver.Recursion = true;
                            remoteResolver.UseCache = false;
                            var dnsMessage = remoteResolver.Query(hostName.Name, QType.A);
                            if (dnsMessage == null || !string.IsNullOrEmpty(dnsMessage.Error) || dnsMessage.Answers.Count == 0)
                            {
                                // Record not found
                                Console.WriteLine("Record not found in NS server '{0}'", server.MNAME);
                                foundInReplicas = false;
                            }

                            // If we aren't checking all replica's, return true from first result
                            if (!replicas)
                            {
                                return foundInReplicas;
                            }
                        }
                    }

                    // All SOA servers returned a record
                    return foundInReplicas;
                }
            }

            // No SOA record found
            return false;
        }
All Usage Examples Of Heijden.DNS.Resolver::Query