我使用读取存储在文件中的数据包
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
- 包含实际分配的数据长度
通常len
和caplen
将是相等的,但有时,由于多种可能的原因,caplen
将小于 len
关于C++ - 如何在 vector 中使用 pcap_next_ex 存储离线读取数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46727382/