首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi / Indy通过主机名查找解析DNS域

Delphi / Indy通过主机名查找解析DNS域
EN

Stack Overflow用户
提问于 2016-11-17 01:03:06
回答 1查看 2.6K关注 0票数 1

我正在尝试使用硬编码的AName、在Delphi10.1更新2上使用JNI的一些代码和TIdDNSResolver来执行以下操作:

1)从设备接口配置(works!)获取设备DNS服务器。

2)在DNS服务器上查找以检索该服务器的域名(失败!)

3)将DNS域附加到硬编码的AName (还没有)

4)使用FQDN AName查找服务器IP地址(还没有)

到目前为止,使用Delphi中的JNI函数,我可以获得DNS服务器的IP地址。当我试图查找域名时,我失败了。这是我的密码:

代码语言:javascript
复制
dns.Host := s;
dns.WaitingTime := 2048;
dns.QueryType := [qtDName];
dns.Resolve('hard_coded_server_name');
for i := 0 to Pred(dns.QueryResult.Count) do
begin
  r := dns.QueryResult[i];
  case r.RecType of
    qtDName:  begin
                txt := TTextRecord(r);
                Memo1.Lines.AddStrings(txt.Text);
              end;
  end;
end;

我确信我使用的TResultRecord不正确,但是找不到关于如何正确使用的文档。谁(雷米?)请解释一下怎么做的?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 05:27:51

TIdDNSResolver不对qtDName响应记录使用TTextRecordTTextRecord只用于qtTXTqtHINFO记录(THINFORecordTTextRecord派生)。

查看TIdDNSResolver的源代码,我发现DNAME实际上是一种未处理的响应类型(我不知道为什么),因此TIdDNSResolver将像对DNAME记录一样使用TResultRecord类。正因为如此,DNAME记录数据将根本不会被解析,r.RecType也不会像您所期望的那样成为qtDName (从技术上讲,它实际上是未赋值的,默认为0,这恰好是qtA)。然而,原始的答案数据至少将在r.RData中。

请注意,DNAME查找可能导致CNAME响应记录(包括其他记录)。CNAME记录在QueryResult中表示为TNAMERecord对象,其中r.RecType将是qtName

我有签入修补程序 (SVN rev 5377):

  • 添加了一个新的TDNAMERecord类来解析DNAME数据。
  • 确保为已知记录类型(即使未解析)为TResultRecord.RecType属性分配一个值。
  • 为无法在TResultRecord.TypeCode属性中表示的未知记录类型添加了新的TResultRecord.RecType属性。

例如:

代码语言:javascript
复制
dns.Host := s;
dns.WaitingTime := 2048;
dns.QueryType := [qtDName];
dns.Resolve('hard_coded_server_name');
for i := 0 to Pred(dns.QueryResult.Count) do
begin
  r := dns.QueryResult[i];
  case r.RecType of
    qtName: begin
      Memo1.Lines.Add('CNAME: ' + TNAMERecord(r).HostName);
    end;
    qtDName: begin
      Memo1.Lines.Add('DNAME: ' + TDNAMERecord(r).HostName);
    end;
    // other types as needed ...
  else
    Memo1.Lines.Add(IntToStr(r.TypeCode) + ': ' + ToHex(r.RData));
  end;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40645064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档