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

查看:25
本文介绍了使用 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屋!

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