📄 u_owns.pas
字号:
begin
FLibpCapSniffer.FilePath := EditFileName.Text;
FLibpCapSniffer.mode := OffLine;
end;
end;
// we set the bpf filter if we use WinpCap/LibpCap sniffer
if (FCapture.Sniffer = FLibpCapSniffer) then
FLibpCapSniffer.bpfFilter := BpfExpression.Text;
FCapture.startCapture;
FTickCount := g_Statistics.startTickCount;
FBytesReceived := 0;
Timer.Enabled := True;
PageControl.ActivePage := TabSheetStats;
btnCaptureStart.Enabled := false;
btnStopCapture.Enabled := true;
end;
procedure TfrmOwns.btnStopCaptureClick(Sender: TObject);
begin
FCapture.stopCapture;
btnStopCapture.Enabled := false;
end;
// this procedure is called when capture is finished (because we called stopCapture
// or EOF or an exception ocurred ...)
procedure TfrmOwns.endCapture;
begin
TimerTimer(self);
Timer.Enabled := False;
btnCaptureStart.Enabled := true;
btnStopCapture.Enabled := false;
end;
// called every second
procedure TfrmOwns.TimerTimer(Sender: TObject);
var
l_Tick : Cardinal;
l_Vitesse,l_VitesseMoyenne : Extended;
begin
l_Tick := getTickCount2;
// debug
while (g_Debug.getNext <> nil) do
MemoDebug.Lines.Add(g_Debug.debugMessage);
with g_Statistics do
begin
lblNbConnectionsEnCours.Caption := IntToStr(NbCOnnectionsEnCours);
lblNbConnectionsTotal.Caption := IntToStr(NbTotalConnectionsTCP);
lblFilesCreated.Caption := IntToStr(NbFilesCreated);
lblDamaged.Caption := IntToStr(NbDamagedConnections);
lblBytesReceived.Caption := IntToStr(bytesReceived);
lblBytesSaved.Caption := IntToStr(bytesSaved);
lblTimeElapsed.Caption := FloatToStrF((l_Tick-g_Statistics.startTickCount)/1000,ffFixed,5,0);
lblTramesTCP.Caption := IntToStr(PacketsTCP);
lblTramesAutres.Caption := IntToStr(PacketsNonTCP);
lblBytesNonTCP.Caption := IntToStr(BytesNonTCP);
lblBytesTCP.Caption := IntToStr(BytesTCP);
lblPop3.Caption := IntToStr(PacketsPop3);
lblNntp.Caption := IntToStr(PacketsNntp);
lblWww.Caption := IntToStr(PacketsWww);
lblCurrentFile.Caption := ExtractFileName(currentFilePath);
// average speed and current speed in Mbps
if (l_Tick-FTickCount > 0) then
begin
l_Vitesse := ((BytesReceived-FBytesReceived)*8/1024/1024*1000)/(l_Tick-FTickCount);
lblCurrentSpeed.Caption := FloatToStrF(l_Vitesse,ffFixed,5,3);
end;
l_VitesseMoyenne := (BytesReceived*8/1024/1024*1000)/(l_Tick-g_Statistics.startTickCount);
lblAverageSpeed.Caption := FloatToStrF(l_VitesseMoyenne,ffFixed,5,3);
FBytesReceived := BytesReceived;
end;
FTickCount := l_Tick;
end;
procedure TfrmOwns.ButtonOpenFileClick(Sender: TObject);
begin
RadioButtonFile.Checked := True;
if (FCapture.Sniffer is TLibpCapSniffer) then
begin
OpenDialog.Filter := 'Libpcap Files (*.*)';
OpenDialog.Title := 'LibpCap Files';
end
else
if (FCapture.Sniffer is TObserverSniffer) then
begin
OpenDialog.Filter := 'Observer Files (*.bfr)';
OpenDialog.Title := 'Observer Files';
end;
if (OpenDialog.Execute) then
EditFileName.Text := OpenDialog.FileName;
end;
procedure TfrmOwns.EditFileNameClick(Sender: TObject);
begin
RadioButtonFile.Checked := True;
end;
procedure TfrmOwns.cmbInterfacesClick(Sender: TObject);
begin
RadioButtonInterface.Checked := true;
end;
procedure TfrmOwns.TimerSwapMemTimer(Sender: TObject);
begin
{$IFDEF MSWINDOWS}
ProgressBarMemoryLoad.Position := GetMemoryLoad;
ProgressBarSwapFileUsage.Position := GetSwapFileUsage;
{$ENDIF}
end;
procedure TfrmOwns.enableGroupBox(p_GroupBox : TGroupBox;p_Enable : boolean);
var
l_ChildControl: TControl;
i : integer;
begin
for i := 0 to p_GroupBox.ControlCount -1 do
begin
l_ChildControl := p_GroupBox.Controls[i];
l_ChildControl.Enabled := p_Enable;
end;
end;
procedure TfrmOwns.chkHttpClick(Sender: TObject);
begin
enableGroupBox(GroupBoxSaveHttpHeaders,chkHttp.checked);
enableGroupBox(GroupBoxSaveHttpTCPStream,chkHttp.checked);
if chkHttp.checked then
chkSaveHttpFilesClick(sender)
else
enableGroupBox(GroupBoxSaveFilesHttp,chkHttp.checked);
end;
procedure TfrmOwns.chkSaveHttpFilesClick(Sender: TObject);
begin
enableGroupBox(GroupBoxSaveFilesHttp,chkSaveHttpFiles.checked);
chkSaveHttpFiles.Enabled := true;
end;
// set current sniffer and update user interface
// if p_Sniffer is nil, sniffer is set to observer which is always available
procedure TfrmOwns.setSniffer(p_Sniffer : TSniffer);
var i : Integer;
begin
if (p_Sniffer <> nil) then
FCapture.Sniffer := p_Sniffer
else
FCapture.Sniffer := FObserverSniffer; // always available
if (FCapture.Sniffer is TLibpCapSniffer) then
begin
RadioButtonLibpCap.Checked := true;
RadioButtonInterface.Enabled := true;RadioButtonFile.Enabled := true;
EditFileName.Enabled := true;ButtonOpenFile.Enabled := true;
enableGroupBox(GroupBoxBpf,true);
cmbInterfaces.Enabled := true; cmbInterfaces.Items.Clear;
For i := 0 to FLibpCapSniffer.Adapters.Count-1 do
cmbInterfaces.Items.Add(FLibpCapSniffer.AdaptersDesc[i]); // .Adapters[i]);
cmbInterfaces.ItemIndex := 0;
cmbInterfaces.Repaint;
end else
{$IFDEF MSWINDOWS}
if (FCapture.Sniffer is TSehSniffer) then
begin
RadioButtonSeh.Checked := true;
RadioButtonInterface.Enabled := true;RadioButtonFile.Enabled := false; RadioButtonInterface.checked := true;
EditFileName.Enabled := false;ButtonOpenFile.Enabled := false;
enableGroupBox(GroupBoxBpf,false);
cmbInterfaces.Enabled := true; cmbInterfaces.Items.Clear;
For i := 0 to (FSehSniffer as TSehSniffer).Adapters.Count-1 do
cmbInterfaces.Items.Add((FSehSniffer as TSehSniffer).Adapters[i]);
cmbInterfaces.ItemIndex := 0;
cmbInterfaces.Repaint;
end else
{$ENDIF}
if (FCapture.Sniffer is TObserverSniffer) then
begin
RadioButtonObserver.Checked := true;
RadioButtonInterface.Enabled := false;
RadioButtonFile.Enabled := true; RadioButtonFile.Checked := true;
EditFileName.Enabled := true;ButtonOpenFile.Enabled := true;
enableGroupBox(GroupBoxBpf,false);
cmbInterfaces.Enabled := false; cmbInterfaces.Items.Clear;
end;
end;
procedure TfrmOwns.RadioButtonLibpCapClick(Sender: TObject);
begin
setSniffer(FLibpCapSniffer);
end;
procedure TfrmOwns.RadioButtonSehClick(Sender: TObject);
begin
{$IFDEF MSWINDOWS}
setSniffer(FSehSniffer);
{$ENDIF}
end;
procedure TfrmOwns.RadioButtonObserverClick(Sender: TObject);
begin
setSniffer(FObserverSniffer);
end;
// save the options in owns.ini file
procedure TfrmOwns.saveOptions();
var
filterHeaders : TFilterHeaders;
FilterHttpTCPStream : TFilterHttpTCPStream;
filterExtensions : TFiltreExtensions;
begin
// sniffer
if (FCapture.Sniffer is TLibpCapSniffer) then FOwnsIniFile.sniffer := 'libpcap';
if (FCapture.Sniffer is TObserverSniffer) then FOwnsIniFile.sniffer := 'observer';
{$IFDEF MSWINDOWS}
if (FCapture.Sniffer is TSehSniffer) then FOwnsIniFile.sniffer := 'seh';
{$ENDIF}
// source
if ((RadioButtonInterface.checked) and (cmbInterfaces.itemIndex <> -1)) then
FOwnsIniFile.NetworkInterface := FCapture.sniffer.Adapters[cmbInterfaces.itemIndex]
else
FOwnsIniFile.fromFile := EditFileName.text;
// bpf
FOwnsIniFile.bpf := BpfExpression.Text;
// output dir
FOwnsIniFIle.outputDir := EditOutputDirectory.Text;
// output files
if rbtnPath1.Checked then
FOwnsIniFile.outputFiles := Ext_Id;
if rbtnPath2.Checked then
FOwnsIniFile.outputFiles := Ext_IPDest_PortDest_Id;
if rbtnPath3.Checked then
FOwnsIniFile.outputFiles := IPDest_Ext_Id;
if rbtnPath4.Checked then
FOwnsIniFile.outputFiles := Mime_IpDest_PortDest_Id;
// http filter
FOwnsIniFile.saveHttp := chkSaveHttpFiles.Checked;
// http headers filter
filterHeaders := [];
if chkHttpHeadersSaved.checked then filterHeaders := filterHeaders + [FileSavedHeaders];
if chkHttpHeadersHotmail.checked then filterHeaders := filterHeaders + [HotMailHeaders];
if chkhttpHeadersAll.checked then filterHeaders := [AllHeaders];
FOwnsIniFile.httpFilterHeaders := filterHeaders;
// Tcp streams filter
filterHttpTCPStream := [];
if chkHttpAllFilesSaved.Checked then filterHttpTCPStream := filterHttpTCPStream+[FileSavedTCPStreams];
if chkHttpAllTCPStreams.Checked then filterHttpTCPStream := [AllTCPStreams];
FOwnsIniFile.httpTcpStreamFilter := filterHttpTCPStream;
FOwnsIniFile.saveHttpFiles := chkSaveHttpFiles.Checked;
FOwnsIniFile.saveHttpFilesGreaterThan := StrToInt(edtTailleMin.text);
// filter extensions
filterExtensions := [];
if chkWeb.Checked then filterExtensions := filterExtensions + [TypeText];
if chkImages.Checked then filterExtensions := filterExtensions + [TypeImage];
if chkArchives.Checked then filterExtensions := filterExtensions + [TypeApplication];
if chkMusique.Checked then filterExtensions := filterExtensions + [TypeAudio];
if chkvideo.Checked then filterExtensions := filterExtensions + [TypeVideo];
if ChkInconnus.Checked then filterExtensions := filterExtensions + [TypeInconnu];
FOwnsIniFile.httpFilterExtensions := filterExtensions;
FOwnsIniFile.httpRejectContentRange := chkRejectPartialContentMessage.checked;
// pop3
FOwnsIniFile.savePop3Files := chkPop3SaveFiles.Checked;
FOwnsIniFile.savePop3Stream := chkPop3SaveTcpStream.Checked;
// Nntp
FOwnsIniFile.saveNntpFiles := chkNntpSaveFiles.Checked;
FOwnsIniFile.saveNntpStream := chkNntpSaveTcpStream.Checked;
// Other filters
FOwnsIniFile.saveOtherStream := chkOthersSaveTCPStream.Checked;
end;
// read the options from owns.ini file
procedure TfrmOwns.readOptions();
var
sniffer : String;
i : integer;
filterHeaders : TFilterHeaders;
FilterHttpTCPStream : TFilterHttpTCPStream;
filterExtensions : TFiltreExtensions;
begin
// sniffer
sniffer := FOwnsIniFile.sniffer;
if ((sniffer = 'libpcap') and (FLibpCapSniffer <> nil)) then
setSniffer(FLibpCapSniffer)
else
if ((sniffer = 'seh') and (FSehSniffer <> nil)) then
setSniffer(FSehSniffer)
else
if (sniffer = 'observer') then
setSniffer(FObserverSniffer); // always available !
// source
i := FCapture.sniffer.Adapters.indexof(FOwnsIniFile.networkInterface);
if (i <> -1) then
cmbInterfaces.ItemIndex := i;
EditFileName.text := FOwnsIniFile.fromFile;
// bpf
BpfExpression.Text := FOwnsIniFile.bpf;
// output dir
EditOutputDirectory.Text := FOwnsIniFIle.outputDir;
// output files
if (FOwnsIniFile.outputFiles = Ext_Id) then rbtnPath1.Checked := true else
if (FOwnsIniFile.outputFiles = Ext_IPDest_PortDest_Id) then rbtnPath2.Checked := true else
if (FOwnsIniFile.outputFiles = IPDest_Ext_Id) then rbtnPath3.Checked := true else
if (FOwnsIniFile.outputFiles = Mime_IpDest_PortDest_Id) then rbtnPath4.Checked := true;
// http filter
chkSaveHttpFiles.Checked := FOwnsIniFile.saveHttp;
// http headers filter
filterHeaders := FOwnsIniFile.httpFilterHeaders;
chkHttpHeadersSaved.checked := (FileSavedHeaders in filterHeaders);
chkHttpHeadersHotmail.checked := (HotMailHeaders in filterHeaders);
chkhttpHeadersAll.checked := (AllHeaders in filterHeaders);
// Tcp streams filter
filterHttpTCPStream := FOwnsIniFile.httpTcpStreamFilter;
chkHttpAllFilesSaved.Checked := (FileSavedTCPStreams in filterHttpTCPStream);
chkHttpAllTCPStreams.Checked := (AllTCPStreams in filterHttpTCPStream);
chkSaveHttpFiles.Checked := FOwnsIniFile.saveHttpFiles;
edtTailleMin.text := IntToStr(FOwnsIniFile.saveHttpFilesGreaterThan);
// filter extensions
filterExtensions := FOwnsIniFile.httpFilterExtensions;
chkWeb.Checked := (TypeText in filterExtensions);
chkImages.Checked := (TypeImage in filterExtensions);
chkArchives.Checked := (TypeApplication in filterExtensions);
chkMusique.Checked := (TypeAudio in filterExtensions);
chkvideo.Checked := (TypeVideo in filterExtensions);
ChkInconnus.Checked := (TypeInconnu in filterExtensions);
chkRejectPartialContentMessage.checked := FOwnsIniFile.httpRejectContentRange;
// pop3
chkPop3SaveFiles.Checked := FOwnsIniFile.savePop3Files;
chkPop3SaveTcpStream.Checked := FOwnsIniFile.savePop3Stream;
// Nntp
chkNntpSaveFiles.Checked := FOwnsIniFile.saveNntpFiles;
chkNntpSaveTcpStream.Checked := FOwnsIniFile.saveNntpStream;
// Other filters
chkOthersSaveTCPStream.Checked := FOwnsIniFile.saveOtherStream;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -