亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cldnsquery.pas

?? Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼
?? PAS
字號:
{
  Clever Internet Suite Version 6.2
  Copyright (C) 1999 - 2006 Clever Components
  www.CleverComponents.com
}

unit clDnsQuery;

interface

{$I clVer.inc}

uses
  Classes, clDnsMessage;

type
  TclHostInfo = class
  private
    FIPAddress: string;
    FName: string;
  public
    property Name: string read FName;
    property IPAddress: string read FIPAddress;
  end;

  TclHostList = class
  private
    FList: TList;
    function GetCount: Integer;
    function GetItem(Index: Integer): TclHostInfo;
  protected
    procedure Clear;
    procedure Add(AItem: TclHostInfo);
    procedure Insert(Index: Integer; AItem: TclHostInfo);
  public
    constructor Create;
    destructor Destroy; override;
    function ItemByName(const AName: string): TclHostInfo;
    property Items[Index: Integer]: TclHostInfo read GetItem; default;
    property Count: Integer read GetCount;
  end;

  TclMailServerInfo = class(TclHostInfo)
  private
    FPreference: Integer;
  public
    property Preference: Integer read FPreference;
  end;

  TclMailServerList = class(TclHostList)
  private
    function GetItem(Index: Integer): TclMailServerInfo;
    procedure AddSorted(AItem: TclMailServerInfo);
  public
    property Items[Index: Integer]: TclMailServerInfo read GetItem; default;
  end;

  TclDnsQuery = class(TComponent)
  private
    FQuery: TclDnsMessage;
    FResponse: TclDnsMessage;
    FMailServers: TclMailServerList;
    FNameServers: TStrings;
    FHosts: TclHostList;
    FDnsServer: string;
    FTimeOut: Integer;
    FPort: Integer;
    FIsRecursiveDesired: Boolean;
    FAliases: TStrings;
    procedure Clear;
    procedure FillAInfo(ARecordList: TclDnsRecordList);
    procedure FillMXInfo;
    procedure FillNSInfo(ARecordList: TclDnsRecordList);
    function FillHostInfo: TclHostInfo;
    procedure FillAliasInfo;
    function GetPreferredMX: TclMailServerInfo;
    function GetEmailDomain(const AEmail: string): string;
    function GetArpaIPAddress(const AIP: string): string;
    procedure CheckDnsError(AResponseCode: Integer);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Resolve; overload;
    procedure Resolve(AQuery, AResponse: TclDnsMessage); overload;
    function ResolveMX(const AEmail: string): TclMailServerInfo;
    function ResolveIP(const AHost: string): TclHostInfo;
    function ResolveHost(const AIPAddress: string): TclHostInfo;
    function ResolveNS(const AHost: string): string;

    property Query: TclDnsMessage read FQuery;
    property Response: TclDnsMessage read FResponse;
    property MailServers: TclMailServerList read FMailServers;
    property Hosts: TclHostList read FHosts;
    property NameServers: TStrings read FNameServers;
    property Aliases: TStrings read FAliases;
  published
    property DnsServer: string read FDnsServer write FDnsServer;
    property TimeOut: Integer read FTimeOut write FTimeOut default 5000;
    property Port: Integer read FPort write FPort default 53;
    property IsRecursiveDesired: Boolean read FIsRecursiveDesired write FIsRecursiveDesired default True;
  end;

resourcestring
  cDnsFormatError = 'Format error';
  cDnsServerFailure = 'Server failure';
  cDnsNameError = 'No such name';
  cDnsNotImplemented = 'Not implemented';
  cDnsRefused = 'Refused';
  cDnsUnspecifiedError = 'Unspecified error';

{$IFDEF DEMO}
{$IFNDEF IDEDEMO}
var
  IsDnsDemoDisplayed: Boolean = False;
{$ENDIF}
{$ENDIF}

  
implementation

uses
  WinSock, SysUtils, clSocket, clUtils{$IFDEF DEMO}, Forms, Windows{$ENDIF};

{ TclDnsQuery }

procedure TclDnsQuery.Clear;
begin
  Query.Clear();
  Response.Clear();
  Hosts.Clear();
  MailServers.Clear();
  NameServers.Clear();
  Aliases.Clear();
end;

constructor TclDnsQuery.Create(AOwner: TComponent);
var
  wsaData: TWSAData;
  res: Integer;
begin
  inherited Create(AOwner);

  res := WSAStartup($202, wsaData);
  if (res <> 0) then
  begin
    RaiseSocketError(WSAGetLastError());
  end;

  FQuery := TclDnsMessage.Create();
  FResponse := TclDnsMessage.Create();

  FHosts := TclHostList.Create();
  FMailServers := TclMailServerList.Create();
  FNameServers := TStringList.Create();
  FAliases := TStringList.Create();

  TimeOut := 5000;
  Port := 53;
  IsRecursiveDesired := True;
end;

destructor TclDnsQuery.Destroy;
begin
  FAliases.Free();
  FNameServers.Free();
  FMailServers.Free();
  FHosts.Free();

  FResponse.Free();
  FQuery.Free();

  WSACleanup();
  inherited Destroy();
end;

procedure TclDnsQuery.Resolve;
begin
  Resolve(Query, Response);
end;

procedure TclDnsQuery.Resolve(AQuery, AResponse: TclDnsMessage);
var
  connection: TclUdpClientConnection;
  queryStream, replyStream: TStream;
begin
{$IFDEF DEMO}
{$IFNDEF STANDALONEDEMO}
  if FindWindow('TAppBuilder', nil) = 0 then
  begin
    MessageBox(0, 'This demo version can be run under Delphi/C++Builder IDE only. ' +
      'Please visit www.clevercomponents.com to purchase your ' +
      'copy of the library.', 'Information', MB_ICONEXCLAMATION  or MB_TASKMODAL or MB_TOPMOST);
    ExitProcess(1);
  end else
{$ENDIF}
  begin
{$IFNDEF IDEDEMO}
    if not IsDnsDemoDisplayed then
    begin
      MessageBox(0, 'Please visit www.clevercomponents.com to purchase your ' +
        'copy of the library.', 'Information', MB_ICONEXCLAMATION  or MB_TASKMODAL or MB_TOPMOST);
    end;
    IsDnsDemoDisplayed := True;
{$ENDIF}
  end;
{$ENDIF}

  connection := nil;
  queryStream := nil;
  replyStream := nil;
  try
    connection := TclUdpClientConnection.Create();
    connection.NetworkStream := TclNetworkStream.Create();
    connection.BatchSize := 512;
    connection.TimeOut := TimeOut;
    connection.Open(DnsServer, Port);

    queryStream := TMemoryStream.Create();
    AQuery.Build(queryStream);
    queryStream.Position := 0;
    connection.WriteData(queryStream);

    replyStream := TMemoryStream.Create();
    connection.ReadData(replyStream);
    replyStream.Position := 0;
    AResponse.Parse(replyStream);

    CheckDnsError(AResponse.Header.ResponseCode);
  finally
    replyStream.Free();
    queryStream.Free();
    connection.Free();
  end;
end;

procedure TclDnsQuery.CheckDnsError(AResponseCode: Integer);
var
  msg: string;
begin
  if AResponseCode = 0 then Exit;
  case AResponseCode of
    1: msg := cDnsFormatError;
    2: msg := cDnsServerFailure;
    3: msg := cDnsNameError;
    4: msg := cDnsNotImplemented;
    5: msg := cDnsRefused
  else
    msg := cDnsUnspecifiedError;
  end;
  raise EclDnsError.Create(msg, AResponseCode);
end;

function TclDnsQuery.ResolveMX(const AEmail: string): TclMailServerInfo;
var
  rec: TclDnsRecord;
begin
  Clear();

  Query.Header.IsQuery := True;
  Query.Header.IsRecursionDesired := IsRecursiveDesired;
  
  rec := TclDnsMXRecord.Create();
  Query.Queries.Add(rec);
  rec.Name := GetEmailDomain(AEmail);
  rec.RecordClass := rcInternet;

  Resolve();

  FillAInfo(Response.AdditionalRecords);
  FillNSInfo(Response.NameServers);
  FillAliasInfo();
  FillMXInfo();

  Result := GetPreferredMX();
end;

function TclDnsQuery.GetEmailDomain(const AEmail: string): string;
var
  ind: Integer;
begin
  Result := AEmail;
  ind := system.Pos('@', Result);
  if (ind > 0) then
  begin
    system.Delete(Result, 1, ind);
  end;
end;

function TclDnsQuery.GetArpaIPAddress(const AIP: string): string;
begin
  Result := AIP;
  if (system.Pos('in-addr.arpa', LowerCase(Result)) = 0) and (WordCount(Result, ['.']) = 4) then
  begin
    Result := ExtractWord(4, Result, ['.']) + '.' + ExtractWord(3, Result, ['.']) + '.' +
      ExtractWord(2, Result, ['.']) + '.' + ExtractWord(1, Result, ['.']) + '.in-addr.arpa';
  end;
end;

procedure TclDnsQuery.FillMXInfo;
var
  i: Integer;
  aInfo: TclHostInfo;
  mxInfo: TclMailServerInfo;
  mxRec: TclDnsMXRecord;
begin
  for i := 0 to Response.Answers.Count - 1 do
  begin
    if (Response.Answers[i] is TclDnsMXRecord) then
    begin
      mxInfo := TclMailServerInfo.Create();
      MailServers.AddSorted(mxInfo);

      mxRec := Response.Answers[i] as TclDnsMXRecord;
      mxInfo.FName := mxRec.MailServer;
      mxInfo.FPreference := mxRec.Preference;

      aInfo := Hosts.ItemByName(mxInfo.Name);
      if (aInfo <> nil) then
      begin
        mxInfo.FIPAddress := aInfo.IPAddress;
      end;
    end;
  end;
end;

function TclDnsQuery.GetPreferredMX: TclMailServerInfo;
begin
  if (MailServers.Count > 0) then
  begin
    Result := MailServers[0];
  end else
  begin
    Result := nil;
  end;
end;

function TclDnsQuery.ResolveIP(const AHost: string): TclHostInfo;
var
  rec: TclDnsRecord;
begin
  Clear();

  Query.Header.IsQuery := True;
  Query.Header.IsRecursionDesired := IsRecursiveDesired;
  
  rec := TclDnsARecord.Create();
  Query.Queries.Add(rec);
  rec.Name := AHost;
  rec.RecordClass := rcInternet;

  Resolve();

  FillAInfo(Response.Answers);
  FillNSInfo(Response.NameServers);
  FillAliasInfo();

  if (Hosts.Count > 0) then
  begin
    Result := Hosts[0];
  end else
  begin
    Result := nil;
  end;
end;

procedure TclDnsQuery.FillNSInfo(ARecordList: TclDnsRecordList);
var
  i: Integer;
begin
  for i := 0 to ARecordList.Count - 1 do
  begin
    if (ARecordList[i] is TclDnsNSRecord) then
    begin
      NameServers.Add((ARecordList[i] as TclDnsNSRecord).NameServer);
    end;
  end;
end;

function TclDnsQuery.ResolveHost(const AIPAddress: string): TclHostInfo;
var
  rec: TclDnsRecord;
begin
  Clear();

  Query.Header.IsQuery := True;
  Query.Header.IsRecursionDesired := IsRecursiveDesired;
  
  rec := TclDnsPTRRecord.Create();
  Query.Queries.Add(rec);
  rec.Name := GetArpaIPAddress(AIPAddress);
  rec.RecordClass := rcInternet;

  Resolve();

  Result := FillHostInfo();
  FillAInfo(Response.AdditionalRecords);
  FillNSInfo(Response.NameServers);
  FillAliasInfo();

  if (Result <> nil) then
  begin
    Result.FIPAddress := AIPAddress;
  end;
end;

function TclDnsQuery.FillHostInfo: TclHostInfo;
var
  i: Integer;
  ptrRec: TclDnsPTRRecord;
begin
  Result := nil;
  for i := 0 to Response.Answers.Count - 1 do
  begin
    if (Response.Answers[i] is TclDnsPTRRecord) then
    begin
      Result := TclHostInfo.Create();
      Hosts.Add(Result);

      ptrRec := (Response.Answers[i] as TclDnsPTRRecord);
      Result.FName := ptrRec.DomainName;
      Result.FIPAddress := ptrRec.Name;
    end;
  end;
end;

procedure TclDnsQuery.FillAInfo(ARecordList: TclDnsRecordList);
var
  i: Integer;
  inetInfo: TclHostInfo;
  aRec: TclDnsARecord;
begin
  for i := 0 to ARecordList.Count - 1 do
  begin
    if (ARecordList[i] is TclDnsARecord) then
    begin
      inetInfo := TclHostInfo.Create();
      Hosts.Add(inetInfo);

      aRec := (ARecordList[i] as TclDnsARecord);
      inetInfo.FName := aRec.Name;
      inetInfo.FIPAddress := aRec.IPAddress;
    end;
  end;
end;

function TclDnsQuery.ResolveNS(const AHost: string): string;
var
  rec: TclDnsRecord;
begin
  Clear();

  Query.Header.IsQuery := True;
  Query.Header.IsRecursionDesired := IsRecursiveDesired;
  
  rec := TclDnsNSRecord.Create();
  Query.Queries.Add(rec);
  rec.Name := AHost;
  rec.RecordClass := rcInternet;

  Resolve();

  FillNSInfo(Response.Answers);
  FillAliasInfo();

  if (NameServers.Count > 0) then
  begin
    Result := NameServers[0];
  end else
  begin
    Result := '';
  end;
