【发布时间】:2012-01-06 20:28:33
【问题描述】:
我正在使用 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 服务器。
【问题讨论】:
-
indy 10 从 2006 年开始使用解析器组件以本机格式支持 ip v6,根据 indy 更改日志。当您针对 ipv6 主机名测试上述代码时会发生什么?
-
@Warrent - 你是对的。我错误地认为您在调用解析时需要设置一些属性。查看 Indy 源,我现在看到它会检查地址类型,然后在将域发送到服务器之前适当地格式化域。如果您发表评论作为答案,我会接受。
-
你能告诉我关于 ParseReverseDNSResult 函数的任何信息吗?
标签: delphi dns delphi-2010 ipv6 indy