一、pcapng概覽
pcapNG格式(Libpcap Next Generation Dump File Format)是新一代抓包文件格式,它支持更多種類的抓包設備和文件的元數據。pcapNG格式於2009年推出,並逐漸受到網路安全行業的廣泛關注和使用。
每一個pcapng文件都可以包含多個塊(block),每個塊可以包含多個子塊(sub-block)。每個塊和子塊都有頭部和數據部分組成。
二、pcapng文件頭
每個pcapng文件都有一個文件頭,描述整個文件的屬性和特徵。文件頭由一個「section header block」組成,它包含了版本號、操作系統、捕獲軟體、硬體等信息,還可以指定每個塊的位元組序。
typedef struct pcapng_hdr_s{ uint32_t magic_number; // 標識文件類型 uint16_t version_major; // 主版本號 uint16_t version_minor; // 子版本號 int64_t section_length; // 文件長度 uint32_t byte_order_magic; // 位元組序 } pcapng_hdr_t;
三、數據塊
pcapng文件是由很多不同的塊組成,每個塊都有一個頭部和數據。
最常用的塊是「interface block」,它包含一個網路介面的描述信息。比如MAC地址、IP地址、類型等。
typedef struct interface_block_s{ uint32_t block_type; // 塊類型 uint32_t block_total_length; // 數據塊長度 uint16_t link_type; // 鏈路類型 uint16_t reserved; // 保留位 uint32_t snap_len; // 最大抓包長度 } interface_block_t;
四、擴展數據塊
pcapng格式支持用戶自定義塊,這些塊被稱為擴展數據塊(enhanced packet block)。擴展數據塊可以存儲模擬數據,或者在實際數據流中插入自定義數據。擴展數據塊的存在可以大大增加pcapng格式的靈活性和擴展性。
typedef struct enhanced_packet_block_s{ uint32_t block_type; // 塊類型 uint32_t interface_id; // 介面id int64_t timestamp_high; // 時間戳高8位元組 int64_t timestamp_low; // 時間戳低8位元組 uint32_t capture_len; // 抓包長度 uint32_t packet_len; // 包長度 } enhanced_packet_block_t;
五、文件實例
以一個簡單的HTTP消息為例,來說明pcapng格式的結構。下面是一個示例HTTP請求的抓包結果:
000000: 00 50 56 c0 00 01 52 54 00 12 35 14 08 00 .PV...RT..5... 000008: 45 00 00 4a 1b 54 40 00 40 06 56 45 c0 a8 01 01 E..J.T@.@.VE.... 000016: 81 62 53 ea 00 50 b9 63 b9 9b c3 2c 1b c1 50 18 .bS..P.c...,.P. 000024: fa f0 2d 8c 00 00 47 45 54 20 2f 20 48 54 54 50 ..-...GET / HTTP 000032: 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 6c 6f 63 61 /1.1..Host: loca 000040: 6c 68 6f 73 74 0d 0a 55 73 65 72 2d 41 67 65 6e lhost..User-Agen 000048: 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 t: Mozilla/5.0 ( 000056: 57 69 6e 64 6f 77 73 20 4e 54 20 31 30 2e 30 3b Windows NT 10.0; 000064: 20 57 69 6e 36 34 3b 20 78 36 34 29 20 41 70 70 Win64; x64) App 000072: 6c 65 57 65 62 4b 69 74 2f 35 33 37 2e 33 36 20 leWebKit/537.36 000080: 28 4b 48 54 4d 4c 2c 20 6c 69 6b 65 20 47 65 63 (KHTML, like Gec 000088: 6b 6f 29 20 43 68 72 6f 6d 65 2f 38 57 2e 30 2e ko) Chrome/8W.0. 000096: 34 38 30 38 2e 31 31 39 20 53 61 66 61 72 69 2f 4808.119 Safari/ 000104: 35 33 37 2e 33 36 0d 0a 41 63 63 65 70 74 3a 20 537.36..Accept: 000112: 74 65 78 74 2f 68 74 6d 6c 2c 20 61 70 70 6c 69 text/html, appli 000120: 63 61 74 69 6f 6e 2f 78 68 74 6d 6c 2b 78 6d 6c cation/xhtml+xml 000128: 3b 20 71 3d 30 2e 39 2c 20 2a 2f 2a 3b 20 71 3d ; q=0.9, */*; q= 000136: 30 2e 38 0d 0a 41 63 63 65 70 74 2d 45 6e 63 6f 0.8..Accept-Enco 000144: 64 69 6e 67 3a 20 67 7a 69 70 2c 20 64 65 66 6c ding: gzip, defl 000152: 61 74 65 0d 0a 41 63 63 65 70 74 2d 4c 61 6e 67 ate..Accept-Lang 000160: 75 61 67 65 3a 20 7a 68 2d 43 4e 2c 7a 68 3b 71 uage: zh-CN,zh;q 000168: 3d 30 2e 39 2c 65 6e 2d 55 53 3b 71 3d 30 2e 38 =0.9,en-US;q=0.8 000176: 0d 0a 43 6f 6f 6b 69 65 3a 20 5f 5f 75 74 6d 5f ..Cookie: __utm_ 000184: 7a 3d 31 2e 34 33 38 35 31 31 34 31 2e 31 33 33 z=1.43851141.133 000192: 33 38 36 32 32 32 39 2e 31 33 36 38 30 39 39 39 8632229.13680999 000200: 2e 31 36 33 34 38 36 38 39 39 3b 20 5f 74 7a 3d .163486899; _tz= 000208: 2e 2d 38 3b 20 5f 67 61 3d 47 41 31 2e 32 32 35 .-8; _ga=GA1.225 000216: 33 32 32 33 30 37 2e 31 33 36 38 30 31 2e 31 34 322307.136801.14 000224: 34 36 38 34 34 37 3b 20 5f 67 69 64 3d 43 67 7a 468447; _gid=Cgz 000232: 49 6f 76 45 32 30 31 76 47 6d 4c 5a 6a 34 32 47 IovE201vGmLZj42G 000240: 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 ..Connection: ke 000248: 65 70 2d 61 6c 69 76 65 0d 0a 0d 0a ep-alive....
上述抓包文件結合HTTP協議的規範解釋:
- 前8位元組:表示數據包的時間戳(Thu Nov 23 19:14:53.391640),的雙精度位表示,收集到的時間戳,秒數的高位在最高位,後64位表示精確到微秒。
- 接下來4位元組: 表示數據包的長度(0x00000098),即實際收到的大小,可以少於原始分組大小,或者被截斷。*
- 接下來的數據:是捕獲的數據本身,它被限制到抓取大小(0x000000c0),這是啟動Wireshark時為抓取設置的最大捕獲大小。
我們可以將上述數據轉換成pcapng格式:
00000000: 0a 0d 0d 0a 04 00 00 00 05 00 00 00 ff ff 00 00 ................
00000010: 53 62 3a 66 00 00 00 00 01 00 00 00 c0 00 00 00 Sb:f............
00000020: 98 00 00 00 f2 b1 e5 8c 41 67 6c 55 11 bd c9 e9 ........AglU....
00000030: cf ae 0b 3c 08 00 45 00 00 c0 1b 3a 40 00 40 06 ...<..E....:@.@.
00000040: cb a8 c0 a8 01 01 81 62 53 ea 00 50 b9 63 b9 9b ......bS..P.c..
00000050: c3 2c 1b c1 50 18 fa f0 2d 8c 47 45 54 20 2f 20 .,..P...-.GET /
00000060: 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 HTTP/1.1..Host:
00000070: 6c 6f 63 61 6c 68 6f 73 74 0d 0a 55 73 65 72 2d localhost..User-
00000080: 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 Agent: Mozilla/5
00000090: 2e 30 20 28 57 69 6e 64 6f 77 73 20 4e 54 20 31 .0 (Windows NT 1
000000a0: 30 2e 30 3b 20 57 69 6原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291672.html