如何以 pcap 格式保存以太网帧

How to save Ethernet frames in pcap format

本文关键字:保存 以太网 格式 pcap      更新时间:2023-10-16

我正在编写一个应用程序,该应用程序侦听网络接口,选取一些帧,编辑它们,然后将它们保存到磁盘。与tshark和tcpdump非常相似。

我的代码是用C++编写的

但是,我想以 pcap 格式保存数据包,但我找不到接受以太网帧(在内存中)并将其保存到 .pcap 文件的 C/C++ 库。

  • 注意:同时我使用hexdump和text2pcap,但这在生产中是不可接受的。

解决方案更新:

#include <pcap.h>
pcap_t* p = pcap_open_dead(DLT_EN10MB, 65535);
const std::string pcap_file_name = getPcapName();
pcap_dumper_t* dumper = pcap_dump_open(p, pcap_file_name.c_str());
pcap_pkthdr h;
h.caplen = packet_len;
h.len = packet_len;
pcap_dump((u_char*)dumper, &h, packet);
pcap_dump_close(dumper);
pcap_close(p);

为什么不能在C++代码中直接使用 WinPcap/libpcap?这些是 C 库,所以你应该能够链接它们。

在 unix 下使用 libpcap,或在 windoze 下使用 winpcap。