在拆包的過程中,,我們必須要對WireShark截獲的數(shù)據(jù)包的格式(即.pcap后綴的文件)有很清楚的了解,,所以就把今天所學(xué)記錄下來,,以饗后來者,。 一,、結(jié)構(gòu)體說明
pcap.h里定義了文件頭的格式
struct pcap_file_header { }; 看一下各字段的含義:
數(shù)據(jù)報頭的格式
struct pcap_pkthdr { }; struct timeval { }; 二,、結(jié)構(gòu)圖
圖1詳細(xì)的描述了我們截獲數(shù)據(jù)包的大致結(jié)構(gòu):
圖1 pcap文件整體結(jié)構(gòu)
Pcap文件頭24B各字段說明: Magic:4B:0×1A 2B 3C 4D:用來識別文件自己和字節(jié)順序。0xa1b2c3d4用來表示按照原來的順序讀取,,0xd4c3b2a1表示下面的字節(jié)都要交換順序讀取,。一般,我們使用0xa1b2c3d4
Major:2B,,0×02 00:當(dāng)前文件主要的版本號
Minor:2B,,0×04 00當(dāng)前文件次要的版本號
ThisZone:4B 時區(qū)。GMT和本地時間的相差,,用秒來表示,。如果本地的時區(qū)是GMT,那么這個值就設(shè)置為0.這個值一般也設(shè)置為0 SigFigs:4B時間戳的精度,;全零
SnapLen:4B最大的存儲長度(該值設(shè)置所抓獲的數(shù)據(jù)包的最大長度,,如果所有數(shù)據(jù)包都要抓獲,將該值設(shè)置為65535,; 例如:想獲取數(shù)據(jù)包的前64字節(jié),,可將該值設(shè)置為64)
LinkType:4B鏈路類型
常用類型:
0 BSD loopback devices, except for later OpenBSD 三、詳細(xì)結(jié)構(gòu)1 Ethernet, and Linux loopback devices 6 802.5 Token Ring 7 ARCnet 8 SLIP 9 PPP 10 FDDI 100 LLC/SNAP-encapsulated ATM 101 “raw IP”, with no link 102 BSD/OS SLIP 103 BSD/OS PPP 104 Cisco HDLC 105 802.11 108 later OpenBSD loopback devices (with the AF_value in network byte order) 113 special Linux “cooked” capture 114 LocalTalk 直接來圖吧,,同樣的事情用圖總會直接簡明,,而且易懂。見圖二,。
圖2 字段的詳細(xì)結(jié)構(gòu) 四,、舉例
以下(見圖3)是我截獲的數(shù)據(jù)包,以.pcap后綴保存的,,用UE直接打開,,可以詳細(xì)看到它的內(nèi)部結(jié)構(gòu)和上面吻合。 圖3 pcap文件部分截圖 注:藍(lán)色選中的部分即為24字節(jié)的數(shù)據(jù)包包頭 我截獲的的以太網(wǎng)幀的第一幀如圖4所示:
圖4 第一幀的內(nèi)容 對比圖3和數(shù)據(jù)報頭16字節(jié)格式,,你會很容易知道Frame 1的92bytes是5C 00 00 00計算出來的,。到此為止,我想各位應(yīng)該很清楚的了解Frame 1在什么位置,,以及.pcap文件的格式了吧,。 如有不懂,請留言,希望我們都能多交流,,共同進(jìn)步,,體驗計算機之美。 |
|