使用Indy执行IPv6反向DNS查找

时间:2011-11-26 10:48:48

标签: delphi dns delphi-2010 ipv6 indy

我使用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服务器。

1 个答案:

答案 0 :(得分:3)

您无需做任何事情。对于qtPTR个查询,Resolve()会自动检测地址是IPv4还是IPv6,并相应地格式化查询。