
.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!
Related articles

Mar 15, 2025 - 7 min read
Create a custom captcha provider with ASP.NET Core
Nowadays, you can’t actually run a website on the Internet without having a protection mechanism against content bots. One possibility …

Mar 10, 2025 - 2 min read
New Format Options of System.Text.Json with .NET 9
With .NET 9, Microsoft has added new options to the System.Text.Json library to format the output of JSON objects - features that, in my …

Mar 05, 2025 - 2 min read
Compile your .NET projects with multiple SDKs on GitHub
The recommended variant for specifying the SDK in .NET is the global.json file. This centrally guarantees that all computers on which the …
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.
