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

📄 main.pas

📁 网络监听程序
💻 PAS
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, netthr, StdCtrls, communit, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure RecvMessage(var msg:Tmessage); message WM_Net_Recv;
    procedure ThreadMessage(var msg:Tmessage); message WM_Net_Msg;
  end;

var
  Form1: TForm1;
  i,j:integer;
  ThreadId:THandle;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  TNetThread.Create(Handle);
  ThreadId:=0;
  i:=0;j:=0;
end;

procedure TForm1.RecvMessage(var msg:Tmessage);
var
  PBuf:PByte;
  pEtherHead:PEtherPacketHead;
begin
  PBuf:=PByte(msg.wparam+14);
  pEtherHead:=PEtherPacketHead(msg.wparam);
  memo1.Lines.Add(inttohex(DWord(pEtherHead.DestEther.AddrByte[0]),2)+'.'+
    inttohex(DWord(pEtherHead.DestEther.AddrByte[1]),2)+'.'+
    inttohex(DWord(pEtherHead.DestEther.AddrByte[2]),2)+'.'+
    inttohex(DWord(pEtherHead.DestEther.AddrByte[3]),2)+'.'+
    inttohex(DWord(pEtherHead.DestEther.AddrByte[4]),2)+'.'+
    inttohex(DWord(pEtherHead.DestEther.AddrByte[5]),2)+':'+inttostr(PBuf^));
  i:=PBuf^;
  if memo1.Lines.Count>1000 then memo1.Clear;
  LocalFree(DWord(PBuf));
end;

procedure TForm1.ThreadMessage(var msg:Tmessage);
begin
  case msg.WParam of
    Msg_Create:
      ThreadId:=msg.LParam;
    Msg_Close:
      ThreadId:=0;
  end;    
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  pEtherHead:PEtherPacketHead;
  Buffer:array [0..MAX_PACKET_SIZE] of byte;
  pdata:PByte;
begin
  if ThreadId=0 then exit;
  fillchar(Buffer,0,BUFFER_SIZE);
  pEtherHead:=PEtherPacketHead(@Buffer);
  pdata:=PByte(DWord(pEtherHead)+ETHER_HEAD_LEN);
  //* Set ether head */
  pEtherHead.SourEther.AddrByte[0]:=$aa;
  pEtherHead.SourEther.AddrByte[1]:=$0;
  pEtherHead.SourEther.AddrByte[2]:=$4;
  pEtherHead.SourEther.AddrByte[3]:=$0;
  pEtherHead.SourEther.AddrByte[4]:=$8;
  pEtherHead.SourEther.AddrByte[5]:=$4;
  pEtherHead.DestEther.AddrByte[0]:=$ab;
  pEtherHead.DestEther.AddrByte[1]:=$0;
  pEtherHead.DestEther.AddrByte[2]:=$0;
  pEtherHead.DestEther.AddrByte[3]:=$6;
  pEtherHead.DestEther.AddrByte[4]:=$0;
  pEtherHead.DestEther.AddrByte[5]:=$0;
  pEtherHead.ServType:=$5060;
  //* Set data */
  pdata^:=j;
  inc(j);
  postthreadmessage(ThreadId,TM_Send,integer(pEtherHead),20);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  timer1.Enabled:=false;
end;

end.

⌨️ 快捷键说明

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