📄 threadgetwebdomains.pas
字号:
unit ThreadGetWebDomains;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,idhttp;
type
TThreadGetWebDomains = class(TThread)
ipaddress:string;
private
procedure GetWebDomains;
procedure GetALLSite(HTMLCode:string);
private
published
procedure Execute; override;
public
end;
implementation
uses
main_unit;
//******************************************************************************
procedure TThreadGetWebDomains.Execute;
begin
try
GetWebDomains;
except
end;
end;
//******************************从ip获取域名×××批量扫描部分
//================== 获取HTML代码及执行查询的过程函数 ===================
procedure TThreadGetWebDomains.GetWebDomains;
const
GetSiteaText1 = 'http://whois.webhosting.info/';
GetSiteaText2 ='?pi=';
GetSiteaText3 ='&ob=SLD&oo=ASC';
SiteNULLText = 'Details'; //没有绑定国际域名的特征码
ValiDateText = 'Enter the security'; //提示输入验证码的特征码
var
//RecordTime : TTime; //记录开始时间
GetSiteaText : String; //将GetSiteaText1..3 组合起来查询
SiteNULLTextPos : integer; //没有绑定国际域名的特征码的位置
ValiDateTextPos : integer; //提示输入验证码的特征码的位置
IdHTTP1:TIDHTTP;
HTMLCode:string;
begin
try
try
IdHTTP1:=TIDHTTP.Create(nil);
//RecordTime:=Now;
//Form_main.btQuery.Enabled:=False;
GetSiteaText:=GetSiteaText1+ipaddress+GetSiteaText2+IntToStr(RecQueryPage)+GetSiteaText3;
HTMLCode:=IdHTTP1.Get(GetSiteaText); //将获取到的代码保存到HTMLCode中
//Form_main.Label24.Caption:='当前页面: '+inttostr(RecQueryPage);
//===================== 判断是否需要输入验证码 ========================
ValiDateTextPos:=Pos(ValiDateText,HTMLCode);
if ValiDateTextPos > 1 then
begin
application.MessageBox('提示:暂时无法查询,请手动输入验证码!到http://whois.webhosting.info查询'+#10#13+
'提交完验证码后再查询!','请输入验证码',48);
Exit;
end;//-------------------------- END -------------------------------
//======================= 判断IP上是否有绑定域名 =====================
SiteNULLTextPos:=Pos(SiteNULLText,HTMLCode);
if SiteNULLTextPos > 1 then
begin
application.MessageBox('提示:该IP地址并没有绑定任何域名!'+#10#13+
'请尝试查询其他IP地址!','提示',32);
Exit;
end;
//-------------------------- END -------------------------------
//=========================== 查询部分 ===============================
//GetSiteSum; //获取完毕HTML代码后,调用获取域名总数的过程
GetALLSite(HTMLCode); //获取完毕HTML代码后,调用分解所有域名的过程
//if RecQueryPage=1 then Form_main.BtUp.Enabled:=False;
//if RecQueryPage>1 then Form_main.BtUp.Enabled:=True;
finally
IdHTTP1.Free;
end;
except
end;
end;
//==================== 分解出HTMLCode中域名字符串 =====================
procedure TThreadGetWebDomains.GetALLSite(HTMLCode:string);
const
GetSitesPosText ='.">'; //起始位置的特征码
GetSiteePosText ='.</a>'; //终止位置的特征码
var
SitesPos,SiteePos,SiteTextLen : integer; //记录以上常量的起始位置和终止位置
begin
try
//先清空list_view
Form_main.ListView_pangzhu.Clear;
//Form_main.ListView_pangzhu.Items.Add(Form_main.Edit_pangzhu_scan.Text);
{当Pos特征码GetSitesPosText后返回的值大于0时循环剪切出GetSitesPosText与
GetSiteePosText之间的域名,当Pos返回值小于0时,退出该循环}
while Pos(GetSitesPosText,HTMLCode) > 0 do
begin
SitesPos:=Pos(GetSitesPosText,HTMLCode)+Length(GetSitesPosText);
SiteePos:=Pos(GetSiteePosText,HTMLCode);
SiteTextLen:=SiteePos - SitesPos;
Form_main.ListView_pangzhu.Items.Add(LowerCase(Copy(HTMLCode,SitesPos,SiteTextLen)));
//将GetSitesPosText替换为空,继续循环往下查找
HTMLCode := StringReplace(HTMLCode, GetSitesPosText, '', [rfIgnoreCase]);
//将GetSiteePosText替换为空,继续循环往下查找
HTMLCode := StringReplace(HTMLCode, GetSiteePosText, '', [rfIgnoreCase]);
end;
//Form_main.Label23.Caption:=Format('本页显示: %d - %d',[1,Form_main.SiteList.Items.Count]);
//Form_main.BtUp.Enabled:=True;
Except //出错,不做处理
End;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -