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

📄 function_1.cpp

📁 VC++编写的类似Sniffer的网络数据包监听程序
💻 CPP
字号:
#include <vcl.h>
#include "main.h"
#include "thread_ping.h"
#include "thread_share.h"
#include "thread_scan_ping.h"
#include "thread_scan_port.h"
#include "function_1.h"
#include "thread_sql_ping.h"
#include "thread_sql_pass.h"
#include "share_pass.h"
#include "pop3_scan.h"
#include "pop3_detect.h"
#include "report.h"


//全局变量
unsigned long ping_ip_start;
unsigned long ping_ip_stop;//开始,结束的ip
int cur_ip;//已工作的ip数
int ping_thread_no=0;//ping线程数量,
int share_thread_no=0;//share线程数量
int share_ip_no=0;//share工作的位置指示
boolean thread_run=false;//中止线程
boolean only_ping=true;
boolean lookup_name=false;//查找名称
boolean lookup_user=true;//查找用户信息
boolean lookup_system=false;//查找系统信息
boolean lookup_Services=false;//查找系统信息
boolean do_select=false;//是否只对选择的工作
boolean report_show=false;//指示report_f窗体是否显示
int scan_thread_no=0;//scan线程数量
int scan_port_ip=0;//scan当前的IP
int scan_port_no=0;//scan当前的端口号
TStringList * main_list;//可用的IP地址列表(内容为:ItemsId与IP),
TStringList * port_lists;//可用端口列表
int thread_type=0;//指定当前运的线程是啥类型
boolean const_pass=true;//是否使用内定密码
int pass_no=0;//生成内定密码的位置

//------------------------------------------------------------------------
void creat_ping(int number)
{
 Tmy_thread1 *bubble;
 ping_thread_no=0;//ping线程数量
 main_f->Edit10->Text="0";
 share_thread_no=0;
 for (int i=0;i<number;i++)
 {
  TPing *temp_ping=new TPing(main_f);
//  temp_ping->OnEchoReply=Form1->Ping1->OnEchoReply;
  temp_ping->Tag=100;
  temp_ping->Timeout=StrToInt(main_f->Edit12->Text);
  bubble = new Tmy_thread1(temp_ping,false);
 }
}
//------------------------------------------------------------------------

void creat_scan_ping(int number)
{
 Tmy_scan_ping *bubble;
  ping_thread_no=0;//ping线程数量
  cur_ip=0;
  scan_port_ip=0;
  scan_port_no=0;
  scan_thread_no=0;

  main_list->Clear();//清空先前的数据
  get_port_list(); //获取数据列表

  main_f->Bar->Max=(ping_ip_stop-ping_ip_start)*port_lists->Count;
  if (main_f->Bar->Max==0) main_f->Bar->Max=ping_ip_stop-ping_ip_start;
 for (int i=0;i<number;i++)
 {
   bubble = new Tmy_scan_ping(false);
 }
}

//------------------------------------------------------------------------
void creat_scan_port(int number)
{
 int i;
 Tmy_scan_port *bubble;
 if (port_lists->Count<=0) return;

 for (i=0;i<number;i++)
   if (scan_thread_no<StrToInt(main_f->Edit26->Text)&&(scan_port_ip<main_list->Count))
    {
     bubble = new Tmy_scan_port(false);
    }
}
//------------------------------------------------------------------------

void creat_sql_ping(int number)
{
 int i;
 Tmy_sql_ping *bubble;
  ping_thread_no=0;//ping线程数量
  cur_ip=0;

 for (i=0;i<number;i++)
  {
   bubble = new Tmy_sql_ping(false);
  }
}

//------------------------------------------------------------------------
void creat_share(void)
{
 Thread_share *bubble;
 if ((share_thread_no<StrToInt(main_f->Edit15->Text))&&
    (share_ip_no<main_f->tree_ping->Items->Count))
  {
   bubble = new Thread_share(false);
  }
}
//------------------------------------------------------------------------

//找共享密码线程
void creat_share_pass(void)
{
  tshare_pass *bubble;
  bubble = new tshare_pass(false);
}
//------------------------------------------------------------------------

void creat_sql_pass(void)//检测SQL服务器
{
  Tsql_pass *bubble;
  bubble = new Tsql_pass(false);
}
//------------------------------------------------------------------------

Boolean check_ip(AnsiString&str)
 {
  if (inet_addr(str.c_str())==-1)
   {
     ShowMessage("非法的IP地址!");
     return false;
   } else return true;

 }
//------------------------------------------------------------------------
void creat_pop3_scan(int number)//检测信箱主机
{ int i;
  TPop3_scan *bubble;
 for (i=0;i<number;i++)
  {
    if (ping_thread_no<StrToInt(main_f->Edit45->Text))
      {
      bubble = new TPop3_scan(false);
      } else break;
  }
}
//------------------------------------------------------------------------
void creat_pop3_detect(void)//检测信箱
{ int i;
  TPop3_Detect *bubble;

 for (i=0;i<StrToInt(main_f->Edit47->Text);i++)
  {
    if (share_thread_no<StrToInt(main_f->Edit47->Text)){
      bubble = new TPop3_Detect(false);
      } else break;
  }
}
//------------------------------------------------------------------------
//将XXX.XXX.XXX.XXX格式的字符串分解成IP数字
unsigned long strtoip(AnsiString&str)
{
  unsigned long f_ip=inet_addr(str.c_str());
  AnsiString temp=str;
  f_ip=StrToInt(temp.SubString(1,temp.AnsiPos(".")-1))*256*256*256;
  temp.Delete(1,temp.AnsiPos("."));
  f_ip=f_ip+StrToInt(temp.SubString(1,temp.AnsiPos(".")-1))*256*256;
  temp.Delete(1,temp.AnsiPos("."));
  f_ip=f_ip+StrToInt(temp.SubString(1,temp.AnsiPos(".")-1))*256;
  temp.Delete(1,temp.AnsiPos("."));
  f_ip=f_ip+StrToInt(temp);
  return f_ip;
}
//------------------------------------------------------------------------
AnsiString iptostr(unsigned long ip)
{
  AnsiString temp="";
  unsigned long i=ip;
  int f=i/(256*256*256);
  if ((f<0)||(f>255)) { ShowMessage("IP转换错误!");return "";}
  temp=IntToStr(f)+".";
  i=i-f*(256*256*256);
  f=i/(256*256);
  if ((f<0)||(f>255)) { ShowMessage("IP转换错误!");return "";}
  temp=temp+IntToStr(f)+".";
  i=i-f*(256*256);
  f=i/256;
  if ((f<0)||(f>255)) { ShowMessage("IP转换错误!");return "";}
  temp=temp+IntToStr(f)+".";
  i=i-f*256;
  if ((i<0)||(i>255)) { ShowMessage("IP转换错误!");return "";}
  temp=temp+IntToStr(i);

  return temp;
}

//------------------------------------------------------------------------
AnsiString gethostbyip(AnsiString &ip)
{
    struct sockaddr_in addr;
    struct hostent *host;

   addr.sin_addr.s_addr=inet_addr(ip.c_str());

   host=gethostbyaddr((char*)&addr.sin_addr,4,AF_INET);
   if (host==NULL)
    return("[不知]");
    else
    return(host->h_name);
}

//------------------------------------------------------------------------
//取数字部分
AnsiString get_intstr(AnsiString&str)
{ int i=1;
  while (i<=str.Length())
   { if ((str[i]>='0')&&(str[i]<='9'))
       i++;
      else break;
   }
  return (str.SetLength(i-1));
}

//------------------------------------------------------------------------
void get_port_list(void)
{
    int i=0;
    int start=StrToInt(main_f->port_start->Text);
    int stop=StrToInt(main_f->port_stop->Text);
    int temp;
    AnsiString str;
    if (start>stop){temp=start;start=stop;stop=temp;}

    port_lists->Clear();
    if (main_f->port_option->Text=="")
      {
          for (i=0;i<main_f->port_list->Items->Count;i++)
             {
             if (main_f->port_list->Checked[i])
               port_lists->Add(main_f->port_list->Items->Strings[i]);
             }
      } else
    switch (main_f->port_option->Text[1])
     {case '1': port_lists->AddStrings(main_f->port_list->Items);
                break;
      case '2':
             for (i=0;i<main_f->port_list->Items->Count;i++)
               {
                if (main_f->port_list->Checked[i])
                  port_lists->Add(main_f->port_list->Items->Strings[i]);
               }
                break;
      case '3':
               while(i<main_f->port_list->Items->Count)
                { temp=StrToInt(get_intstr(main_f->port_list->Items->Strings[i]));
                  if ((temp>=start)&&(temp<=stop))
                    port_lists->Add(main_f->port_list->Items->Strings[i]);
                   i++;
                }
                break;
      case '4':
               if (start>stop){temp=start;start=stop;stop=temp;}
               for (i=start;i<=stop;i++)
                {
                 port_lists->Add(IntToStr(i));
                }
                i=0;
               while(i<main_f->port_list->Items->Count)
                {
                 str=Trim(get_intstr(main_f->port_list->Items->Strings[i]));
                 start=StrToInt(str);
                 if (start>stop) break;
                 temp=port_lists->IndexOf(str);
                 if (temp!=-1)
                    port_lists->Strings[temp]=main_f->port_list->Items->Strings[i];
                 i++;
                }
                break;
     default :
             for (i=0;i<main_f->port_list->Items->Count;i++)
               {
                if (main_f->port_list->Checked[i])
                  port_lists->Add(main_f->port_list->Items->Strings[i]);
               }

     }
}

