⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit_geturl.~pas

📁 菜鸟猜地址(完全源码) DELPHI 源代码 菜鸟猜地址(完全源码) DELPHI 源代码
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
unit Unit_GetUrl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnList, ExtCtrls,wininet,StrUtils, ComCtrls,Unit_UrlShowEdit
  ,SHDocVw,Comobj, Menus, Buttons, ImgList;

type
  TForm_GetUrl = class(TForm)
    GetFistUrl: TEdit;
    GetLastUrl: TEdit;
    Explore: TButton;
    UrlList: TListBox;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    SBGuessStart: TSpeedButton;
    Label4: TLabel;
    Panel2: TPanel;
    ReMove0: TCheckBox;
    DelGUrl: TButton;
    GroupBox1: TGroupBox;
    ExploreTheOne: TButton;
    StatusBar1: TStatusBar;
    RdGp_MaxGsUrl: TRadioGroup;
    GroupBox2: TGroupBox;
    FormulaShow: TMemo;
    Label3: TLabel;
    ShowUrlWin: TButton;
    Panel3: TPanel;
    Panel4: TPanel;
    Button1: TButton;
    GuessBalance: TRadioButton;
    GuessAlone: TRadioButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    MP31: TMenuItem;
    MTV1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N1001: TMenuItem;
    N5001: TMenuItem;
    N10001: TMenuItem;
    N20001: TMenuItem;
    N50001: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    URLKING1: TMenuItem;
    N17: TMenuItem;
    N21: TMenuItem;
    N18: TMenuItem;
    N22: TMenuItem;
    N19: TMenuItem;
    procedure ExploreClick(Sender: TObject);
    procedure GetLastUrlExit(Sender: TObject);
    procedure GetFistUrlExit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SBGuessStartClick(Sender: TObject);
    procedure DelGUrlClick(Sender: TObject);
    procedure ExploreTheOneClick(Sender: TObject);
    procedure GetFistUrlClick(Sender: TObject);
    procedure GetLastUrlClick(Sender: TObject);
    procedure ShowUrlWinClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure GuessAloneClick(Sender: TObject);
    procedure GuessBalanceClick(Sender: TObject);
    procedure ExploreTheOneMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure GroupBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ShowUrlWinMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ExploreMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DelGUrlMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure UrlListMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure RdGp_MaxGsUrlClick(Sender: TObject);
    procedure GuessAloneMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure GuessBalanceMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure GroupBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ReMove0MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormulaShowMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SBGuessStartMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N1001Click(Sender: TObject);
    procedure N5001Click(Sender: TObject);
    procedure N10001Click(Sender: TObject);
    procedure N20001Click(Sender: TObject);
    procedure N50001Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure URLKING1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure MTV1Click(Sender: TObject);
    procedure MP31Click(Sender: TObject);
    procedure N21Click(Sender: TObject);
    procedure N18Click(Sender: TObject);
    procedure N22Click(Sender: TObject);
    procedure N19Click(Sender: TObject);
    procedure ReMove0Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Type
    UrlTextList=Record
    RealUrl:string;
    BtfName:string;
    UrlNum:integer;
end;

Type
  PointInt=^integer;
  PointStr=^string;

var
  Form_GetUrl: TForm_GetUrl;
  UrlTexList:array[1..100] of UrlTextList;
  IEApp: Variant;
  UrlType:string;
  AntoDelFinished:boolean;

implementation

{$R *.dfm}

//判断地址有效性开始
function IsURL(s: string): Boolean;
var
  i: integer;
