📄 unit_geturl.~pas
字号:
{得到单址猜测的起始数}
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 + -