使用Indy进行IPv6反向DNS查找 [英] Use Indy to perform an IPv6 reverse DNS lookup

查看:311
本文介绍了使用Indy进行IPv6反向DNS查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Indy使用以下代码执行反向IPv4查找。

  function ReverseDNSLookup(const IPAddress:String; const DNSServer:String; Timeout,Retries:Integer; var HostName:String):Boolean; 
var
AIdDNSResolver:TIdDNSResolver;
RetryCount:Integer;
begin
结果:= FALSE;

AIdDNSResolver:= TIdDNSResolver.Create(nil);
try
AIdDNSResolver.QueryResult.Clear;
AIdDNSResolver.WaitingTime:=超时;
AIdDNSResolver.QueryType:= [qtPTR];
AIdDNSResolver.Host:= DNSServer;

RetryCount:= Retries;
重复
尝试
dec(RetryCount);

AIdDNSResolver.Resolve(IPAddress);

休息;
除了
在e:Exception do
begin
如果RetryCount< = 0然后
begin
如果SameText(e.Message,RSCodeQueryName)然后
结果:= FALSE
else
raise Exception.Create(e.Message);

休息;
结束
结束
结束
,直到FALSE;

结果:= AIdDNSResolver.QueryResult.Count> 0;

如果结果然后
begin
结果:= TRUE;
HostName:= ParseReverseDNSResult(AIdDNSResolver.QueryResult [0] .RData);
结束
finally
FreeAndNil(AIdDNSResolver);
结束
结束

为了使其与IPv6兼容,需要更改什么?



我知道我可以使用 getaddrinfo ,但在这种特殊情况下,我需要直接与DNS服务器联系。

解决方案

你不必做任何事情。对于 qtPTR 查询, Resolve()自动检测地址是IPv4还是IPv6,并相应地格式化查询。 p>

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.

解决方案

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