Я использую Indy для выполнения обратного поиска IPv4 с использованием следующего кода.
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;
Что мне нужно изменить, чтобы сделать его совместимым с IPv6?
Я знаю, что могу использовать getaddrinfo , но в данном конкретном случае мне нужно напрямую связаться с DNS-сервером.