在C ++程序中生成pcapng文件

时间:2016-08-03 08:56:08

标签: c++ pcap-ng

我有一个能够生成pcap个文件的C ++程序。但是,我想在记录的帧中嵌入其他信息,我知道较新的格式pcapng允许向帧添加任意注释,我想利用它。我也理解libwiretap能够生成pcapng个文件,但我找不到参考,教程或示例。我的需求非常简单:我只需要打开一个pcapng文件,然后将数据包转储到其中,然后最后关闭它。你有什么有用的参考资料吗?

1 个答案:

答案 0 :(得分:1)

经过一些试错和读取头文件后,我想出了这个测试片段:

#include <sys/time.h>
#include <string.h>
#include <wiretap/wtap.h>

int main() {

  int err;
  wtap_dumper *dumper = wtap_dump_open_ng("test.pcapng", WTAP_FILE_TYPE_SUBTYPE_PCAPNG, WTAP_ENCAP_ETHERNET, 65535, 1, NULL, NULL, NULL, &err);

  char *packet = "helloworld";
  char *err_info;
  struct wtap_pkthdr header;
  wtap_phdr_init(&header);
  header.caplen = strlen(packet);
  header.len = strlen(packet);
  gettimeofday(&header.ts, NULL);
  header.opt_comment = "how are you?";
  wtap_dump(dumper, &header, packet, &err, &err_info);
  wtap_phdr_cleanup(&header);

  wtap_dump_close(dumper, &err);

  return 0;

}

我不认为它是好的代码,但它对我有用(当然它会生成无效的数据包)。此外,目前没有错误检查。

编译:

gcc -o test `pkg-config --cflags --libs wireshark` -lwiretap test.c