protected override async Task <IEnumerable <string>?> GetHostNameListImplAsync(IPAddress ip, Ref <DnsAdditionalResults>?additional = null, CancellationToken cancel = default) { DnsAdditionalResults additionalData = new DnsAdditionalResults(true, false); try { var res = await Client.QueryReverseAsync(ip, cancel); if (res.Header.ResponseCode == DnsHeaderResponseCode.NotExistentDomain) { additionalData = new DnsAdditionalResults(false, true); } if (res.HasError) { additionalData = new DnsAdditionalResults(true, false); return(null); } return(res.Answers?.PtrRecords().Select(x => x.PtrDomainName.ToString()).ToArray() ?? null); } finally { additional?.Set(additionalData); } }
protected override async Task <IEnumerable <IPAddress>?> GetIpAddressListImplAsync(string hostname, DnsResolverQueryType queryType, Ref <DnsAdditionalResults>?additional = null, CancellationToken cancel = default) { DnsAdditionalResults additionalData = new DnsAdditionalResults(true, false); QueryType qt; switch (queryType) { case DnsResolverQueryType.A: qt = QueryType.A; break; case DnsResolverQueryType.AAAA: qt = QueryType.AAAA; break; default: throw new ArgumentOutOfRangeException(nameof(queryType)); } try { var res = await Client.QueryAsync(hostname, qt, queryClass : QueryClass.IN, cancel); if (res.Header.ResponseCode == DnsHeaderResponseCode.NotExistentDomain) { additionalData = new DnsAdditionalResults(false, true); } if (res.HasError) { additionalData = new DnsAdditionalResults(true, false); return(null); } if (qt == QueryType.A) { return(res.Answers?.ARecords().Where(x => x.Address.AddressFamily == AddressFamily.InterNetwork).Select(x => x.Address).ToArray() ?? null); } else { return(res.Answers?.AaaaRecords().Where(x => x.Address.AddressFamily == AddressFamily.InterNetworkV6).Select(x => x.Address).ToArray() ?? null); } } finally { additional?.Set(additionalData); } }
public ReverseLookupCacheItem(List <string>?value, DnsAdditionalResults additionalResults) { Value = value; AdditionalResults = additionalResults; }
public ForwardLookupCacheItem(List <IPAddress>?value, DnsAdditionalResults additionalResults) { Value = value; AdditionalResults = additionalResults; }