2017-10-13 95 views
0

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

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

存储在文件中的数据包,我需要阅读所有的数据包,每包(包头和包数据)存储结构

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

的矢量但当我只能分配指针将指向内存的头部和包数据指向此结构指针,并将此结构推送到向量,向量中的所有指针指向读取循环后的最后一个数据包(函数将数据包存储在同一内存中)。

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

感谢答复

+1

你正在写C或C++吗?他们是不同的语言 – Caleth

回答

0

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

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

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

通常len数据的长度和caplen将是平等的,但有时,由于几个可能的原因,caplen将小于len

相关问题