#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解析完成,停止比较
最终结论:整体来说报文内容不相同
'''