其他提示

的方式来确定多少数据包是在该文件中是读取整个文件。有,实际上,没有分组在文件头数(因为该格式被设计为在一次通过可写的),并有,实际上,没有页脚。

如果你想在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的头文件(在Linux上搜索的libpcap开发/ devel包)

然后进行编译的gcc -o myprogram myprogram.c -lpcap

我知道的唯一方法是将读出的文件中,捕获帧通过捕获帧,并增加“分组计数器。然而,有一个小帧报头中包含的存储帧的长度,因此你可以寻求向前通过该长度的文件中。它可能不是任何更快,请注意。

不过,如果你有兴趣做比单纯计算捕获的帧的数量,可能是有意义通过数据读取和建立捕获的帧链,同时对其计数,以备将来使用。我对Common Lisp的PCAP库来实现的。它读取“下一帧”的需要的基础上,存储在双链表原始帧,以方便将来“下一个/前一个”帧导航,根据需要从磁盘读取多个帧。然而,框架内容的解析被留到图书馆用户的判断,并且不通过简单地读取该帧八位组成的数据结构执行的。

scroll top