pcap(cap)包檔案解析

2021-09-24 13:51:44 字數 2849 閱讀 6501

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...