Jer*_*dge 2 delphi dns indy indy10 delphi-xe2
我找不到任何使用Indy 10 TIdDNSResolver组件进行DNS查找的简单示例.它们都是我不需要的东西(例如MX/SMTP),或者是没有代码的条款.我试过根据我能找到的少量资源读取结果,但不知道我应该如何阅读结果.
这是我到目前为止所拥有的......
uses
IdBaseComponent, IdComponent, IdTCPConnection, IdDNSResolver;
function TForm1.Lookup(const Name: String): String;
var
X: Integer;
begin
//DNS: TIdDNSResolver
DNS.QueryType:= [qtA];
DNS.Resolve(Name);
for X:= 0 to DNS.QueryResult.Count-1 do begin
if DNS.QueryResult[X].RecType = qtA then
//Result:= DNS.QueryResult[X].RData; <--- ????
end;
end;
Run Code Online (Sandbox Code Playgroud)
用法...
HostIP:= Lookup('www.google.com');
Run Code Online (Sandbox Code Playgroud)
我如何阅读此回复?
您需要根据QueryResult项目TResultRecord的RecType属性值将集合项目类型转换为特定的后代.从Items物业参考:
使用强制转换返回一个对象引用,该对象引用允许访问与TResultRecord.RecType中的值关联的子类所特有的任何属性或方法.
TResultRecord后代类的名称模式是这样的:
T<DNS lookup type>Record
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,它看起来像这样:
for X := 0 to DNS.QueryResult.Count - 1 do
begin
if DNS.QueryResult[X].RecType = qtA then
Result := TARecord(DNS.QueryResult[X]).IPAddress; // "A" lookup -> TARecord
end;
Run Code Online (Sandbox Code Playgroud)
对于AAAA查找类型,它将是:
for X := 0 to DNS.QueryResult.Count - 1 do
begin
if DNS.QueryResult[X].RecType = qtAAAA then
Result := TAAAARecord(DNS.QueryResult[X]).Address; // "AAAA" lookup -> TAAAARecord
end;
Run Code Online (Sandbox Code Playgroud)
您可以使用IPv4和IPv6 DNS查找的示例函数find here.
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |