Read DNS entries with .NET

.NET does not have a built-in mechanism for querying DNS records; nevertheless, this is a use case that is required relatively often.

With the help of the NuGet package DnsClient (Apache License), however, handling the query is very simple:

 1using DnsClient;
 2using DnsClient.Protocol;
 3
 4string domain = "schwabencode.com";
 5
 6LookupClient lookup = new();
 7
 8// Helper to perform and display a query
 9async Task QueryAndPrint(QueryType type)
10{
11    Console.WriteLine($"\n=== {type} Records ===");
12    IDnsQueryResponse result = await lookup.QueryAsync(domain, type);
13
14    foreach (DnsResourceRecord? dnsRecord in result.AllRecords)
15    {
16        switch (dnsRecord)
17        {
18            case ARecord a:
19                Console.WriteLine($"A: {a.Address} (TTL: {a.InitialTimeToLive}s)");
20                break;
21            case AaaaRecord aaaa:
22                Console.WriteLine($"AAAA: {aaaa.Address} (TTL: {aaaa.InitialTimeToLive}s)");
23                break;
24            case CNameRecord cname:
25                Console.WriteLine($"CNAME: {cname.CanonicalName} (TTL: {cname.InitialTimeToLive}s)");
26                break;
27            case MxRecord mx:
28                Console.WriteLine($"MX: {mx.Exchange} (Pref: {mx.Preference}, TTL: {mx.InitialTimeToLive}s)");
29                break;
30            case NsRecord ns:
31                Console.WriteLine($"NS: {ns.NSDName} (TTL: {ns.InitialTimeToLive}s)");
32                break;
33            case TxtRecord txt:
34                Console.WriteLine($"TXT: {string.Join(" ", txt.Text)} (TTL: {txt.InitialTimeToLive}s)");
35                break;
36            default:
37                Console.WriteLine($"{dnsRecord}");
38                break;
39        }
40    }
41}
42
43// Query each type
44await QueryAndPrint(QueryType.A);
45await QueryAndPrint(QueryType.AAAA);
46await QueryAndPrint(QueryType.CNAME);
47await QueryAndPrint(QueryType.MX);
48await QueryAndPrint(QueryType.NS);
49await QueryAndPrint(QueryType.TXT);

Conclusion

With just a few lines of C# and the powerful DnsClient.NET library, you can build a versatile DNS lookup tool. Whether you’re troubleshooting, monitoring or integrating into larger applications, this console app gives you a solid foundation.

Feel free to experiment, extend and customize it to fit your needs!


Let's Work Together

Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.

New Platforms
Modernization
Training & Consulting

Comments

Twitter Facebook LinkedIn WhatsApp