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

📄 unit_geturl.~pas

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

{得到单址猜测的起始数}
function GetDoNum_Alone(MaxN,ChangeNum:integer;StartN,EndN:PointInt):boolean;
begin
  if ChangeNum<MaxN/2 then
  begin
    StartN^:=0;
    EndN^:=MaxN-1;
  end
  else
  begin
    StartN^:=ChangeNum-(MaxN div 2);
    EndN^:=ChangeNum+(MaxN div 2)-1;
  end;
  result:=True;
end; {得到单址猜测的起始数结束}

{得到单址猜测的起始数结束}

{得到对比猜测的起始数
MaxN:最多猜测结果
BackN1,BackN2:两个地址的最未不同数
StartN:循环开始数
EndN:循环结束数}
function GetDoNum_Two(MaxN,BackN1,BackN2:integer;StartN,EndN:PointInt):boolean;
var BigBackN,LitBackN:integer;
begin
  if BackN1>=BackN2 then//区别两个数的大小
  begin
    BigBackN:=BackN1;
    LitBackN:=BackN2;
  end
  else
  begin
    BigBackN:=BackN2;
    LitBackN:=BackN1;
  end;
  //得到起始数
//依据:EndN^-StartN^=MaxN-1
  if MaxN<=(BigBackN-LitBackN+1) then//即: 0000|**00|0000
  begin
    StartN^:=LitBackN;
    EndN^:=LitBackN+MaxN-1;
  end
  else if MaxN<BigBackN then          //即: 00**|****|0000
  begin
    StartN^:=BigBackN-MaxN+1;
    EndN^:=BigBackN;
  end
  else                                // 即: ****|****|*****
  begin
    StartN^:=0;
    EndN^:=MaxN-1;
  end;
  Result:=True;
end;{得到对比猜测的起始数结束}

{循环得到猜测地址,得到下载公式
StartN:开始数
EndN:结束数
LeftUrl:数左地址
RightUrl:数右地址
WildcardLen:通配符长度,即要替换的串长
}
Function BuildUrl(StartN,EndN:integer;LeftUrl,RightUrl:string;WildcardLen:integer):boolean;
var i_Url,i_Add0,i_FM:integer;
var GuessStrNum:string;
var GuessUrl:String;
var Formula:String;
var WildcardNum:integer;//通配符个数
var WdcdIncept:string;//通配数起始
var FormulaShowStr:string;
begin
  Form_GetUrl.UrlList.Items.Clear;//首先清空地址列表
  for i_Url:=StartN to EndN do
  begin
  //对数块补零开始
    GuessStrNum:=inttostr(i_Url);
    if Form_GetUrl.ReMove0.Checked<>True then//如果没选中移去多余零
    //在数串前面补零,以最长数串为准
    if Length(GuessStrNum)<WildcardLen then
    Begin
    i_Add0:=WildcardLen-Length(GuessStrNum);
    for i_Add0:=i_Add0 downto 1 do
      GuessStrNum:='0'+GuessStrNum;
    end;//对数块补零结束

    GuessUrl:=LeftUrl+GuessStrNum+RightUrl;
    Form_GetUrl.UrlList.Items.Add(GuessUrl);//添加到列表
  end;

  {得到公式开始}
  if Form_GetUrl.ReMove0.Checked<>True then//若要使用通配符
  begin
    if WildcardLen>=Length(inttostr(EndN)) then
      WildcardNum:=WildcardLen
    else
      WildcardNum:=Length(inttostr(EndN));
    WdcdIncept:='从:  1  到:  9';
  end
  else//若不用
  begin
    WildcardNum:=1;
    WdcdIncept:='从:  '+inttostr(StartN)+'  到:  '+inttostr(EndN);
  end;
  //生成公式
  Formula:=LeftUrl;
  for i_FM:=WildcardNum downto 1 do Formula:=Formula+'(*)';
  Formula:=Formula+RightUrl;

  //显示公式
  Form_GetUrl.FormulaShow.Lines.Clear;
  FormulaShowStr:='针对此次猜测结果----'+#13+#10+#13+#10;
  //迅雷五公式
  FormulaShowStr:=FormulaShowStr+'迅雷5批量下载公式:'+#13+#10;
  FormulaShowStr:=FormulaShowStr+Formula+#13+#10;
  FormulaShowStr:=FormulaShowStr+WdcdIncept;
  FormulaShowStr:=FormulaShowStr+'    通配符长度:  1';
  FormulaShowStr:=FormulaShowStr+#13+#10+#13+#10;
  {//网际快车公式
  FormulaShowStr:=FormulaShowStr+'网际快车批量下载公式:'+#13+#10;
  FormulaShowStr:=FormulaShowStr+Formula+#13+#10;
  FormulaShowStr:=FormulaShowStr+WdcdIncept;
  FormulaShowStr:=FormulaShowStr+'    通配符长度:  1'; }

  Form_GetUrl.FormulaShow.Lines.Add(FormulaShowStr);
  {得到公式结束}
  
  Result:=True;
