2017-10-13 25 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つの長さフィールドを持っている: - フルパケット(オフ・ワイヤ)

  • caplenの長さが含まれています -

    • len実際に通常

    len割り当てられたデータの長さが含まれており、 caplenは等しくなりますが、いくつかの理由でcaplenlen

  • 関連する問題