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

📄 u_owns.pas

📁 linux program to read packet data
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    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 + -