PCAPキャプチャファイル内のパケットの数を取得しますか?

StackOverflow https://stackoverflow.com/questions/681011

  •  22-08-2019
  •  | 
  •  

他のヒント

ファイルに記述されているどのように多くのパケットを決定するために、

のみの方法でファイル全体を読むことです。 (フォーマットは、1回のパスで書き込み可能になるように設計されたため)ファイルヘッダにはパケット数は、実際には、存在しない、と何のフッターは、実際には、ありません。

あなたはPCAPのフレームのの場合:

tshark -r test.cap | wc -l

capinfosを使用します:

capinfos test.cap | grep "Number of packets"| tr -d " " | cut -d ":" -f 2

のtcpdumpを使用します:

tcpdump -r test.cap 2>/dev/null| wc -l

だから、基本的に、libpcapのを使用して、ここに例を示します。

#include <stdio.h>
#include <pcap.h>
#include <stdlib.h>

int main(int argc, char **argv) 
{ 
  unsigned int packet_counter=0;
  struct pcap_pkthdr header; 
  const u_char *packet;

  if (argc < 2) { 
    fprintf(stderr, "Usage: %s <pcap>\n", argv[0]); 
    exit(1); 
  } 

   pcap_t *handle; 
   char errbuf[PCAP_ERRBUF_SIZE];  
   handle = pcap_open_offline(argv[1], errbuf); 

   if (handle == NULL) { 
     fprintf(stderr,"Couldn't open pcap file %s: %s\n", argv[1], errbuf); 
     return(2); 
   } 

   while (packet = pcap_next(handle,&header)) { 

      packet_counter++;

    } 
    pcap_close(handle);


  printf("%d\n", packet_counter);
  return 0;
}

注:(libpcapのdevの/ develパッケージ用のLinux検索上)のlibpcapヘッダをインストールする必要があります。

そして、gccでコンパイル-o MYPROGRAM myprogram.c -lpcap

私が知っている唯一の方法は、撮影したフレームによって、ファイル、キャプチャしたフレームを読んで、「パケットカウンタをインクリメントすることです。あなたが前方にシークできるよう、保存されたフレームの長さを含む小さなフレームヘッダ、しかし、がありますその長さのファイルに。それは、あなたも速く、心ではないかもしれない。

あなたは、単にキャプチャされたフレームの数をカウント以上のことをやってに興味があるなら、それらをカウントしながら、

しかし、それは将来の使用のために、データを読みとキャプチャされたフレームのチェーンを構築する意味があります。 Common Lispのための私のPCAPライブラリは、これを行います。これは、必要に応じて、ディスクからより多くのフレームを読んで、簡単に将来の「次/前の」フレームナビゲーションのための二重リンクリストで生フレームを格納し、として、必要に応じて、「次のフレーム」を読み出します。しかし、フレームの内容の解析には、図書館利用者の裁量に任されており、単にデータ構造にフレームオクテットを読むことによって強制されません。

scroll top