end;{循环得到猜测地址结束}

procedure TForm_GetUrl.FormCreate(Sender: TObject);
begin
//结果操作无效
  ExploreTheOne.Enabled:=False;
  ShowUrlWin.Enabled:=False;
  Button1.Enabled:=False;
  DelGUrl.Enabled:=False;
  Explore.Enabled:=False;

    //初始化数组
  //如果没有下面一行代码,那么数组的值为随机数
  FillChar(UrlTexList,SizeOf(UrlTexList),0);
  StatusBar1.Panels[1].Text:='URL KING----超级偷链工具,使用愉快 ^_^';
  StatusBar1.Panels[0].Text:='我猜,我猜,我猜猜!!';
//地址二无效
  if self.GuessAlone.Checked=True then
    Self.GetLastUrl.Enabled:=False
  else
    Self.GetLastUrl.Enabled:=True;
end;

procedure TForm_GetUrl.ExploreClick(Sender: TObject);
var n:integer;
var CostTime:integer;//自动删除所需时间
var CostTimeStr:string;
{列表中若未选中项,则开始项的index号为  0  }
var ChangeN:integer;//用于调整列表处理顺序
begin

//首先检查物理连接是否正常
if InternetCheckConnection('http://www.baidu.com/', 1, 0)<>True then
begin
    Showmessage('无法联接到 Internet,请检查您的网络设置');
    exit;
end;

//估计执行时间
  CostTime:=UrlList.Items.Count div 3; //大约每三个一秒钟
  CostTimeStr:=inttostr(CostTime)+'秒';
  if CostTime>60 then
  begin
    CostTime:=CostTime div 60;
    CostTimeStr:=inttostr(CostTime)+'分钟';
  end;
  if Application.MessageBox(PChar('在正常情况下,此操作大概需要: '
                                  +CostTimeStr+#13+#10+#13+#10
                                  +'此期间窗口将最小化,确定执行吗?'),'提示信息',MB_OKCANCEL)<>1
  then exit;
  {
wsMaximized: 极大化
wsMinimized: 极小化
wsNormal:    还原
}
WindowState :=wsMinimized;//窗口最小化
application.Hint:='正在探测..!';


UrlList.ItemIndex:=0;
StatusBar1.Panels[1].Text:='';
StatusBar1.Panels[1].Text:='探测时间取决于网速与猜测数量,请耐心等待';
form_GetURl.Cursor:=crHourGlass;
  n:=UrlList.Items.Count;
  ChangeN:=0;
  if n>0 then
  begin
    while n>0 do
    begin
      if CheckUrl(UrlList.Items.Strings[UrlList.ItemIndex+ChangeN])<>True then
      begin
        //Showmessage('删除:'+UrlList.Items.Strings[UrlList.ItemIndex+ChangeN]+#13+#10+'序号:'+inttostr(UrlList.ItemIndex+ChangeN));
        UrlList.Items.Delete(UrlList.ItemIndex+ChangeN);
        ChangeN:=ChangeN-1;
      end;
      ChangeN:=ChangeN+1;
      n:=n-1;
    end;
    WindowState :=wsNormal;//窗口还原
    StatusBar1.Panels[1].Text:='自动删除无效地址完成!';
    AntoDelFinished:=true;//完成后在状态栏显示提示的依据
    Application.MessageBox('删除无效地址完成!','提示信息',MB_OK);

  end
  else
  showmessage('没有找到要探测的地址!');

  WindowState :=wsNormal;//窗口还原
end;

procedure TForm_GetUrl.GetFistUrlExit(Sender: TObject);
begin
       if self.GetFistUrl.Text='' then
      self.GetFistUrl.Text:='请在这里输入参考地址一(完整的)';
end;

procedure TForm_GetUrl.GetLastUrlExit(Sender: TObject);
begin
      if self.GetLastUrl.Text='' then
      self.GetLastUrl.Text:='请在这里输入参考地址二(完整的)';
end;

procedure TForm_GetUrl.SBGuessStartClick(Sender: TObject);
var GoOnGet:boolean;
var FirstUrl,LastUrl:string;
var BackN1,BackN2:integer;
var GuessUrl:string;
var GuessLUrl,GuessRUrl,GuessStrNum:string;
var i:integer;
Var WildcardLen:integer;//要改变的数块长度,即通配符长度
var MaxGsUrl:integer;
var StartNum,EndNum:integer;
var SN:integer;
var BN:integer;
var ChangeStrNum:string;//单址猜测中要改变的数串
begin

//首先检查物理连接是否正常
if InternetCheckConnection('http://www.baidu.com/', 1, 0)<>True then
begin
    Showmessage('无法联接到 Internet,请检查您的网络设置');
    exit;
end;

if JerqueUrl()<>True then exit;//判断地址有效性

