/indy/DNSResolver.pas
https://code.google.com/ · Pascal · 270 lines · 206 code · 37 blank · 27 comment · 11 complexity · 751f988071d29b0d2463a22fdeae510a MD5 · raw file
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {}
- { $Log: 11239: DNSResolver.pas
- {
- Rev 1.1 5/19/2003 10:29:24 AM BGooijen
- Compiles now
- }
- {
- { Rev 1.0 11/12/2002 09:15:42 PM JPMugaas
- { Initial check in. Import from FTP VC.
- }
- unit DNSResolver;
-
- interface
-
- uses
- IndyBox,
- IdDNSResolver;
-
- const
- DefaultHost = 'a.root-servers.net';
-
- type
- TDNSResolverBasic = class(TIndyBox)
- protected
- FA : String;
- FSOA : String;
- procedure Query(AQuery : TQueryType);
- end;
-
- TDNSARecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSMXRecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSNameRecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSNSRecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSTXTRecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSPTRRecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSRareRecords = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- TDNSSOARecord = class(TDNSResolverBasic)
- public
- procedure Test; override;
- end;
-
- implementation
-
- uses
- IdCoreGlobal,
- IdGlobal,
- SysUtils;
-
- { TDNSREsolverProc }
-
- procedure TDNSResolverBasic.Query(AQuery : TQueryType);
- var
- DNS : TIdDNSResolver;
- Host : String;
- Query : String;
-
- procedure Output;
- var
- i : Integer;
- A : TARecord;
- MX : TMXRecord;
- NS : TNSRecord;
- SOA : TSOARecord;
- begin
- for i := 0 to DNS.QueryResult.Count - 1 do
- begin
- Status('Name: ' + DNS.QueryResult.Items[i].Name
- + CR + LF + 'TTL: ' + IntToStr(DNS.QueryResult.Items[i].TTL));
- if DNS.QueryResult.Items[i].InheritsFrom(TARecord) then
- begin
- A := TARecord(DNS.QueryResult.Items[i]);
- Status('A: ' + A.IPAddress);
- FA := A.IPAddress;
- end else if DNS.QueryResult.Items[i].InheritsFrom(TNSRecord) then
- begin
- NS := TNSRecord(DNS.QueryResult.Items[i]);
- Status('NS: ' + NS.HostName);
- end else if DNS.QueryResult.Items[i].InheritsFrom(TSOARecord) then
- begin
- SOA := TSOARecord(DNS.QueryResult.Items[i]);
- FSOA := SOA.Primary;
- Status('SOA: ' + CR + LF + TAB + 'Primary: ' + SOA.Primary
- + CR + LF + TAB + 'Responsible person: ' + SOA.ResponsiblePerson
- + CR + LF + TAB + 'Serial: ' + IntToStr(SOA.Serial)
- + CR + LF + TAB + 'Refresh: ' + IntTOStr(SOA.Refresh)
- + CR + LF + TAB + 'Retry: ' + IntTOStr(SOA.Retry)
- + CR + LF + TAB + 'Expire: ' + IntTOStr(SOA.Expire)
- + CR + LF + TAB + 'MinTTL: ' + IntTOStr(SOA.MinimumTTL)
- );
- end else if DNS.QueryResult.Items[i].InheritsFrom(TMXRecord) then
- begin
- MX := TMXRecord(DNS.QueryResult.Items[i]);
- Status('MX: ' + TAB + 'Preference: ' + IntToStr(MX.Preference)
- + TAB + ' Server: ' + MX.ExchangeServer);
- end else
- begin
- Status('Record type not catered for in test: '
- + DNS.QueryResult.Items[i].DisplayName);
- end;
- end;
- end;
-
- begin
- DNS := TIdDNSResolver.Create(Nil);
- try
- Host := Trim(GlobalParamValue('DNS Server'));
- if Length(Host) = 0 then
- begin
- Host := DefaultHost;
- end;
- DNS.Host := Host;
- Query := Trim(GlobalParamValue('DNS Domain'));
- if (Length(Query) = 0)
- or (Query = 'Unspecified') then
- begin
- Query := 'nevrona.com';
- end;
-
- DNS.QueryType := AQuery;
- if AQuery = [qtPTR] then
- begin
- Status('Altering PTR to check: ' + FA + ' from ' + FSOA);
- DNS.Host := FSOA;
- DNS.Resolve(FA);
- end else
- begin
- DNS.Resolve(Query);
- end;
- Output;
-
- finally
- FreeAndNil(DNS);
- end;
- end;
-
- { TDNSARecord }
-
- procedure TDNSARecord.Test;
- begin
- Status('Getting A record');
- Query([qtA]);
- end;
-
- { TDNSMXRecord }
-
- procedure TDNSMXRecord.Test;
- begin
- Status('Getting MX record');
- Query([qtMX]);
- end;
-
- { TDNSRareRecords }
-
- procedure TDNSRareRecords.Test;
- begin
- Status('Getting MD record');
- Query([qtMD]);
- Status('Getting MF record');
- Query([qtMF]);
- Status('Getting MB record');
- Query([qtMB]);
- Status('Getting MG record');
- Query([qtMG]);
- Status('Getting MR record');
- Query([qtMR]);
- Status('Getting Null record');
- Query([qtNull]);
- Status('Getting WKS record');
- Query([qtWKS]);
- Status('Getting HINFO record');
- Query([qtHINFO]);
- Status('Getting MINFO record');
- Query([qtMINFO]);
- Status('Getting STAR record');
- Query([qtSTAR]);
- Status('Getting all records');
- Query([qtA, qtNS, qtMD, qtMF, qtName, qtSOA, qtMB, qtMG,
- qtMR, qtNull, qtWKS, qtPTR, qtHINFO, qtMINFO, qtMX, qtTXT, qtSTAR]);
- end;
-
- { TDNSNSRecord }
-
- procedure TDNSNSRecord.Test;
- begin
- Status('Getting NS record');
- Query([qtNS]);
- end;
-
- { TDNSNameRecord }
-
- procedure TDNSNameRecord.Test;
- begin
- Status('Getting Name record');
- Query([qtName]);
- end;
-
- { TDNSSOARecord }
-
- procedure TDNSSOARecord.Test;
- begin
- Status('Getting SOA record');
- Query([qtSOA]);
- end;
-
- { TDNSPTRRecord }
-
- procedure TDNSPTRRecord.Test;
- begin
- Status('Getting A record for PTR test');
- Query([qtA]);
- Status('Getting SOA record for PTR test');
- Query([qtSOA]);
- Status('Getting PTR record');
- Query([qtPTR]);
- end;
-
- { TDNSTXTRecord }
-
- procedure TDNSTXTRecord.Test;
- begin
- Status('Getting TXT record');
- Query([qtTXT]);
- end;
-
- initialization
- TIndyBox.RegisterBox(TDNSARecord, 'A Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSMXRecord, 'MX Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSNameRecord, 'Name Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSNSRecord, 'NS Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSRareRecords, 'Rare Records', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSPTRRecord, 'PTR Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSSOARecord, 'SOA Record', 'Clients - DNS');
- TIndyBox.RegisterBox(TDNSTXTRecord, 'TXT Record', 'Clients - DNS');
- end.