Simon
Simon

Reputation: 865

DNS resolve failing for specific domains. Domains work with nslookup

What I want to happen: Pass the method a domain as a string and have it return true if the domain resolves. False if it does not. The underlying goal is to see if a domain exists.

What happens: Most valid domain strings return true. Some, however, return false despite resolving with nslookup.

I don't understand why certain domains are failing to resolve when they look fine when using command prompt nslookup and nslookup sites. (I've used https://centralops.net/ , http://www.kloth.net/services/nslookup.php , and http://network-tools.com/nslook/)

Method (C#):

    //no blank domains
    public bool CheckDomain(string sDomain)
    {
        if (string.IsNullOrWhiteSpace(sDomain)) return false;
        for (int i = 1; i <= mQueryRetry; i++)
        {
            try
            {
                System.Net.IPAddress dnsCli = System.Net.IPAddress.Parse("8.8.8.8")
                DnsClient myClient = new DnsClient(dnsCli);
                DnsMessage dnsMessage = myClient.Resolve(ARSoft.Tools.Net.DomainName.Parse(sDomain), RecordType.A);
                if ((dnsMessage == null) || ((dnsMessage.ReturnCode != ReturnCode.NoError) && (dnsMessage.ReturnCode != ReturnCode.NxDomain)))
                {
                    throw new Exception("DNS request failed");
                }
                else
                {
                    foreach (DnsRecordBase dnsRecord in dnsMessage.AnswerRecords)
                    {
                        ARecord aRecord = dnsRecord as ARecord;
                        if (aRecord != null)
                        {
                            return true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // Back off and try again after 1 seconds
                if (i != mQueryRetry)
                {
                    System.Threading.Thread.Sleep(1000);
                }
                else
                {
                    System.Diagnostics.Trace.WriteLine(string.Format("Domain: {0} error: {1}", sDomain, ex.Message));
                }
            }
        }
        System.Diagnostics.Trace.Flush();
        return false;
    }

If you plan to test it, I suggest replacing the dnsCli IPAddress with one of these. I've left the IP for the google DNS server in there as an example but I am using my company's DNS server in my production code. I've found that changing the DNS server in no way impacts the method's behavior.

I am using the latest version of Arsoft.Tools.Net (2.2.8) for the DnsClient, DnsMessage, DomainName, DnsRecordBase, and ARecord, classes/objects. We had the same problem with an older version (1.8.1).

Some of the domains that are failing to resolve are:

appraisallinks-amc.com
resurgenstech.com
orpheusvr.com
trovvit.com

Additional info: I've tried some ludicrously long query timeout limits, upwards of 5 minutes, and they made no difference. Therefore, I am certain that this is not a timeout issue.

Upvotes: 4

Views: 917

Answers (1)

Simon
Simon

Reputation: 865

"you can try and use a different library, the DnsClient (nuget) instead, see dnsclient.michaco.net. The domain names in question seem to work just fine " - @MichaC

The problem was in fact the Arsoft.Tools.Net library I was using. Switching to DnsClient.Net fixed the problem.

Upvotes: 3

Related Questions