C ++ - 如何在向量中使用pcap_next_ex存储脱机读取数据包?

时间:2017-10-13 10:03:51

标签: c++ c packet pcap

我使用

读取存储在文件中的数据包
struct pcap_pkthdr *header;
const u_char *packetData;
pcap_next_ex(pcap, &header, &packetData)

我需要读取所有数据包并将每个数据包(数据包标头和数据包数据)存储在struct

的向量中
struct packetStruct {
    struct pcap_pkthdr *header;
    const u_char *packetData;
};

但是当我只将带有头和包数据的指针指向内存并将此结构推送到向量时,向量中的所有指针都指向读取循环后的最后一个数据包(函数将数据包存储在同一内存中)。 / p>

我应该为标头和数据包数据分配新的内存吗?如果是这样,这个内存应该有多大?或者还有另一种方式吗?

感谢您的回复

1 个答案:

答案 0 :(得分:0)

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

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

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

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