Python讀取pcap檔案

2021-06-08 22:22:19 字數 2236 閱讀 7819

想試一試讀取pcap檔案的內容,並且分析出pcap檔案頭,每一包資料的pcap頭,每一包的資料內容(暫時不包括資料報的協議解析),關於pcap檔案的格式,可以參看:

搞了一下午,寫了乙個py檔案,rdpcap.py,想把裡面的二進位制檔案全部弄成十六進製制的,然後作為字串寫入到乙個txt檔案,轉化成字串是為了顯示看起來方便。

程式如下:

#!/usr/bin/env python

#coding=utf-8

#讀取pcap檔案,解析相應的資訊,為了在記事本中顯示的方便,把二進位制的資訊

import struct

fpcap = open('test.pcap','rb')

ftxt = open('result.txt','w')

string_data = fpcap.read()

#pcap檔案包頭解析

pcap_header = {}

pcap_header['magic_number'] = string_data[0:4]

pcap_header['version_major'] = string_data[4:6]

pcap_header['version_minor'] = string_data[6:8]

pcap_header['thiszone'] = string_data[8:12]

pcap_header['sigfigs'] = string_data[12:16]

pcap_header['snaplen'] = string_data[16:20]

pcap_header['linktype'] = string_data[20:24]

#把pacp檔案頭資訊寫入result.txt

ftxt.write("pcap檔案的包頭內容如下: \n")

for key in ['magic_number','version_major','version_minor','thiszone',

'sigfigs','snaplen','linktype']:

ftxt.write(key+ " : " + repr(pcap_header[key])+'\n')

#pcap檔案的資料報解析

step = 0

packet_num = 0

packet_data =

pcap_packet_header = {}

i =24

while(i

#資料報頭各個字段

pcap_packet_header['gmttime'] = string_data[i:i+4]

pcap_packet_header['microtime'] = string_data[i+4:i+8]

pcap_packet_header['caplen'] = string_data[i+8:i+12]

pcap_packet_header['len'] = string_data[i+12:i+16]

#求出此包的包長len

packet_len = struct.unpack('i',pcap_packet_header['len'])[0]

#寫入此包資料

i = i+ packet_len+16

packet_num+=1

#把pacp檔案裡的資料報資訊寫入result.txt

for i in range(packet_num):

#先寫每一包的包頭

ftxt.write("這是第"+str(i)+"包資料的包頭和資料:"+'\n')

for key in ['gmttime','microtime','caplen','len']:

ftxt.write(key+' : '+repr(pcap_packet_header[key])+'\n')

#再寫資料部分

ftxt.write('此包的資料內容'+repr(packet_data[i])+'\n')

ftxt.write('一共有'+str(packet_num)+"包資料"+'\n')

ftxt.close()

fpcap.close()

最終得到的result檔案如下所示:字段顯示的都是十六進製制,其中的資料部分和wireshark開啟,顯示的十六進製制視窗一樣。

(其實如果程式想到得到某乙個或某幾個位元組的十進位制數,用struct還是很容易轉換的)

Python讀取 pcap檔案遇到的問題

在讀取 pcap檔案的時候,前面的幾個包解析出來都是正確的,但是讀到某乙個包的時候位元組數就不對了。所以把讀取的位置列印出來看是 不對。pcap pkthdr len 16 print 1 f.tell f.tell pcap pkthdr f.read pcap pkthdr len sec,mi...

pcap檔案概述

檔案整體結構示意圖 檔案整體結構描述 magic 4b 0x1a 2b 3c 4d 用來標示檔案的開始 major 2b,0 02 00 當前檔案主要的版本號 minor 2b,0 04 00當前檔案次要的版本號 thiszone 4b當地的標準時間 全零 sigfigs 4b時間戳的精度 全零 s...

pcap檔案解析 pcap檔案頭與包檔案頭(一)

前段時間接到乙個公司關於解析pacp檔案的培訓 我是被培訓的 在完成了一部分的功能後決定把一些關於pcap檔案的了解記錄到部落格中。在開始讀取pcap檔案之前,先讓我們來看看pcap檔案的大概結構。如上圖所示在乙個pcap檔案中存在1個pcap檔案頭和多個資料報,其中每個資料報都有自己的頭和包內容。...