pcap檔案是常用的資料報儲存格式,可以理解為就是一種檔案格式,只不過裡面的資料是按照特定格式儲存的,所以我們想要解析裡面的資料,也必須按照一定的格式。普通的記事本開啟pcap檔案顯示的是亂碼,用ultra edit能夠以16進製制資料的格式顯示,用wireshark這種抓包工具就可以正常開啟這種檔案,愉快地檢視裡面的網路資料報了,同時wireshark也可以生成這種格式的檔案。當然這些工具只是我經常使用的,還有很多其它能夠檢視pcap檔案的工具。
.pcap/.cap檔案結構如下:
1.pcap header
檔案頭,每乙個pcap檔案只有乙個檔案頭,總共佔24(b)位元組,以下是總共7個字段的含義。
magic(4b): 標記檔案開始,並用來識別檔案和位元組順序。值可以為0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原來的順序乙個位元組乙個位元組的讀,如果是0xd4c3b2a1表示小端模式,下面的位元組都要交換順序。現在的電腦大部分是小端模式。
major(2b): 當前檔案的主要版本號,一般為0x0200
minor(2b): 當前檔案的次要版本號,一般為0x0400
thiszone(4b): 當地的標準事件,如果用的是gmt則全零,一般全零
sigfigs(4b): 時間戳的精度,一般為全零
snaplen(4b): 最大的儲存長度,設定所抓獲的資料報的最大長度,如果所有資料報都要抓獲,將值設定為65535
linktype(4b): 鏈路型別。解析資料報首先要判斷它的linktype,所以這個值很重要。一般的值為1,即乙太網
常用的linktype(鏈路型別):
值 型別描述
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
2.packet header
資料報頭可以有多個,每個資料報頭後面都跟著真正的資料報。以下是packet header的4個字段含義
timestamp(4b): 時間戳高位,精確到seconds,這是unix時間戳。捕獲資料報的時間一般是根據這個值
timestamp(4b): 時間戳低位,能夠精確到microseconds
caplen(4b): 當前資料區的長度,即抓取到的資料幀長度,由此可以得到下乙個資料幀的位置。
len(4b): 離線資料長度,網路中實際資料幀的長度,一般不大於caplen,多數情況下和caplen值一樣
3.packet data
packet是鏈路層的資料幀,長度就是packet header中定義的caplen值,所以每個packet header後面都跟著caplen長度的packet data。也就是說pcap檔案並沒有規定捕獲的資料幀之間有什麼間隔字串。packet資料幀部分的格式就是標準的網路協議格式了。
eg:下圖為16進製制pcap檔案:
備註:紅色部分:pcap header
藍色部分:packet header
pcapheader
magic(4b): d4 c3 b2 a1 表示小端模式,後面的位元組從後往前讀;
major(2b): 02 00,計算機讀的是00 02;
minor(2b): 04 00,計算機讀的是00 04;
thiszone(4b): 00 00 00 00,全零;
sigfigs(4b): 00 00 00 00,全零;
snaplen(4b): ff ff 00 00, 計算機讀的是:00 00 ff ff,所以是2^16-1=65535
linktype(4b): 01 00 00 00, 計算機讀的是:00 00 00 01,表示是乙太網型別
packet header
timestamp(4b): ca 4d a4 5c,計算機讀的是:5c a4 4d ca,十進位制:1554271690,日期為:2019-04-03 14:08:10;
timestamp(4b): 4f 2a 08 00,計算機讀的是:00 08 2a 4f,十進位制:535119,代表535119ms;
caplen(4b): ba 1c 00 00, 計算機讀的是:00 00 1c ba,十進位制:7354,代表後面的7354個位元組為乙個資料幀,之後又是乙個新的packetheader,如此迴圈;
len(4b): ba 1c 00 00,和caplen相同
wireshark開啟.pcap檔案:
pcap cap檔案關聯wireshark
前幾天公升級到了ubuntu 11.10,安裝wireshark後發現在nautilus中雙擊pcap cap檔案無法開啟。也就是我只要讓pcap cap檔案能被nautilus識別成這個mime就和wireshark關聯上了。檢視下pcap cap檔案的mime果然識別錯誤,所以需要修改一下檔案型...
pcap檔案解析 pcap檔案頭與包檔案頭(一)
前段時間接到乙個公司關於解析pacp檔案的培訓 我是被培訓的 在完成了一部分的功能後決定把一些關於pcap檔案的了解記錄到部落格中。在開始讀取pcap檔案之前,先讓我們來看看pcap檔案的大概結構。如上圖所示在乙個pcap檔案中存在1個pcap檔案頭和多個資料報,其中每個資料報都有自己的頭和包內容。...
pcap檔案解析(三) 拆分SCTP包
這一章,我們將了解sctp資料報結構,並簡要介紹sctp協議,最後將帶有多個chunk的sctp包拆分問單個sctp資料報。資料報頭 eth資訊 ip頭sctp頭 sctp chunk 1 sctp chunk n 其中資料報頭和ip頭已經在前面做過介紹了,這裡先簡單介紹一下eth資訊。cpp vi...