?? cap_main.pas
字號(hào):
unit cap_main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
cap_ip, StdCtrls, ExtCtrls, Grids, ComCtrls, Buttons, Menus;
type
Tmy_data=record
buf:array of char;
end;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
StringGrid1: TStringGrid;
Splitter1: TSplitter;
Edit2: TEdit;
Label1: TLabel;
Panel1: TPanel;
Memo1: TMemo;
Splitter2: TSplitter;
Memo2: TMemo;
BitBtn5: TBitBtn;
Label2: TLabel;
Edit1: TEdit;
ComboBox1: TComboBox;
Label7: TLabel;
ComboBox2: TComboBox;
Label8: TLabel;
BitBtn6: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
DestPort: String; header: PChar; header_size: Integer; data: PChar;
data_size: Integer);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
function check_filter(proto, sourceIP, destIP, SourcePort,DestPort: String;data: PChar;data_size: Integer):boolean;
end;
var
Form1: TForm1;
buf_list:array of Tmy_data;
filter_str:string;
cap_ip1:Tcap_ip;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1.Rows[0] do
begin
Add('協(xié)議類型');
Add('源地址');
Add('源端口');
Add('目的地址');
Add('目的端口');
Add('數(shù)據(jù)大小');
Add('數(shù)據(jù)內(nèi)容');
end;
setlength(buf_list,strtoint(edit2.text));
cap_ip1:=Tcap_ip.Create(self);
cap_ip1.OnCap:=cap_ip1Cap;
end;
function TForm1.check_filter(proto, sourceIP, destIP, SourcePort,DestPort: String;data: PChar;data_size: Integer):boolean;
var
i:integer;
temp_str:string;
begin
result:=true;
if filter_str='' then
begin
result:=false;
exit;
end;
if (filter_str='排除協(xié)議'+proto) then exit;
if (filter_str='排除源地址'+sourceIP) then exit;
if (filter_str='排除源端口'+SourcePort) then exit;
if (filter_str='排除目的地址'+destIP) then exit;
if (filter_str='排除目的端口'+DestPort) then exit;
if (ComboBox2.text='包含') and (ComboBox1.Text<>'內(nèi)容') then
begin
if (filter_str='包含協(xié)議'+proto) then begin result:=false;exit;end;
if (filter_str='包含源地址'+sourceIP) then begin result:=false;exit;end;
if (filter_str='包含源端口'+SourcePort) then begin result:=false;exit;end;
if (filter_str='包含目的地址'+destIP) then begin result:=false;exit;end;
if (filter_str='包含目的端口'+DestPort) then begin result:=false;exit;end;
result:=true;exit;
end;
if (filter_str<>'包含內(nèi)容') then
begin
result:=false;exit;
end;
setlength(buf_list[StringGrid1.RowCount-2].buf,data_size);
copymemory(buf_list[StringGrid1.RowCount-2].buf,data,data_size);
temp_str:='';
for i:=0 to data_size-1 do
temp_str:=temp_str+buf_list[StringGrid1.RowCount-2].buf[i];
temp_str:=AnsiLowerCase(temp_str);
if (filter_str='包含內(nèi)容') then
begin
if pos(AnsiLowerCase(edit1.text),temp_str)>0 then
begin
result:=false; exit;
end else
begin
result:=true; exit;
end;
end else
if (filter_str='排除內(nèi)容') then
begin
if pos(AnsiLowerCase(edit1.text),temp_str)>0 then
begin
result:=true; exit;
end else
begin
result:=false; exit;
end;
end;
result:=false;
end;
procedure TForm1.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
DestPort: String; header: PChar; header_size: Integer; data: PChar;
data_size: Integer);
begin
if check_filter(proto,sourceIP, destIP, SourcePort,DestPort, data,data_size) then exit;
with StringGrid1 do
begin
Cells[0,StringGrid1.RowCount-1]:=proto;
Cells[1,StringGrid1.RowCount-1]:=sourceIP;
Cells[2,StringGrid1.RowCount-1]:=SourcePort;
Cells[3,StringGrid1.RowCount-1]:=destIP;
Cells[4,StringGrid1.RowCount-1]:=DestPort;
Cells[5,StringGrid1.RowCount-1]:=inttostr(data_size);
Cells[6,StringGrid1.RowCount-1]:=data;
end;
setlength(buf_list[StringGrid1.RowCount-2].buf,data_size);
copymemory(buf_list[StringGrid1.RowCount-2].buf,data,data_size);
if (StringGrid1.RowCount>strtoint(edit2.text)) then
StringGrid1.RowCount:=2
else
begin
StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.Rows[StringGrid1.RowCount].Clear;
end;
stringgrid1.toprow:=StringGrid1.RowCount- StringGrid1.VisibleRowCount;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
cap_ip1.StartCap;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
cap_ip1.pause;
if cap_ip1.Fpause then
BitBtn2.Caption:='繼續(xù)捕捉'
else
BitBtn2.Caption:='暫停捕捉';
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
cap_ip1.StopCap;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
var text_str,hex_str,all_str:string;
i:integer;
no: Integer;
begin
memo1.lines.Clear;
memo2.lines.Clear;
text_str:='';hex_str:='';all_str:='';
i:=0;
while i<= high(buf_list[stringgrid1.Selection.Top-1].buf) do
begin
no:=ord(buf_list[stringgrid1.Selection.Top-1].buf[i]);
hex_str:=hex_str+format('%0.2x',[no])+' ';
if no<20 then
begin
text_str:=text_str+'.';
all_str:=all_str+'.';
end else
begin
text_str:=text_str+buf_list[stringgrid1.Selection.Top-1].buf[i];
all_str:=all_str+buf_list[stringgrid1.Selection.Top-1].buf[i];
end;
if ((i mod 8)=7) then
begin
memo1.lines.add(hex_str+' | '+text_str);
text_str:='';hex_str:='';
end;
inc(i);
end;
if hex_str<>'' then
memo1.lines.add(hex_str+format('%'+inttostr(24-length(hex_str))+'s',[' '])+' | '+text_str);
memo2.lines.Add(all_str);
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
StringGrid1.RowCount:=2;
StringGrid1.Rows[1].Clear;
end;
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
filter_str:='';
if (ComboBox2.text='') or (ComboBox1.Text='') or (edit1.Text='') then
showmessage('內(nèi)容不全!') else
if ComboBox1.Text='內(nèi)容' then
filter_str:=self.ComboBox2.text+self.ComboBox1.Text
else
filter_str:=self.ComboBox2.text+self.ComboBox1.Text+AnsiUpperCase(edit1.Text);
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
cap_ip1.Free;
end;
end.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -