#coding=UTF-8
#author="劉一凡"
#date=20190826
'''
程序功能
依次比較兩個pcap文件中的每個報文。如果報文不同,則輸出不相同的字節的偏移量
文件長度不同,報文長度不同時,給出提示。但是也進行比較。直到有一個文件沒有內容了
使用方法:
將要比較的文件名賦值給變量file1和file2
'''
file1 = "pim1.pcap"
file2 = "pim3.pcap"
PCAP_HEADER_LENGTH = 24
PCAP_RECORD_HEADER_LENGTH = 16
FRAME_LENGTH_OFFSET =8
import struct
#以二進制模式打開文件,返回<class '_io.BufferedReader'>對象
pcap_file1 = open(file1,'rb')
#返回<class 'bytes'>對象
file_data1 = pcap_file1.read()
offset1 = PCAP_HEADER_LENGTH
pcap_file2 = open(file2,'rb')
file_data2 = pcap_file2.read()
offset2 = PCAP_HEADER_LENGTH
same_flag = True
if len(file_data1)!=len(file_data2):
same_flag = False
print("兩個文件長度不同!")
print("{}長度爲{}字節".format(file1,len(file_data1)))
print("{}長度爲{}字節".format(file2,len(file_data2)))
else:
print("兩個文件長度相同,爲{}字節".format(len(file_data1)))
print("")
frame_count=1
while(1):
print("比較第{}個報文:".format(frame_count))
#Format Character是'I',表示unsigned int
frame_length1 = struct.unpack('I',file_data1[offset1+FRAME_LENGTH_OFFSET:offset1+FRAME_LENGTH_OFFSET+4])[0]
frame_length2 = struct.unpack('I',file_data2[offset2+FRAME_LENGTH_OFFSET:offset2+FRAME_LENGTH_OFFSET+4])[0]
frame_data1 = file_data1[offset1+PCAP_RECORD_HEADER_LENGTH:offset1+PCAP_RECORD_HEADER_LENGTH+frame_length1]
frame_data2 = file_data2[offset2+PCAP_RECORD_HEADER_LENGTH:offset2+PCAP_RECORD_HEADER_LENGTH+frame_length2]
if frame_length1 != frame_length2:
same_flag = False
print("報文長度不相同")
print("{}中這個報文長度爲{}".format(file1,frame_length1))
print("{}中這個報文長度爲{}".format(file2,frame_length2))
if frame_data1 != frame_data2:
same_flag = False
print("報文內容不相同,不相同的字節偏移量爲")
for i in range(frame_length1 if frame_length1<=frame_length2 else frame_length2):
if frame_data1[i]!=frame_data2[i]:
print(i,end=" ")
print("")
else:
print("報文內容相同")
offset1 += PCAP_RECORD_HEADER_LENGTH + frame_length1
offset2 += PCAP_RECORD_HEADER_LENGTH + frame_length2
frame_count+=1
if offset1 >= len(file_data1):
print("{}解析完成,停止比較".format(file1))
break
if offset2 >= len(file_data2):
print("{}解析完成,停止比較".format(file2))
break
pcap_file1.close()
pcap_file2.close()
print('')
print("最終結論:整體來說報文內容",end="")
if same_flag:
print("相同")
else:
print("不相同")
'''
輸出舉例:
輸出舉例1:
兩個文件長度不同!
vrrp.pcap長度爲1620字節
pim1.pcap長度爲344字節
比較第1個報文:
報文內容不相同,不相同的字節偏移量爲
5 8 9 10 11 14 15 19 20 22 23 24 25 26 27 28 29 33 34 35 36 37 38 39 40 41 42 43 44 45 46 50 53 54 55 56 57 58 59
比較第2個報文:
報文長度不相同
vrrp.pcap中這個報文長度爲60
pim1.pcap中這個報文長度爲68
報文內容不相同,不相同的字節偏移量爲
5 8 9 10 11 15 17 18 19 22 23 24 25 26 27 28 29 33 34 36 37 40 41 42 43 44 45 47 51 53 55 56 57 58 59
比較第3個報文:
報文長度不相同
vrrp.pcap中這個報文長度爲60
pim1.pcap中這個報文長度爲68
報文內容不相同,不相同的字節偏移量爲
5 8 9 10 11 15 17 18 19 22 23 24 25 26 27 28 29 33 34 36 37 40 41 42 43 44 45 47 51 53 55 56 57 58 59
比較第4個報文:
報文內容不相同,不相同的字節偏移量爲
5 8 9 10 11 14 15 19 20 22 23 24 25 26 27 28 29 33 34 35 36 37 38 39 40 41 42 43 44 45 46 50 53 54 55 56 57 58 59
pim1.pcap解析完成,停止比較
最終結論:整體來說報文內容不相同
輸出舉例2:
兩個文件長度相同,爲344字節
比較第1個報文:
報文內容相同
比較第2個報文:
報文內容相同
比較第3個報文:
報文內容相同
比較第4個報文:
報文內容相同
pim2.pcap解析完成,停止比較
最終結論:整體來說報文內容相同
輸出舉例:3
兩個文件長度相同,爲344字節
比較第1個報文:
報文內容不相同,不相同的字節偏移量爲
0
比較第2個報文:
報文內容相同
比較第3個報文:
報文內容不相同,不相同的字節偏移量爲
18
比較第4個報文:
報文內容不相同,不相同的字節偏移量爲
59
pim1.pcap解析完成,停止比較
最終結論:整體來說報文內容不相同
'''