我使用
读取存储在文件中的数据包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>
我应该为标头和数据包数据分配新的内存吗?如果是这样,这个内存应该有多大?或者还有另一种方式吗?
感谢您的回复
答案 0 :(得分:0)
是的,您应该为标头和数据包分配新的内存。您从pcap_next_ex
获得的指针会被libpcap / WinPcap重用,因此您无法假设在下一个数据包到达时,为某个数据包分配的内存将可用,依此类推。
您应分配的内存大小为pcap_pkthdr
。您需要考虑2个长度字段:
len
- 包含完整数据包的长度(离线)caplen
- 包含实际分配的数据长度通常len
和caplen
会相等,但有时,由于多种可能的原因,caplen
会小于len