begin
  Result := False;
  if Length(s) < 5 then exit;
  if (s[Length(s)] = '.')  or (Pos('..', s) > 0) then exit;
  for i := 1 to Length(s) do
    //if (Ord(s[i]) < 33) or (Ord(s[i]) > 126) then exit;
  if (Pos('www.',LowerCase(s)) = 1) or (Pos('news:', LowerCase(s)) = 1) and
     (Length(s) > 6) then
  begin
    Result := True;
    Exit;
  end;
  //判断Email地址
  //if (Length(s) > 12) or (Pos('mailto:', LowerCase(s)) = 1) and
    // (Pos('@', s) > 1) and (Pos('.', s) > 4) and (Pos('.', s) > (Pos('@', s) +1)) then
  //begin
    //Result := True;
    //Exit;
  //end;
  if (Pos('http://', LowerCase(s)) > 0) or (Pos('ftp://', LowerCase(s)) > 0) or
    (pos('rtsp://',LowerCase(s)) > 0) or (Pos('mms://',LowerCase(s)) > 0) and
     (Length(s) > 10) and (Pos('.', s) > 7) then
  begin
    Result := True;
    Exit;
  end;
end;
//判断地址有效性结束

 //探测地址函数开始
Function  CheckUrl(url:string):boolean;
var
hSession,  hfile,  hRequest:  hInternet;
dwindex,dwcodelen  :dword;
dwcode:array[1..20]  of  char;
res  :  pchar;
begin
if  (pos('http://',lowercase(url))=0)  and (Pos('ftp://', LowerCase(url)) = 0) and
    (pos('rtsp://',LowerCase(url))= 0) and (Pos('mms://',LowerCase(url)) = 0) then
url  :=  'http://'+url;

Result  :=  false;//这句并不是针对上面的if
hSession  :=  InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,  nil,  0);
if  assigned(hsession)  then
begin
hfile  :=  InternetOpenUrl(hsession,pchar(url),nil,0,INTERNET_FLAG_RELOAD,0);
dwIndex  :=  0;
dwCodeLen  :=  10;
HttpQueryInfo(hfile,  HTTP_QUERY_STATUS_CODE,@dwcode,  dwcodeLen,  dwIndex);
res  :=  pchar(@dwcode);
result:=  (res  ='200')  or  (res  ='302');
if  assigned(hfile)  then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
//探测地址函数结束 

 //返回字符串是否是正确的整数表达
function IsInteger(mStr: string): Boolean;
var
  I: Integer;
  E: Integer;
begin
  Val(mStr, I, E);
  Result := E = 0;
  E := Trunc(I);
end;  {IsInteger }
///////返回字符串是否是正确的整数表达结束

{得到最末字符数块}
function GetBackStrNums(StartN:integer;Str:String;BeginN:PointInt):String;
Var i_for:integer;
Begin
  BeginN^:=0;
  Result:='';
  for i_for:=StartN downto 1 do
  Begin
  //showmessage('长度 '+inttostr(length(str)));
  //if ByteType(Str,i_for)=mbSingleByte then showmessage('单字节');
  //if ByteType(Str,i_for)=mbLeadByte then showmessage('双字节第一位');
  //if ByteType(Str,i_for)=mbTrailByte then showmessage('双字节第二位');
    if IsInteger(Str[i_for]) then
    Begin
      Result:=Str[i_for]+Result;
      if length(Result)>9 then
        Result:=leftstr(Result,9);

      if not IsInteger(Str[i_for-1]) then//结束条件
      Begin
        if Result='' then Result:='#';
        //结束处理
        BeginN^:=i_for;
        exit;
      end;
    end;
  end;

end;{得到最末字符数块}

{判断输入地址是否合法}
function JerqueUrl():boolean;
begin
Result:=True;
    if( //判断地址一有效性
       (trim(Form_GetUrl.GetFistUrl.Text)='')
       or (Form_GetUrl.GetFistUrl.Text='请在这里输入参考地址一(完整的)'))
       or (IsURL(Form_GetUrl.GetFistUrl.Text)<>true) then
    begin
        showmessage('抱歉,参考地址一无效');
        Result:=False;
        exit;
    end;
    if Form_GetUrl.GetLastUrl.Enabled=True then//是否有必要判断
    begin
       if ( //判断地址二有效性
          (trim(Form_GetUrl.GetLastUrl.Text)='')
          or (Form_GetUrl.GetLastUrl.Text='请在这里输入参考地址二(完整的)')
          or (isUrl(Form_GetUrl.GetLastUrl.Text)<>true)) then
       begin
        showmessage('抱歉,参考地址二无效');
        Result:=False;
        exit;
       end;
    end;
    if Result=True then
    Form_GetUrl.Explore.Enabled:=True;      
end;{判断输入地址是否合法结束}

{得到Url1与Url2不同的最末整数
Url1:地址1
Url2:地址2
BackN1:地址1最后的不同整数
BN1:BackNum1在Url1中第一个字符的位置
BackN2:地址2最后的不同整数
BN2:BackNum2在Url2中第一个字符的位置
WildcardLen:要改变数串的长度,通配符长度
LUrl,RUrl:数串左、右地址
}
function GetBackNumInfo_Two(Url1,Url2:string;BackN1,BackN2,WildcardLen:PointInt;LUrl,RUrl:PointStr):boolean;
var SN1,SN2:integer;//从末尾开始查找的位置
var BackStrNums1,BackStrNums2:string;
var GoOnGet:boolean;
var BN1,BN2:integer;//不等数串在地址中第一个字符出现的位置
var BasisUrl:string;//得Info的地址(二址之一)
Var BasisBN:integer;//得到R\LUrl的条件之一
begin
SN1:=LastDelimiter('.', Url1);
SN2:=LastDelimiter('.', Url2);

Result:=True;
  repeat//得到不同的最末整数BackNum1,BackNum2
    GoOnGet:=False;
    BackStrNums1:=GetBackStrNums(SN1,Url1,@BN1);
    BackStrNums2:=GetBackStrNums(SN2,Url2,@BN2);
    //Showmessage(inttostr(BN1));exit;
    if(BackStrNums1=BackStrNums2)then
    begin
      GoOnGet:=True;
      if ((BN1)<=1) or ((BN2)<=1)  then
      Begin
        Showmessage('没有找到可供猜测的数据!');
        Result:=False;
        exit;
      end;
      SN1:=BN1-1;
      SN2:=BN2-1;
    end
    else
    begin//转换为整数
      if Length(BackStrNums1)>=length(BackStrNums2) then//得到通配符长
      begin
        WildcardLen^:=length(BackStrNums1);
        BasisUrl:=Url1;//为后面的LUrl、RUrl提供依据
        BasisBN:=BN1;
      end
      else
      begin
        WildcardLen^:=length(BackStrNums2);
        BasisUrl:=Url2;
        BasisBN:=BN2;
      end;
      {
        ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        MidStr主要用于 取出 双字节的字符串,下标以 1 开始,双字节算一个字节
        copy()功能与其类似 ,双字节算一个字节
        copy()无论下标以 0 开始,还是以 1 开始,都是指第一个字符,实际以 1 开始
        ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}
      LUrl^:=copy(BasisUrl,1,BasisBN-1);
      RUrl^:=copy(BasisUrl,BasisBN+WildcardLen^,(length(BasisUrl)-BasisBN-WildcardLen^+1));//数块右边的地址
      {//检测以上转换结果
      showmessage('BasisUrl='+BasisUrl+#13+#10
                  +'BasisBN+WildcardLen^='+inttostr(BasisBN+WildcardLen^)+#13+#10
                  +'length(BasisUrl)='+inttostr(length(BasisUrl))+#13+#10
                  +'WildcardLen^='+inttostr(WildcardLen^)+#13+#10
                  +'Copy(BasisUrl,(BasisBN+WildcardLen^),3)='+Copy(BasisUrl,(BasisBN+WildcardLen^),3)+#13+#10
                  );}
      BackN1^:=strtoint(BackStrNums1);
      BackN2^:=strtoint(BackStrNums2);
      GoOnGet:=False;
    end;
  until GoOnGet=False;//得到不同的最末整数结束
end;{得到Url1与Url2不同的最末整数结束}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -