📄 thread_sql_pass.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "thread_sql_pass.h"
#include "main.h"
#include "dict.h"
#include "report.h"
#include "function_1.h"
#pragma package(smart_init)
#include "syncobjs.hpp"
extern int share_thread_no;//用于sql_pass检测线程数量
extern int cur_ip;//检测ip列表的位置指示
extern int scan_port_ip;//密码列表的位置指示
extern int share_ip_no;//用户列表的位置指示
extern TCriticalSection *ping_CriticalSection;//全局临界变量
extern boolean thread_run;//
extern TStringList *main_list;//在本单元用于保存要检测的IP列表
extern TStringList *port_lists;//在本单元用于保存要检测的密码列表
extern boolean report_show;//指示report_f窗体是否显示
extern int pass_no;//生成内定密码的位置
extern boolean const_pass;//是否使用内定密码
//---------------------------------------------------------------------------
//由于不停响应事件而再次连接的工作方式,因而在运行一段时间后内存栈会很多,
//故达到一定程度要释放,即退出!
void __fastcall Tsql_pass::ThreadDone_pass(TObject * Sender)
{
fado_con->Free();
share_thread_no--; //线程总数减一
report_f->Edit14->Text=IntToStr(share_thread_no);
main_f->Edit25->Text=IntToStr(share_thread_no);
// if (run_count>=50)
main_f->thread_time->Enabled=true;//激活外部时钟,
if (share_thread_no==0)
{
main_f->Bar->Position=0;
}
}
__fastcall Tsql_pass::Tsql_pass(bool CreateSuspended): TThread(CreateSuspended)
{
OnTerminate =ThreadDone_pass;
fado_con=new TADOConnection(main_f);
fado_con->AfterConnect=FAfterConnect;
fado_con->OnConnectComplete=(TConnectErrorEvent)&adoConnectComplete;
fado_con->ConnectionTimeout=StrToInt(main_f->Edit28->Text);
fado_con->LoginPrompt=false;fado_con->KeepConnection=false;
ip_no=0;user_no=0;Fpass_no=0;run_count=0;
state="";
FreeOnTerminate = True;
share_thread_no++;//线程加1
report_f->Edit14->Text=IntToStr(share_thread_no);
main_f->Edit25->Text=IntToStr(share_thread_no);
}
void __fastcall Tsql_pass::first_run()
{
AnsiString temp_str="";
run_count++;//记录运行的次数
if (run_count>=50) return;
Application->ProcessMessages();
ping_CriticalSection->Enter();//进入临界状态
Fpass_no=scan_port_ip;//用于指示密码位置
user_no=share_ip_no; //用户位置
ip_no=cur_ip;
if (ip_no>=main_list->Count)
{
ping_CriticalSection->Leave();//析放临界状态
return;
}
if (const_pass)//使用内定密码
temp_str=NameToPass(dict_f->user_list->Lines->Strings[user_no],pass_no);
if (temp_str==""){
scan_port_ip++;
if (scan_port_ip>=port_lists->Count)
{
scan_port_ip=0;
share_ip_no++;//用户列表位置加一
pass_no=0;
if (share_ip_no>=dict_f->user_list->Lines->Count)
{
share_ip_no=0;
cur_ip++;
main_f->Edit20->Text=main_list->Strings[ip_no];//示显示检测的IP
}
}
}
ping_CriticalSection->Leave();//析放临界状态
if (!thread_run) return;
fado_con->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=True;Data Source="+main_list->Strings[ip_no];
if (temp_str=="")//不用内定密码?
temp_pass=port_lists->Strings[Fpass_no];
else
temp_pass=temp_str;
fado_con->Open(dict_f->user_list->Lines->Strings[user_no],temp_pass);
}
//---------------------------------------------------------------------------
void __fastcall Tsql_pass::Execute()
{
try
{
CoInitialize(NULL);//在线程中一定要初始化
first_run();
}
catch(...)
{ CoUninitialize();//在线程中一定要初始化
}
}
//---------------------------------------------------------------------------
void __fastcall Tsql_pass::set_list()
{
if (state=="")
{
//若成功则跳到下一个用户
if (user_no==share_ip_no)
{
share_ip_no++;
scan_port_ip=0;
}
report_f->Edit1->Text=IntToStr(StrToInt(report_f->Edit1->Text)+1);
main_f->Edit22->Text=IntToStr(StrToInt(main_f->Edit22->Text)+1);
main_f->Edit3->Text=port_lists->Strings[Fpass_no];//密码
if (report_show)//若不弹出检测窗则不写事件,只写成功的
report_f->all_info->Lines->Add("检测:"+main_list->Strings[ip_no]+"->用户:"+
dict_f->user_list->Lines->Strings[user_no]+"->密码:"+temp_pass+"-------------[成功]");
report_f->ok_info->Lines->Add("主机:["+main_list->Strings[ip_no]+"] 用户:["+
dict_f->user_list->Lines->Strings[user_no]+"] 密码:["+temp_pass+"]");
} else
if (report_show)//若不弹出检测窗则不写事件,只写成功的
{
report_f->all_info->Lines->Add("检测:"+main_list->Strings[ip_no]+"->用户:"+
dict_f->user_list->Lines->Strings[user_no]+"->密码:"+temp_pass+"-------------[失败:"+state+"]");
if (report_f->all_info->Lines->Count>500)
{
report_f->all_info->Lines->Clear();
}
}
report_f->Edit9->Text=IntToStr(StrToInt(report_f->Edit9->Text)+1);
}
void __fastcall Tsql_pass::FAfterConnect(TObject *Sender)
{
state="";
Synchronize(set_list);//找到密码
fado_con->Close();
// first_run();
}
//---------------------------------------------------------------------------
void __fastcall Tsql_pass::adoConnectComplete(TADOConnection *Connection, const Error *Error,
TEventStatus &EventStatus)
{
state=Error->_scw_Get_Description();
Synchronize(set_list);//写错误信息
// first_run();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -