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

📄 thread_scan_port.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "thread_scan_port.h"
#include "function_1.h"
#include "main.h"
#include "syncobjs.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;//已工作的ip数
extern boolean thread_run;//已工作的ip数
extern int share_thread_no;//share线程数量
extern int share_ip_no;//share工作的位置指示

extern int scan_thread_no;//scan线程数量
extern int scan_port_ip;//scan当前的IP
extern int scan_port_no;//scan当前的端口号
extern TStringList *port_lists;
extern TStringList *main_list;
extern boolean lookup_name;

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

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

void __fastcall Tmy_scan_port::ThreadDone(TObject * Sender)//退出线程
{
  ((Tmy_scan_port*)Sender)->Fscan_port->Free();
  scan_thread_no--;
  main_f->scan_edit2->Text=IntToStr(scan_thread_no+ping_thread_no);
  if ((scan_thread_no==0)&&(ping_thread_no==0))
   {
     main_f->Bar->Position=0;
     main_f->scan_ip->Text="扫描完毕,请查看...";
   }
}

__fastcall Tmy_scan_port::Tmy_scan_port(bool CreateSuspended)//建立线程
        : TThread(CreateSuspended)
{
  Fscan_port=new Tscan_port(main_f);
  OnTerminate =ThreadDone;
  FreeOnTerminate = True;
  Fscan_port->OnScan=scanOnScan;
  scan_thread_no++;
  main_f->scan_edit2->Text=IntToStr(scan_thread_no+ping_thread_no);
}
//---------------------------------------------------------------------------
void __fastcall Tmy_scan_port::Execute()
{
  int no;//

 while (thread_run){
   ping_CriticalSection->Enter();//进入临界状态
    tree_index=scan_port_ip;//取得当前要扫描的IP
    no=scan_port_no;//当前要扫描的端口号_位置! 位于port_lists中
   if ((tree_index >= main_list->Count)||(no>=port_lists->Count))
      {
       ping_CriticalSection->Leave();//析放临界状态
       break;
      }
    main_f->scan_ip->Text=main_list->Strings[tree_index+1]+"   ->: "+get_intstr(port_lists->Strings[no]);//标示出当前IP
    scan_port_no++;
    if (scan_port_no>=port_lists->Count)
     {
       scan_port_no=0;
       scan_port_ip=scan_port_ip+2;
      }
   main_f->Bar->Position=main_f->Bar->Position+1;
   main_f->scan_edit3->Text=IntToStr(StrToInt(main_f->scan_edit3->Text)+1);
   ping_CriticalSection->Leave();//析放临界状态

   Fscan_port->Port=get_intstr(port_lists->Strings[no]);
   Fscan_port->Address=main_list->Strings[tree_index+1];
   port_str=port_lists->Strings[no];////保留当前的端口号
   Fscan_port->scan();
 }
}

void __fastcall Tmy_scan_port::scanOnScan(TObject *Sender, int Error)
{
   if (Error==0) Synchronize(set_str);
}

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


void __fastcall Tmy_scan_port::set_str()
{
  TTreeNode *temp_node;
  TTreeNode *temp_node2;

  main_f->scan_edit4->Text=IntToStr(StrToInt(main_f->scan_edit4->Text)+1);

  temp_node=main_f->Tree_port->Items->GetNode((HTREEITEM)StrToInt(main_list->Strings[tree_index]));
  temp_node->ImageIndex=3;
  temp_node->SelectedIndex=3;
  temp_node2=main_f->Tree_port->Items->AddChild(temp_node,port_str);
  temp_node2->ImageIndex=2;
  temp_node2->SelectedIndex=2;

}

⌨️ 快捷键说明

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