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

标签 c++ pcap-ng

<分区>

我有一个能够生成 pcap 文件的 C++ 程序。但是,我想在记录的帧中嵌入其他信息,而且我知道较新的格式 pcapng 允许向帧添加任意注释,我想利用这一点。我也知道 libwiretap 能够生成 pcapng 文件,但我找不到任何引用、教程或示例。我的需求非常简单:我只需要打开一个 pcapng 文件,时不时地向其中转储一个数据包,最后关闭它。关于从哪里开始,您有任何有用的引用吗?

最佳答案

经过反复试验和阅读头文件,我想出了这个测试片段:

#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

关于c++ - 在 C++ 程序中生成 pcapng 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738919/

相关文章:

c++ - 在函数调用时避免模板规范

networking - 转换 pcap <-> pcap-ng, pcap-ng 工具/库

cross-platform - 在 Mac 上创建的字节序列 0a 0d 0d 0a 的奇怪 pcap header ?

python |使用 Pyshark 合并多个 pcap/pcapng 文件

c++ - 为什么 std::to_string 没有短重载?为什么没有 noexcept?

c++ - 如何返回抽象类指针指向的对象?

c++ - std::vector 在内存中是什么样的?

c++ - _chkstk() 函数的目的是什么?