Use Indy to perform an IPv6 reverse DNS lookup

delphi, delphi-2010, dns, indy, ipv6

Solution

You don't have to do anything. For `qtPTR` queries, `Resolve()` automatically detects whether the address is IPv4 or IPv6 and formats the query accordingly.

Problem

I am using Indy to perform a reverse IPv4 lookup using the following code. ``` function ReverseDNSLookup(const IPAddress: String; const DNSServer: String; Timeout, Retries: Integer; var HostName: String): Boolean; var AIdDNSResolver: TIdDNSResolver; RetryCount: Integer; begin Result := FALSE; AIdDNSResolver := TIdDNSResolver.Create(nil); try AIdDNSResolver.QueryResult.Clear; AIdDNSResolver.WaitingTime := Timeout; AIdDNSResolver.QueryType := [qtPTR]; AIdDNSResolver.Host := DNSServer; RetryCount := Retries; repeat try dec(RetryCount); AIdDNSResolver.Resolve(IPAddress); Break; except on e: Exception do begin if RetryCount <= 0 then begin if SameText(e.Message, RSCodeQueryName) then Result := FALSE else raise Exception.Create(e.Message); Break; end; end; end; until FALSE; Result := AIdDNSResolver.QueryResult.Count > 0; if Result then begin Result := TRUE; HostName := ParseReverseDNSResult(AIdDNSResolver.QueryResult[0].RData); end; finally FreeAndNil(AIdDNSResolver); end; end; ``` What do I need to change in order to make it compatible with IPv6? I know I can use getaddrinfo, but in this particular case I need to contact the DNS server directly.

Original source