//------------------------------------------------------------------------
void init_main_f(void)//初始化窗体
{
 AnsiString str=ChangeFileExt(ParamStr(0), ".INI");
 TComponent *com;
 if (FileExists(str))
  {
   TStringList *list=new TStringList();
   list->LoadFromFile(str);
   int i;
   for (i=0;i<list->Count-1;i++)
    {
     str=list->Strings[i];
     com=main_f->FindComponent(str.SetLength(str.Pos("=")-1));
     str=list->Strings[i];
     if (com!=NULL)
       {
        if ((AnsiString)com->ClassName()=="TEdit") ((TEdit*)com)->Text=str.Delete(1,str.Pos("="));
         else
        if ((AnsiString)com->ClassName()=="TMemo") ((TMemo*)com)->Lines->CommaText=str.Delete(1,str.Pos("="));
         else
        if ((AnsiString)com->ClassName()=="TCheckBox") ((TCheckBox*)com)->Checked=(str.Delete(1,str.Pos("="))=="true");
       }
    }
   list->Free();
  }
}
//------------------------------------------------------------------------
void save_main_f(void)//保存窗体的参数
{
 AnsiString str;
 TComponent *com;
 int i;

 TStringList *list=new TStringList();
   for (i=0;i<main_f->ComponentCount-1;i++)
    {
      str="";
     if ((AnsiString)main_f->Components[i]->ClassName()=="TEdit")
       {
        if (!((TEdit*)main_f->Components[i])->ReadOnly)
         str=main_f->Components[i]->Name+"="+((TEdit*)main_f->Components[i])->Text;
       }
       else
     if ((AnsiString)main_f->Components[i]->ClassName()=="TMemo")
      {
       if (!((TMemo*)main_f->Components[i])->ReadOnly)
         str=main_f->Components[i]->Name+"="+((TMemo*)main_f->Components[i])->Lines->CommaText;
      } else
     if ((AnsiString)main_f->Components[i]->ClassName()=="TCheckBox")
       if (((TCheckBox*)main_f->Components[i])->Checked)
         str=main_f->Components[i]->Name+"=true";
         else str=main_f->Components[i]->Name+"=false";
     if (str!="") list->Add(str);
    }
  list->SaveToFile(ChangeFileExt(ParamStr(0), ".INI"));
  list->Free();
}

//接常用的名称与密码的关系生成密码
  AnsiString ABCToCBA(AnsiString&str)
   { AnsiString temp_str=str;
     int i,len=str.Length()+1;
     for (i=1;i<len;i++)
      {temp_str[i]=str[len-i];
      }
     return(temp_str);
   }
AnsiString NameToPass(AnsiString&str,int &i)
{
 AnsiString temp_str=ABCToCBA(str);//取反
  i++;
  switch (i)
  {
  case 1: return(str);// 与名称相同
  case 2: return(temp_str);//名称相反
  case 3: return(str+temp_str);//名称+相反
  case 4: return(str+str);//名称+名称
  case 5: return(str+123);//名称+123
  case 6: return(str+12345);//名称+123345
  case 7: return("123");
  case 8: return("1234");
  case 9: return("12345");
  case 10: return("123456");
  case 11: return("1234567");
  case 12: return("12345678");
  case 13: return("8888");
  case 14: return("88888888");
  case 15: temp_str=str;temp_str[1]=UpCase(temp_str[1]);
           return(UpperCase(str+temp_str));//名称第一个大写
  case 16: return("1111");
  case 17: return("11111");
  case 18: return("111111");
  case 19: return("11111111");
  case 20: return("0000");
  case 21: return("00000000");
  case 22: return("aaaa");
  case 23: return("aaaaaaaa");
  default: return("");
  }
}
//test用,看人们一般用什么的密码
AnsiString NameToPass3(AnsiString&str,int &i)
{
 AnsiString test_str=" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*(){}[],.?/;+-";
 i++;
 if (i>test_str.Length())
  return("");
  else {
   AnsiString temp_str=test_str[i];
   return (temp_str+temp_str+temp_str+temp_str);
  }
}

//test用,看人们一般用什么的密码
AnsiString NameToPass2(AnsiString&str,int &i)
{
 AnsiString test_str=" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*(){}[],.?/;+-";
 i++;

 if (i>test_str.Length())
  return("");
  else {
   AnsiString temp_str=test_str[i];
   return (temp_str+temp_str+temp_str+temp_str+temp_str+temp_str+temp_str+temp_str);
  }
}

⌨️ 快捷键说明

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