end;

procedure TclDnsQuery.FillAliasInfo;
  procedure ExtractAliases(ARecordList: TclDnsRecordList);
  var
    i: Integer;
  begin
    for i := 0 to ARecordList.Count - 1 do
    begin
      if (ARecordList[i] is TclDnsCNAMERecord) then
      begin
        Aliases.Add(ARecordList[i].Name);
      end;
    end;
  end;
  
begin
  ExtractAliases(Response.Answers);
  ExtractAliases(Response.AdditionalRecords);
end;

{ TclHostList }

procedure TclHostList.Add(AItem: TclHostInfo);
begin
  FList.Add(AItem);
end;

procedure TclHostList.Clear;
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
  begin
    Items[i].Free();
  end;
  FList.Clear();
end;

constructor TclHostList.Create;
begin
  inherited Create();
  FList := TList.Create();
end;

destructor TclHostList.Destroy;
begin
  Clear();
  FList.Free();
  inherited Destroy();
end;

function TclHostList.GetCount: Integer;
begin
  Result := FList.Count;
end;

function TclHostList.GetItem(Index: Integer): TclHostInfo;
begin
  Result := TclHostInfo(FList[Index]);
end;

procedure TclHostList.Insert(Index: Integer; AItem: TclHostInfo);
begin
  FList.Insert(Index, AItem);
end;

function TclHostList.ItemByName(const AName: string): TclHostInfo;
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
  begin
    if SameText(Items[i].Name, AName) then
    begin
      Result := Items[i];
      Exit;
    end;
  end;
  Result := nil; 
end;

{ TclMailServerList }

procedure TclMailServerList.AddSorted(AItem: TclMailServerInfo);
var
  i, ind: Integer;
begin
  ind := 0;
  for i := 0 to Count - 1 do
  begin
    if (Items[i].Preference < AItem.Preference) then
    begin
      ind := i;
      Break;
    end;
  end;
  
  Insert(ind, AItem);
end;

function TclMailServerList.GetItem(Index: Integer): TclMailServerInfo;
begin
  Result := (inherited Items[Index] as TclMailServerInfo);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色综合网站| 午夜精品一区二区三区免费视频| 亚洲你懂的在线视频| 日本不卡123| 91免费国产视频网站| 日韩欧美一级片| 亚洲女人小视频在线观看| 韩日精品视频一区| 欧美日韩免费不卡视频一区二区三区| 欧美精品一区二区三区高清aⅴ | 久久久国产午夜精品| 亚洲国产成人91porn| 成人精品视频一区二区三区| 日韩一二三四区| 亚洲一区二区三区四区不卡| 国产精品一区二区在线观看不卡| 欧美日韩国产不卡| 一区二区三区产品免费精品久久75| 国产精品资源在线看| 日韩写真欧美这视频| 午夜久久久久久久久| 色琪琪一区二区三区亚洲区| 国产蜜臀av在线一区二区三区| 日本欧美在线观看| 欧美精品vⅰdeose4hd| 一区二区三区日韩欧美精品| 成人小视频免费在线观看| 国产亚洲人成网站| 国产麻豆精品视频| 国产亚洲欧美日韩在线一区| 麻豆成人av在线| 欧美一级片在线观看| 天天爽夜夜爽夜夜爽精品视频| 色天使久久综合网天天| 一区二区三区在线播| 99视频精品免费视频| 国产精品福利一区二区三区| 成人av在线网站| 国产精品成人一区二区艾草| 97精品视频在线观看自产线路二| 中文字幕精品一区| 成人黄色小视频| 亚洲人一二三区| 在线精品观看国产| 婷婷久久综合九色综合绿巨人| 9191成人精品久久| 久久狠狠亚洲综合| 欧美韩国日本一区| 色偷偷一区二区三区| 亚洲国产sm捆绑调教视频| 欧美一区二区在线视频| 裸体歌舞表演一区二区| 久久精品视频免费观看| av一二三不卡影片| 亚洲高清三级视频| 日韩精品一区二区三区swag| 久久av老司机精品网站导航| 精品国产制服丝袜高跟| 国产二区国产一区在线观看| 中文字幕在线一区| 欧美日韩视频在线一区二区| 麻豆国产一区二区| 国产精品国产三级国产aⅴ无密码| 97精品超碰一区二区三区| 亚洲mv在线观看| 精品国产91乱码一区二区三区 | 日韩一区精品视频| 26uuu国产电影一区二区| 91在线视频官网| 五月天激情小说综合| 久久蜜桃av一区二区天堂| 91亚洲精品久久久蜜桃| 免费成人在线影院| 最新热久久免费视频| 日韩视频一区在线观看| 99久久er热在这里只有精品66| 午夜av区久久| 中文字幕一区二区三区在线播放| 欧美剧情片在线观看| 成人午夜激情在线| 看国产成人h片视频| 亚洲男人都懂的| 久久久影院官网| 欧美日韩国产乱码电影| 成人免费观看av| 免费观看一级欧美片| 亚洲卡通欧美制服中文| 久久亚洲影视婷婷| 欧美日韩国产综合一区二区三区| 岛国精品在线观看| 久久精品国产77777蜜臀| 一区二区三区四区乱视频| 欧美激情一区二区三区四区| 日韩免费观看2025年上映的电影| 91精品福利在线| 99精品视频免费在线观看| 国产成人超碰人人澡人人澡| 日本不卡高清视频| 午夜亚洲国产au精品一区二区| 亚洲视频一区在线观看| 国产女主播视频一区二区| 91精品国产欧美一区二区18| 欧美性猛交xxxx乱大交退制版| aaa亚洲精品| 成人免费三级在线| 国产福利精品一区二区| 国产精品影视天天线| 韩国一区二区三区| 韩国女主播一区| 国产麻豆精品久久一二三| 精品亚洲免费视频| 韩国女主播一区| 国产一区在线观看麻豆| 国产乱码精品1区2区3区| 韩国精品在线观看| 国产一级精品在线| 国产一区二区三区日韩| 国产做a爰片久久毛片| 九九热在线视频观看这里只有精品| 日韩二区三区在线观看| 蜜臀精品一区二区三区在线观看| 麻豆精品在线视频| 国产精品一区二区久久精品爱涩| 国产成人亚洲精品青草天美| 粗大黑人巨茎大战欧美成人| 国产.精品.日韩.另类.中文.在线.播放| 国产露脸91国语对白| 成人理论电影网| 91精彩视频在线| 欧美日韩色一区| 欧美不卡一二三| 欧美极品美女视频| 亚洲色图欧洲色图| 亚洲bdsm女犯bdsm网站| 奇米777欧美一区二区| 久久国产精品第一页| 国产成人亚洲综合色影视| 99精品一区二区三区| 欧美视频一区二区在线观看| 91麻豆精品国产91久久久久久| 日韩欧美一区二区视频| 久久精品人人做人人爽人人| 亚洲日本一区二区三区| 日本不卡在线视频| 国产成人精品三级| 欧美在线短视频| 日韩精品中文字幕一区| 国产精品国产三级国产| 日韩成人一级片| 不卡一区在线观看| 91麻豆精品国产91久久久久 | 中文字幕在线不卡国产视频| 亚洲一区二区综合| 国产乱妇无码大片在线观看| 色老综合老女人久久久| 日韩欧美一区二区在线视频| 中文字幕人成不卡一区| 日韩福利电影在线观看| 99久久久久免费精品国产 | 美日韩一区二区三区| 成人免费毛片高清视频| 欧美一区二区私人影院日本| 中文字幕免费不卡在线| 奇米在线7777在线精品| 91啪亚洲精品| 亚洲精品一区二区三区影院 | 国产精品资源站在线| 欧美亚洲动漫制服丝袜| 国产日韩三级在线| 奇米综合一区二区三区精品视频| 91亚洲精华国产精华精华液| 91麻豆精品国产91久久久使用方法 | 中文av字幕一区| 免费日本视频一区| 91国产成人在线| 1024成人网| 国产成人精品亚洲日本在线桃色| 欧美精品日韩一本| 亚洲一区二区三区在线看| 成人精品视频一区二区三区| 欧美精品一区二区三区久久久 | 91精品国产综合久久精品| 亚洲欧洲www| 国产老女人精品毛片久久| 日韩一区和二区| 首页欧美精品中文字幕| 91搞黄在线观看| 亚洲天堂久久久久久久| 高清不卡一区二区在线| 久久久.com| 国产美女娇喘av呻吟久久| 日韩一区二区在线观看| 视频一区二区三区中文字幕| 欧美综合一区二区| 亚洲一区二区三区国产| 一本大道久久a久久精品综合| 中文字幕一区二区三区精华液 | 亚洲欧洲综合另类| 91久久免费观看| 亚洲国产va精品久久久不卡综合|