使用python依次比较两个pcap文件中的每个报文

#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解析完成,停止比较

最终结论:整体来说报文内容不相同

'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值