網絡編程-pcap數據包格式

  Libpcap的官方網站是http://www.tcpdump.org/,該項目和Tcpdump項目是同一個團隊維護。Libpcap是一個平臺獨立的tcp

數據包捕獲開發包,制定了數據包離線存儲的事實標準。接下來咱們就介紹一下該標準。網站

      pcap文件格式以下:24字節文件頭 +( 16字節pcap數據包信息 數據包 )* n。接下來具體介紹文件頭的結構和pcap數this

據包信息的結構。spa

      pcap文件頭結構在pcap.h中有定義,先展現以下:code

//pcap.h裏定義了文件頭的格式
struct pcap_file_header {
        bpf_u_int32 magic;
        u_short version_major;
        u_short version_minor;
        bpf_int32 thiszone;     /* gmt to local correction */ bpf_u_int32 sigfigs; /* accuracy of timestamps */ bpf_u_int32 snaplen; /* max length saved portion of each pkt */ bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */ }; 各字段的含義: magic: 4字節 pcap文件的magic num 目前爲0xD4C3B2A1 major: 2字節 主版本號 #define PCAP_VERSION_MAJOR 2 minor: 2字節 次版本號 #define PCAP_VERSION_MINOR 4 thiszone:4字節 時區修正 未使用,目前全爲0 sigfigs: 4字節 精確時間戳 未使用,目前全爲0 snaplen: 4字節 抓包最大長度 若是要抓全,設爲0x0000ffff(65535), tcpdump -s 0就是設置這個參數,缺省爲68字節 linktype:4字節 鏈路類型 通常都是1:ethernet

 

    pcap數據包信息,以下blog

//數據包頭的格式
struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length this packet (off wire) */ }; struct timeval { long tv_sec; /* seconds (XXX should be time_t) */ suseconds_t tv_usec; /* and microseconds */ }; ts: 8字節 抓包時間 4字節表示秒數,4字節表示微秒數 caplen:4字節 保存下來的包長度(最可能是snaplen,好比68字節) len: 4字節 數據包的真實長度,若是文件中保存的不是完整數據包,可能比caplen大

   筆者經過對pcap文件的分析,發現pcap文件中的全部相關字段都是使用小頭進行存儲的。開發

    以上咱們對pcap數據包的結構作了詳細的介紹,後續我會撰寫文章說明如何編寫程序修改io

文件,主要會有兩個例子,一個是用C語言方式修改,一個是用Python的方式修改。敬請期待。class

相關文章
相關標籤/搜索