使用 Indy 执行 IPv6 反向 DNS 查找 [英] Use Indy to perform an IPv6 reverse DNS lookup
本文介绍了使用 Indy 执行 IPv6 反向 DNS 查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用 Indy 使用以下代码执行反向 IPv4 查找.
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;
我需要更改哪些内容才能使其与 IPv6 兼容?
What do I need to change in order to make it compatible with IPv6?
我知道我可以使用 getaddrinfo,但在这种特殊情况下,我需要直接联系 DNS 服务器.
I know I can use getaddrinfo, but in this particular case I need to contact the DNS server directly.
推荐答案
您无需执行任何操作.对于 qtPTR
查询,Resolve()
会自动检测地址是 IPv4 还是 IPv6 并相应地格式化查询.
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.
这篇关于使用 Indy 执行 IPv6 反向 DNS 查找的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文