Pcap文件頭24B各欄位說明:
Magic:4B:0x1A 2B 3C 4D:用來標示檔的開始
Major:2B,0x02 00:當前檔主要的版本號
Minor:2B,0x04 00當前文件次要的版本號
ThisZone:4B當地的標準時間;全零
SigFigs:4B時間戳記的精度;全零
SnapLen:4B最大的存儲長度
LinkType:4B鏈路類型
0 BSD loopback devices, except for later OpenBSD
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
其中我們最為常見的類型就是1,乙太網鏈路。
欄位說明:
Timestamp:時間戳記高位,精確到seconds
Timestamp:時間戳記低位,精確到microseconds
Caplen:當前資料區的長度,即抓取到的資料幀長度,由此可以得到下一個資料幀的位置。
Len:離線數據長度:網路中實際資料幀的長度,一般不大於caplen,多數情況下和Caplen數值相等。
Packet 數據:即 Packet(通常就是鏈路層的資料幀去掉前面用於同步和標識幀開始的8位元組和最後用於CRC校驗的4位元組)具體內容,長度就是Caplen,這個長度的 後面,就是當前PCAP檔中存放的下一個Packet資料包,也就是說:PCAP檔裡面並沒有規定捕獲的Packet資料包之間有什麼間隔字串,我 們需要靠第一個Packet包確定下一組資料在檔中的起始位置,向後以此類推。
圖 中最開始的綠色部分就是24 Bytes的Pcap Header,接下來紅色的16 Bytes是第一個消息的Packet Header, 後面的紅色的16 Bytes是第二個消息的Packet Header。兩塊藍色的部分分別是兩個消息從鏈路層開始的完整內容。在網路上實際傳輸的資料包在資料連結層上每一個Packet開始都會有7個用於同步 的位元組(10101010, 10101010, 10101010, 10101010, 10101010, 10101010, 10101010,)和一個用於標識該Packet開始的位元組(10101011),最後還會有四個CRC校驗位元組;而PCAP檔中會把前8個位元組和最 後4個校驗自己去掉,因為這些資訊對於協定分析是沒有用處的。
用 Wireshark打開一個Pcap資料包後, 每條消息的所有field會被解析出來並會按照協定層次折疊起來。第一層顯示的是Frame XXX,這一級別沒有對應某層具體的協定,而是對本條消息的一個概括性總結,描述了一些有用的概括性資訊,比如從裡面我們可以看到本條消息各種協定的層次 關係,展開其它協議層之後對應的是該協議的各個域;如下圖所示
綜述:pcap文件頭:資料連結層14位元組包頭+20位元組ip包頭+20位元組tcp包頭或者udp;
目的MAC(6B)+源MAC(6B)+type(2B,0800,ip)+協議版本及頭長度(0x45,1B)+區分服務(1B)
+總長度(2B)+唯一標示(2B)+標誌與偏移量(2B)+TTL(1B)+協議(1B,TCP|UDP)+校驗和(2B)
+源ip位址(4B)+目的ip位址(4B)+源埠(2B)+目的埠(2B)+序號(4B)+確認號(4B)+頭長度(1B)+ack標誌(1b)+窗口大小(2B)+校驗和(2B)+緊急資料偏移量(2B)
沒有留言:
張貼留言