Reputation: 6053
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.
Upvotes: 4
Views: 2214
Reputation: 598011
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.
Upvotes: 3