/indy/DNSResolver.pas

https://code.google.com/ · Pascal · 270 lines · 206 code · 37 blank · 27 comment · 11 complexity · 751f988071d29b0d2463a22fdeae510a MD5 · raw file

  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 11239: DNSResolver.pas
  11. {
  12. Rev 1.1 5/19/2003 10:29:24 AM BGooijen
  13. Compiles now
  14. }
  15. {
  16. { Rev 1.0 11/12/2002 09:15:42 PM JPMugaas
  17. { Initial check in. Import from FTP VC.
  18. }
  19. unit DNSResolver;
  20. interface
  21. uses
  22. IndyBox,
  23. IdDNSResolver;
  24. const
  25. DefaultHost = 'a.root-servers.net';
  26. type
  27. TDNSResolverBasic = class(TIndyBox)
  28. protected
  29. FA : String;
  30. FSOA : String;
  31. procedure Query(AQuery : TQueryType);
  32. end;
  33. TDNSARecord = class(TDNSResolverBasic)
  34. public
  35. procedure Test; override;
  36. end;
  37. TDNSMXRecord = class(TDNSResolverBasic)
  38. public
  39. procedure Test; override;
  40. end;
  41. TDNSNameRecord = class(TDNSResolverBasic)
  42. public
  43. procedure Test; override;
  44. end;
  45. TDNSNSRecord = class(TDNSResolverBasic)
  46. public
  47. procedure Test; override;
  48. end;
  49. TDNSTXTRecord = class(TDNSResolverBasic)
  50. public
  51. procedure Test; override;
  52. end;
  53. TDNSPTRRecord = class(TDNSResolverBasic)
  54. public
  55. procedure Test; override;
  56. end;
  57. TDNSRareRecords = class(TDNSResolverBasic)
  58. public
  59. procedure Test; override;
  60. end;
  61. TDNSSOARecord = class(TDNSResolverBasic)
  62. public
  63. procedure Test; override;
  64. end;
  65. implementation
  66. uses
  67. IdCoreGlobal,
  68. IdGlobal,
  69. SysUtils;
  70. { TDNSREsolverProc }
  71. procedure TDNSResolverBasic.Query(AQuery : TQueryType);
  72. var
  73. DNS : TIdDNSResolver;
  74. Host : String;
  75. Query : String;
  76. procedure Output;
  77. var
  78. i : Integer;
  79. A : TARecord;
  80. MX : TMXRecord;
  81. NS : TNSRecord;
  82. SOA : TSOARecord;
  83. begin
  84. for i := 0 to DNS.QueryResult.Count - 1 do
  85. begin
  86. Status('Name: ' + DNS.QueryResult.Items[i].Name
  87. + CR + LF + 'TTL: ' + IntToStr(DNS.QueryResult.Items[i].TTL));
  88. if DNS.QueryResult.Items[i].InheritsFrom(TARecord) then
  89. begin
  90. A := TARecord(DNS.QueryResult.Items[i]);
  91. Status('A: ' + A.IPAddress);
  92. FA := A.IPAddress;
  93. end else if DNS.QueryResult.Items[i].InheritsFrom(TNSRecord) then
  94. begin
  95. NS := TNSRecord(DNS.QueryResult.Items[i]);
  96. Status('NS: ' + NS.HostName);
  97. end else if DNS.QueryResult.Items[i].InheritsFrom(TSOARecord) then
  98. begin
  99. SOA := TSOARecord(DNS.QueryResult.Items[i]);
  100. FSOA := SOA.Primary;
  101. Status('SOA: ' + CR + LF + TAB + 'Primary: ' + SOA.Primary
  102. + CR + LF + TAB + 'Responsible person: ' + SOA.ResponsiblePerson
  103. + CR + LF + TAB + 'Serial: ' + IntToStr(SOA.Serial)
  104. + CR + LF + TAB + 'Refresh: ' + IntTOStr(SOA.Refresh)
  105. + CR + LF + TAB + 'Retry: ' + IntTOStr(SOA.Retry)
  106. + CR + LF + TAB + 'Expire: ' + IntTOStr(SOA.Expire)
  107. + CR + LF + TAB + 'MinTTL: ' + IntTOStr(SOA.MinimumTTL)
  108. );
  109. end else if DNS.QueryResult.Items[i].InheritsFrom(TMXRecord) then
  110. begin
  111. MX := TMXRecord(DNS.QueryResult.Items[i]);
  112. Status('MX: ' + TAB + 'Preference: ' + IntToStr(MX.Preference)
  113. + TAB + ' Server: ' + MX.ExchangeServer);
  114. end else
  115. begin
  116. Status('Record type not catered for in test: '
  117. + DNS.QueryResult.Items[i].DisplayName);
  118. end;
  119. end;
  120. end;
  121. begin
  122. DNS := TIdDNSResolver.Create(Nil);
  123. try
  124. Host := Trim(GlobalParamValue('DNS Server'));
  125. if Length(Host) = 0 then
  126. begin
  127. Host := DefaultHost;
  128. end;
  129. DNS.Host := Host;
  130. Query := Trim(GlobalParamValue('DNS Domain'));
  131. if (Length(Query) = 0)
  132. or (Query = 'Unspecified') then
  133. begin
  134. Query := 'nevrona.com';
  135. end;
  136. DNS.QueryType := AQuery;
  137. if AQuery = [qtPTR] then
  138. begin
  139. Status('Altering PTR to check: ' + FA + ' from ' + FSOA);
  140. DNS.Host := FSOA;
  141. DNS.Resolve(FA);
  142. end else
  143. begin
  144. DNS.Resolve(Query);
  145. end;
  146. Output;
  147. finally
  148. FreeAndNil(DNS);
  149. end;
  150. end;
  151. { TDNSARecord }
  152. procedure TDNSARecord.Test;
  153. begin
  154. Status('Getting A record');
  155. Query([qtA]);
  156. end;
  157. { TDNSMXRecord }
  158. procedure TDNSMXRecord.Test;
  159. begin
  160. Status('Getting MX record');
  161. Query([qtMX]);
  162. end;
  163. { TDNSRareRecords }
  164. procedure TDNSRareRecords.Test;
  165. begin
  166. Status('Getting MD record');
  167. Query([qtMD]);
  168. Status('Getting MF record');
  169. Query([qtMF]);
  170. Status('Getting MB record');
  171. Query([qtMB]);
  172. Status('Getting MG record');
  173. Query([qtMG]);
  174. Status('Getting MR record');
  175. Query([qtMR]);
  176. Status('Getting Null record');
  177. Query([qtNull]);
  178. Status('Getting WKS record');
  179. Query([qtWKS]);
  180. Status('Getting HINFO record');
  181. Query([qtHINFO]);
  182. Status('Getting MINFO record');
  183. Query([qtMINFO]);
  184. Status('Getting STAR record');
  185. Query([qtSTAR]);
  186. Status('Getting all records');
  187. Query([qtA, qtNS, qtMD, qtMF, qtName, qtSOA, qtMB, qtMG,
  188. qtMR, qtNull, qtWKS, qtPTR, qtHINFO, qtMINFO, qtMX, qtTXT, qtSTAR]);
  189. end;
  190. { TDNSNSRecord }
  191. procedure TDNSNSRecord.Test;
  192. begin
  193. Status('Getting NS record');
  194. Query([qtNS]);
  195. end;
  196. { TDNSNameRecord }
  197. procedure TDNSNameRecord.Test;
  198. begin
  199. Status('Getting Name record');
  200. Query([qtName]);
  201. end;
  202. { TDNSSOARecord }
  203. procedure TDNSSOARecord.Test;
  204. begin
  205. Status('Getting SOA record');
  206. Query([qtSOA]);
  207. end;
  208. { TDNSPTRRecord }
  209. procedure TDNSPTRRecord.Test;
  210. begin
  211. Status('Getting A record for PTR test');
  212. Query([qtA]);
  213. Status('Getting SOA record for PTR test');
  214. Query([qtSOA]);
  215. Status('Getting PTR record');
  216. Query([qtPTR]);
  217. end;
  218. { TDNSTXTRecord }
  219. procedure TDNSTXTRecord.Test;
  220. begin
  221. Status('Getting TXT record');
  222. Query([qtTXT]);
  223. end;
  224. initialization
  225. TIndyBox.RegisterBox(TDNSARecord, 'A Record', 'Clients - DNS');
  226. TIndyBox.RegisterBox(TDNSMXRecord, 'MX Record', 'Clients - DNS');
  227. TIndyBox.RegisterBox(TDNSNameRecord, 'Name Record', 'Clients - DNS');
  228. TIndyBox.RegisterBox(TDNSNSRecord, 'NS Record', 'Clients - DNS');
  229. TIndyBox.RegisterBox(TDNSRareRecords, 'Rare Records', 'Clients - DNS');
  230. TIndyBox.RegisterBox(TDNSPTRRecord, 'PTR Record', 'Clients - DNS');
  231. TIndyBox.RegisterBox(TDNSSOARecord, 'SOA Record', 'Clients - DNS');
  232. TIndyBox.RegisterBox(TDNSTXTRecord, 'TXT Record', 'Clients - DNS');
  233. end.