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

📄 scanipunit.~pas

📁 DELPHI 下远程控制源码
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit ScanIPUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, StdCtrls, Mask, Spin, Buttons,
  Gauges,StrUtils,SyncObjs, IdBaseComponent, IdComponent, IdIPWatch, Menus,
  ImgList;

type
  TScanIPFm = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Splitter1: TSplitter;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    Panel4: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    SpinButton1: TSpinButton;
    Panel5: TPanel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    SpinButton2: TSpinButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    Gauge2: TGauge;
    Gauge3: TGauge;
    RadioGroup1: TRadioGroup;
    Label3: TLabel;
    Edit9: TEdit;
    RadioGroup2: TRadioGroup;
    Panel6: TPanel;
    Label4: TLabel;
    Edit10: TEdit;
    Label5: TLabel;
    Edit11: TEdit;
    Label6: TLabel;
    Edit12: TEdit;
    Gauge1: TGauge;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    Panel7: TPanel;
    TreeView1: TTreeView;
    Panel8: TPanel;
    Timer1: TTimer;
    Label7: TLabel;
    Label8: TLabel;
    Gauge4: TGauge;
    SpinEdit1: TSpinEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Panel9: TPanel;
    ListView1: TListView;
    Panel22: TPanel;
    Panel10: TPanel;
    Panel11: TPanel;
    SpeedButton9: TSpeedButton;
    Panel12: TPanel;
    SpeedButton11: TSpeedButton;
    SpeedButton12: TSpeedButton;
    SpeedButton13: TSpeedButton;
    SpeedButton15: TSpeedButton;
    SaveDialog1: TSaveDialog;
    ComboBox1: TComboBox;
    Label12: TLabel;
    IdIPWatch1: TIdIPWatch;
    PopupMenu1: TPopupMenu;
    PopupMenu2: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    ImageList1: TImageList;
    Gauge5: TGauge;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure RadioGroup1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Edit2KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit3KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit5KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit6KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit7KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit8KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpinButton1UpClick(Sender: TObject);
    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Edit5MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpinButton1DownClick(Sender: TObject);
    procedure SpinButton2DownClick(Sender: TObject);
    procedure SpinButton2UpClick(Sender: TObject);
    procedure Edit10KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SpeedButton15Click(Sender: TObject);
    procedure SpeedButton11Click(Sender: TObject);
    procedure ListView1Click(Sender: TObject);
    procedure SpeedButton13Click(Sender: TObject);
    procedure RadioGroup2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure SpeedButton12Click(Sender: TObject);
  private
    { Private declarations }
  public
     FromA_IP,ToA_IP : Byte;
     FromB_IP,ToB_IP : Byte;
     FromC_IP,ToC_IP : Byte;
     FromD_IP,ToD_IP : Byte;
     procedure FillLocalIP;
     procedure GetTheScanIP;
     procedure PingPorcess;
     Procedure ScanPortPorcess;
     procedure SingleHostScan;
     procedure SingleHostScan2;
     procedure MultiHostScan;   
  end;
var
  ScanIPFm     : TScanIPFm;
  OldEditText  : String;
  FromEdit     : TEdit;
  ToEdit       : TEdit;   
  LetPingSingle: TCriticalSection;
  LetScanSingle: TCriticalSection;
  SdPingCount  : Integer;
  SdScanCount  : integer;
  MultiPingCount:integer;
  MultiScanCount:integer; 
implementation
uses
   PingThreadUnit,ScanPortThreadUnit,ScanHostPortThreadUnit, UserInfo;
{$R *.dfm}
procedure TScanIPFm.GetTheScanIP;
begin
   FromA_IP:=StrToInt(Edit1.Text) ; ToA_IP:= StrToInt(Edit5.Text);
   FromB_IP:=StrToInt(Edit2.Text) ; ToB_IP:= StrToInt(Edit6.Text);
   FromC_IP:=StrToInt(Edit3.Text) ; ToC_IP:= StrToInt(Edit7.Text);
   FromD_IP:=StrToInt(Edit4.Text) ; ToD_IP:= StrToInt(Edit8.Text);
end;
procedure TScanIPFm.FillLocalIP;
var
   i:integer;
   TheIndex:integer;
   TheIPStr:string;
begin
 try
   TheIPStr:=ComboBox1.Text;
   For i:=1 to Length(TheIPStr) do
   begin
       if TheIPStr[i]='.' then
       begin
          TheIndex:=i;
          Edit1.Text:=StrUtils.leftStr(TheIPStr,TheIndex-1);
          Edit5.Text:=Edit1.Text;
          TheIPStr:=StrUtils.RightStr(TheIPStr,Length(TheIPStr)-TheIndex);
          break;
       end;
   end;
   For i:=1 to Length(TheIPStr) do
   begin
       if TheIPStr[i]='.' then
       begin
          TheIndex:=i;
          Edit2.Text:=StrUtils.leftStr(TheIPStr,TheIndex-1);
          Edit6.Text:=Edit2.Text;
          TheIPStr:=StrUtils.RightStr(TheIPStr,Length(TheIPStr)-TheIndex);
          break;
       end;
   end;
   For i:=1 to Length(TheIPStr) do
   begin
       if TheIPStr[i]='.' then
       begin
          TheIndex:=i;
          Edit3.Text:=StrUtils.leftStr(TheIPStr,TheIndex-1);
          Edit7.Text:=Edit3.Text;
          TheIPStr:=StrUtils.RightStr(TheIPStr,Length(TheIPStr)-TheIndex);
          break;
       end;
   end;
   Edit4.Text:=TheIPStr;
   Edit8.Text:=TheiPStr;
  except
  end;
end;
procedure TScanIPFm.PingPorcess;
var 
  iA,iB,iC,iD:integer;
  ThePingIP:String;
  ThePingThread:PingThread;
  TheTimeStr   :String;
  TotalCount:int64;
begin
   if SdPingCount>0 then exit;
   Timer1.Enabled:=True;
   TotalCount:=0;
   GetTheScanIP;
   TheTimeStr:=TimeToStr(Time);
   For iA:=FromA_IP To ToA_IP do
    For iB:=FromB_IP To ToB_IP do
     For iC:=FromC_IP To ToC_IP do
      For iD:=FromD_IP To ToD_IP do
      begin
         TotalCount:=TotalCount+1;
      end;
   Gauge4.MaxValue:=MultiPingCount;
   Gauge2.Progress:=0;
   try
     Gauge2.MaxValue:=TotalCount;
   except
     beep;
     SpeedButton6.Down:=True;
     Panel10.Caption:='搜索初始化错误!';
     Timer1.Enabled:=False;
     exit;
   end;
   For iA:=FromA_IP To ToA_IP do
    For iB:=FromB_IP To ToB_IP do
     For iC:=FromC_IP To ToC_IP do
      For iD:=FromD_IP To ToD_IP do
      begin
         ThePingIP:=IntToStr(iA)+'.'+IntToStr(iB)+'.'+
                                     IntToStr(iC)+'.'+IntToStr(iD);
         
         Edit1.Text:=IntToStr(iA);
         Edit2.Text:=IntToStr(iB);
         Edit3.Text:=IntToStr(iC);
         Edit4.Text:=IntToStr(iD);
         Repeat //设置阻塞操作           
           Application.ProcessMessages;
           Gauge4.Progress:=SdPingCount;
           Panel10.Caption:='当前共发出'+IntToStr(SdPingCount)+'个搜索线程';
           if SpeedButton6.Down then
           begin
              Repeat
                Application.ProcessMessages;
                Gauge4.Progress:=SdPingCount;
                Panel10.Caption:='当前还有'+IntToStr(SdPingCount)
                                                +'个搜索线程未返回,请稍候...';
              until SdPingCount=0;
              SpeedButton6.Down:=True;
              Timer1.Enabled:=False;
              Gauge4.Progress:=0;
              TheTimeStr:='扫描时间从:'+TheTimeStr+'  到:'+TimeToStr(Time);
              Application.MessageBox(PChar(TheTimeStr),'扫描中断',
                                     MB_OK+MB_ICONSTOP);
              Panel10.Caption:='搜索线程已经全部返回_____OK!';
              exit;
           end;
         until SdPingCount<MultiPingCount;
         try
           ThePingThread:=PingThread.Create(ThePingIP,ListView1);
         except
            beep;
            SpeedButton6.Down:=True;
            Panel10.Caption:='搜索线程创建错误错误!';                  
         end;
         Gauge2.Progress:=Gauge2.Progress+1;          
      end;   
   Repeat
     Application.ProcessMessages;
     Gauge4.Progress:=SdPingCount;
     Panel10.Caption:='当前还有'+IntToStr(SdPingCount)
                                                +'个搜索线程未返回,请稍候...';

   until SdPingCount=0;
   SpeedButton6.Down:=True;
   Timer1.Enabled:=False;
   TheTimeStr:='扫描时间从:'+TheTimeStr+'  到:'+TimeToStr(Time);
   Panel10.Caption:='搜索线程已经全部返回_____OK!';
   Gauge4.Progress:=0;
   Application.MessageBox(PChar(TheTimeStr),'扫描完毕',
                                     MB_OK+MB_ICONINFORMATION);
end;
Procedure TScanIPFm.ScanPortPorcess;
var 
  iA,iB,iC,iD:integer;
  ThePingIP:String;
  TheScanThread:ScanPortThread;
  TheTimeStr   :String;
  TotalCount:int64;
begin
   if SdPingCount>0 then exit;
   Timer1.Enabled:=True;
   TotalCount:=0;
   GetTheScanIP;
   TheTimeStr:=TimeToStr(Time);
   For iA:=FromA_IP To ToA_IP do
    For iB:=FromB_IP To ToB_IP do
     For iC:=FromC_IP To ToC_IP do
      For iD:=FromD_IP To ToD_IP do
      begin
         TotalCount:=TotalCount+1;
      end;
   Gauge4.MaxValue:=MultiPingCount;
   Gauge2.Progress:=0;
   try
     Gauge2.MaxValue:=TotalCount;
   except
     beep;
     SpeedButton6.Down:=True;
     Panel10.Caption:='搜索初始化错误!';
     Timer1.Enabled:=False;
     exit;
   end;
   For iA:=FromA_IP To ToA_IP do
    For iB:=FromB_IP To ToB_IP do
     For iC:=FromC_IP To ToC_IP do
      For iD:=FromD_IP To ToD_IP do
      begin
         ThePingIP:=IntToStr(iA)+'.'+IntToStr(iB)+'.'+
                                     IntToStr(iC)+'.'+IntToStr(iD);
         
         Edit1.Text:=IntToStr(iA);
         Edit2.Text:=IntToStr(iB);
         Edit3.Text:=IntToStr(iC);
         Edit4.Text:=IntToStr(iD);
         Repeat //设置阻塞操作           
           Application.ProcessMessages;
           Gauge4.Progress:=SdPingCount;
           Panel10.Caption:='当前共发出'+IntToStr(SdPingCount)+'个搜索线程';
           if SpeedButton6.Down then
           begin
              Repeat
                Application.ProcessMessages;
                Gauge4.Progress:=SdPingCount;
                Panel10.Caption:='当前还有'+IntToStr(SdPingCount)
                                                +'个搜索线程未返回,请稍候...';
              until SdPingCount=0;
              SpeedButton6.Down:=True;
              Timer1.Enabled:=False;
              Gauge4.Progress:=0;
              TheTimeStr:='扫描时间从:'+TheTimeStr+'  到:'+TimeToStr(Time);
              Application.MessageBox(PChar(TheTimeStr),'扫描中断',
                                     MB_OK+MB_ICONSTOP);
              Panel10.Caption:='搜索线程已经全部返回_____OK!';
              exit;
           end;
         until SdPingCount<MultiPingCount;
         try
           TheScanThread:=ScanPortThread.Create(ThePingIP,
                                      StrToInt(Edit9.Text),ListView1);
         except
            beep;
            SpeedButton6.Down:=True;
            Panel10.Caption:='搜索线程创建错误错误!';                  
         end;
         Gauge2.Progress:=Gauge2.Progress+1;          
      end;   
   Repeat
     Application.ProcessMessages;
     Gauge4.Progress:=SdPingCount;
     Panel10.Caption:='当前还有'+IntToStr(SdPingCount)
                                                +'个搜索线程未返回,请稍候...';

   until SdPingCount=0;
   SpeedButton6.Down:=True;
   Timer1.Enabled:=False;
   TheTimeStr:='扫描时间从:'+TheTimeStr+'  到:'+TimeToStr(Time);
   Panel10.Caption:='搜索线程已经全部返回_____OK!';
   Gauge4.Progress:=0;
   Application.MessageBox(PChar(TheTimeStr),'扫描完毕',
                                     MB_OK+MB_ICONINFORMATION);
end;
procedure TScanIPFm.SingleHostScan;
var
   i:integer;
   ThePortScan:ScanHostPortThread;
   TheNewNode:TTreeNode;
   FromPort,ToPort:integer;
begin
   if SdScanCount<>0 then exit;

   TheNewNode:=TreeView1.Items.Add(nil,Edit10.Text);
   TheNewNode.ImageIndex:=0;
   TheNewNode.StateIndex:=0;
   TheNewNode.SelectedIndex:=0;
   Gauge1.MaxValue:=StrToInt(Edit12.Text);
   Gauge1.Progress:=0;
   Gauge5.MaxValue:=MultiScanCount;
   Gauge5.Progress:=0;
   FromPort:=StrToInt(Edit11.text);
   ToPort:=StrToInt(Edit12.text);
   For i:=FromPort To ToPort do
   begin
       repeat
          Application.ProcessMessages;
          Gauge5.Progress:=SdScanCount;
          if SpeedButton8.Down then
          begin
            repeat
              Application.ProcessMessages;
              Gauge5.Progress:=SdScanCount;          
            until SdScanCount=0;
            Application.MessageBox('===扫描由您主动结束===','扫描中断',
                                     MB_OK+MB_ICONSTOP);
            Gauge5.Progress:=0;
            exit;
          end;
       until SdScanCount<MultiScanCount;
       Gauge1.Progress:=i;
       Gauge5.Progress:=SdScanCount;
       Panel8.Caption:='扫描'+Edit10.Text+':'+IntToStr(i);
       Try
         ThePortScan:=ScanHostPortThread.Create(Edit10.Text,i,TreeView1);
       except
       end;
   end;

⌨️ 快捷键说明

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