📄 pop3_detect.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 + -