2017-10-13 76 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

相關問題