PCAP 抓包


PCAP是一個數據包抓取庫, 很多軟件都是用它來作為數據包抓取工具的。 WireShark也是用PCAP庫來抓取數據包的。PCAP抓取出來的數據包並不是原始的網絡字節流,而是對其進行從新組裝,形成一種新的數據格式。

一個用PCAP抓取的數據包的文件格式如下:

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包確定下一組數據在文件中的起始位置,向后以此類推。

 

Packet  包頭和Packet 數據組成
字段說明:
Timestamp:時間戳高位,精確到seconds(值是自從January 1, 1970 00:00:00 GMT以來的秒數來記)
Timestamp:時間戳低位,精確到microseconds (數據包被捕獲時候的微秒(microseconds)數,是自ts-sec的偏移量)
Caplen:當前數據區的長度,即抓取到的數據幀長度,由此可以得到下一個數據幀的位置。
Len:離線數據長度 網絡中實際數據幀的長度,一般不大於caplen,多數情況下和Caplen數值相等。
(例如,實際上有一個包長度是1500 bytes(L en=1500),但是因為在Global Header的 snaplen=1300有限制,所以只能抓取這個包的前1300個字節,這個時候, Caplen = 1300 )
Packet  數據:即 Packet(通常就是鏈路層的數據幀)具體內容,長度就是Caplen,這個長度的后面,就是當前PCAP文件中存放的下一個Packet數據包,也就 是說:PCAP文件里面並沒有規定捕獲的Packet數據包之間有什么間隔字符串,下一組數據在文件中的起始位置。我們需要靠第一個Packet包確定。 最后,Packet數據部分的格式其實就是標准的網路協議格式了可以任何網絡教材上找得到。

下面是一個PCAP數據包的實例,該數據包包含了兩條消息。下圖是用十六進制工具將該數據包打開后的截圖。

圖中最開始的綠色部分就是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,這一級別沒有對應某層具體的協議,而是對本條消息的一個概括性總結,描述了一些有用的概括性信息,比如從里面我們可以看到本條消息各種協議的層次 關系,展開其它協議層之后對應的是該協議的各個域;如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM