The following example instantiates a new LookupClient to query some IP address.
var lookup = new LookupClient();
var result = await lookup.QueryAsync("google.com", QueryType.A);
var record = result.Answers.ARecords().FirstOrDefault();
var ip = record?.Address;
Features
General
Sync & Async API
UDP and TCP lookup, configurable if TCP should be used as fallback in case the UDP result is truncated (default=true).
Configurable EDNS support to change the default UDP buffer size and request security relevant records
Caching
Query result cache based on provided TTL
Minimum TTL setting to overrule the result's TTL and always cache the responses for at least that time. (Even very low value, like a few milliseconds, do make a huge difference if used in high traffic low latency scenarios)
Maximum TTL to limit cache duration
Cache can be disabled
Nameserver auto discovery. If no servers are explicitly configured, DnsClient will try its best to resolve them based on your local system configuration.
This includes DNS servers configured via network interfaces or even via Windows specific NRPT policies.
Multiple DNS endpoints can be configured. DnsClient will use them in random or sequential order (configurable), with re-tries.
Configurable retry of queries
Optional audit trail of each response and exception
Configurable error handling. Throwing DNS errors, like NotExistentDomain is turned off by default
SRV for service discovery. LookupClient has some extensions to help with that.
AXFR zone transfer (as per spec, LookupClient has to be set to TCP mode only for this type. Also, the result depends on if the DNS server trusts your current connection)
Build from Source
To build and contribute to this project, you must have the latest .NET 5 SDK installed.
Just clone the repository and open the solution in Visual Studio 2019.
Examples
See MiniDig's readme for what this example command line tool can do.