Read DNS entries with .NET

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!


Comments

Twitter Facebook LinkedIn WhatsApp