//结果控制
Case RdGp_MaxGsUrl.ItemIndex of
  0 : MaxGsUrl:=100;
  1 : MaxGsUrl:=500;
  2 : MaxGsUrl:=1000;
  3 : MaxGsUrl:=2000;
  4 : MaxGsUrl:=5000;
  5 : MaxGsUrl:=10000;
end;//结果控制

FirstUrl:=self.GetFistUrl.Text;
LastUrl:= self.GetLastUrl.Text;

if self.GuessBalance.Checked=true then//如果是对比猜测
begin

{得到双址最末整数信息开始}
//function GetBackNumInfo_Two(Url1,Url2:string;BackN1,BackN2,WildcardLen:PointInt;LUrl,RUrl:PointStr):boolean;
if GetBackNumInfo_Two(FirstUrl,LastUrl,@BackN1,@BackN2,@WildcardLen,@GuessLUrl,@GuessRUrl)<>True then exit;
//检验正确性
{Showmessage('FirstUrl='+FirstUrl
            +#13+#10+'LastUrl='+LastUrl
            +#13+#10+'BackN1='+inttostr(BackN1)
            +#13+#10+'BackN2='+inttostr(BackN2)
            +#13+#10+'WildcardLen='+inttostr(WildcardLen)
            +#13+#10+'GuessLUrl='+GuessLUrl
            +#13+#10+'GuessRUrl='+GuessRUrl
            +#13+#10); }
{得到双址最末整数信息结束}

{得到双址循环数开始}
if GetDoNum_Two(MaxGsUrl,BackN1,BackN2,@StartNum,@EndNum)<>True then exit;
{//检验双址循环数正确性
Showmessage('MaxGsUrl='+inttostr(MaxGsUrl)
            +#13+#10+'BackN1='+inttostr(BackN1)
            +#13+#10+'BackN2='+inttostr(BackN2)
            +#13+#10+'StartNum='+inttostr(StartNum)
            +#13+#10+'EndNum='+inttostr(EndNum)
            +#13+#10);}
{得到双址循环数结束}

end;//如果是对比猜测结束

if self.GuessAlone.Checked=true then//如果是单址猜测
begin

//function GetBackStrNums(StartN:integer;Str:String;BN:PointInt):String;
SN:=LastDelimiter('.', FirstUrl);//从扩展名开始找数块
ChangeStrNum:=GetBackStrNums(SN,FirstUrl,@BN);
//showmessage(ChangeStrNum);
//exit;
WildcardLen:=length(ChangeStrNum);

//copy即完全复制,双字节算二个字节,但是leftstr\rightstr\midstr中双字节算一个字节
GuessLUrl:=copy(FirstUrl,1,BN-1);
GuessRUrl:=copy(FirstUrl,BN+WildcardLen,(length(FirstUrl)-BN-WildcardLen+1));//数块右边的地址

//function GetDoNum_Alone(MaxN,ChangeNum:integer;StartN,EndN:PointInt):boolean;
if GetDoNum_Alone(MaxGsUrl,strtoint(ChangeStrNum),@StartNum,@EndNum)<>True then exit;

end;//如果是单址猜测结束


{得出猜测结果}
//Function BuildUrl(StartN,EndN:integer;LeftUrl,RightUrl:string;WildcardLen:integer):boolean;
if BuildUrl(StartNum,EndNum,GuessLUrl,GuessRUrl,WildcardLen)<>true then exit;
{得出猜测结果结束}

StatusBar1.Panels[1].Text:='猜测完成 !';
//结果控制
  ExploreTheOne.Enabled:=true;
  ShowUrlWin.Enabled:=true;
  Button1.Enabled:=true;
  DelGUrl.Enabled:=true;
  Explore.Enabled:=true;
  FocusControl(ExploreTheOne);
end;

procedure TForm_GetUrl.DelGUrlClick(Sender: TObject);
var n:integer;
var strvalue:string;
begin
StatusBar1.Panels[1].Text:='';
  with self.UrlList do
  begin
    n:=Self.UrlList.SelCount;
    if n>0 then
    begin
      if (AntoDelFinished=true) and (Application.MessageBox('经探测该地址有效,一定要删除它(们)吗?','提示信息',MB_OKCANCEL)<>1) then
        exit;
      if (AntoDelFinished<>true) and (Application.MessageBox('确定删除它(们)吗?','提示信息',MB_OKCANCEL)<>1) then
        exit;

      strvalue:=Items.Strings[ItemIndex];
      while n>0 do
      begin
        //showmessage(strvalue+'  '+strv);
        Items.Delete(self.UrlList.ItemIndex);
        n:=n-1;
      end;
    end
    else
    showmessage('没有要删除的地址');
  end;
end;

//手动探测过程:
procedure TForm_GetUrl.ExploreTheOneClick(Sender: TObject);
var n:integer;
var ShowMesg:boolean;
var ChangeN:integer;//用于调整列表处理顺序
begin

⌨️ 快捷键说明

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