C++ - 如何在 vector 中使用 pcap_next_ex 存储离线读取数据包?

标签 c++ c packet pcap

我使用读取存储在文件中的数据包

struct pcap_pkthdr *header;
const u_char *packetData;
pcap_next_ex(pcap, &header, &packetData)

我需要读取所有数据包并将每个数据包(数据包头和数据包数据)存储在结构 vector 中

struct packetStruct {
    struct pcap_pkthdr *header;
    const u_char *packetData;
};

但是,当我只将指向内存的指针分配给该结构指针,并将 header 和数据包数据分配给该结构指针并将该结构推送到 vector 时, vector 中的所有指针都指向读取循环后的最后一个数据包(函数将数据包存储在同一内存中)。

我应该为 header 和数据包数据分配新的内存吗?如果是,这个内存应该有多大?或者还有其他办法吗?

感谢回复

最佳答案

是的,您应该为 header 和数据包分配新的内存。您从 pcap_next_ex 获得的指针被 libpcap/WinPcap 重用,因此您不能假设为某个数据包分配的内存在下一个数据包到达时可用,依此类推。

您应该分配的内存大小在 pcap_pkthdr 中。您需要考虑 2 个长度字段:

  • len - 包含完整数据包的长度(离线)
  • caplen - 包含实际分配的数据长度

通常lencaplen将是相等的,但有时,由于多种可能的原因,caplen将小于 len

关于C++ - 如何在 vector 中使用 pcap_next_ex 存储离线读取数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46727382/

相关文章:

c++ - 遗留设备上下文太粗糙

c++ - 错误 : expression must have class type

arrays - 初始化从指针目标类型中丢弃 ‘const’ 限定符

c++ - 如何在套接字上设置不分段(DF)标志?

c++ - RELEASE 上的错误,但不是 DEBUG 上的错误

c++ - OOP - 这是不好的做法吗?

c++ - LIBC 的 mktime 函数对相同的输入返回不同的值

c - 类型转换类型是否取决于大/小端?

udp - 我的 UDP 校验和计算每次都会给出错误的结果

linux - linux 上的实时数据包捕获