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

📄 thread_sql_pass.cpp

📁 VC++编写的类似Sniffer的网络数据包监听程序
💻 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 + -