目的
现在自动驾驶领域越来越多的采用someip协议进行信号的传递。wireshark抓包后,不利于数据进行数据的后处理,所以需要用python对数据进行解析。
从一个pcap网络数据包捕获文件中提取时间戳,并将这些时间戳保存到一个Excel文件中。代码首先创建了一个新的Excel工作簿,然后遍历pcap文件中的每个数据包。对于每个数据包,它检查以太网帧的源和目的MAC地址,如果匹配指定的地址,它会继续解析IP层和TCP层(如果存在的话),然后提取时间戳并将其添加到Excel工作表中。在所有数据包都被处理后,它会保存Excel文件。
获得解析的内容后,则可以在excel 中对数据处理,比如分析丢帧的情况。
素材准备
如下为pcap包 someip 官方协议文档
Wireshark · Display Filter Reference: SOME/IP Protocol
代码及解析
#导入dpkt库用于解析pcap包
import dpkt
#导入datetime库,用于时间解析
import datetime
# 导入openpyxl库,用于创建和编辑Excel文件
import openpyxl
def extract_timestamps_to_excel(pcap_file, excel_file):
# 创建一个新的Excel工作簿
workbook = openpyxl.Workbook()
# 获取工作簿的活动工作表
worksheet = workbook.active
# 设置工作表的标题为"Timestamps"
worksheet.title = "Timestamps"
# 添加表头
worksheet.append(["Timestamp"])
# 打开pcap文件
with open("C:\\Users\JOHN\Desktop\\12345.pcap", 'rb') as f:
# 使用dpkt读取pcap文件
pcap = dpkt.pcap.Reader(f)
# 遍历pcap中的每个包
try:
for ts, buf in pcap:
# 解析以太网帧
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
#以下打印用于调试示例,可以设置不同的筛选条件用于过滤所需的pcap包内容
#tcp = ip.data
#print("Ethernet Frame:", eth.src, eth.dst, eth.type)
#print('source port;', tcp.sport)
#print('dst port', tcp.dport)
# 检查以太网帧的源MAC地址和目的MAC地址是否匹配指定的地址
if eth.src==b'\x02G\x00\x00\x000' and eth.dst== b'\x02G\x00\x00\x00\x0e':
# 提取时间戳并转换为可读的日期时间格式
packet_time = datetime.datetime.utcfromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S.%f")
print('time', packet_time)
# 将时间戳添加到Excel工作表的新行中
worksheet.append([packet_time])
# 保存Excel文件
workbook.save(excel_file)
except:
pass
#定义主函数,用于调用extract_timestamps_to_excel函数
def main():
pcap_file = "C:\\Users\JOHN\Desktop\\12345.pcap"
excel_file = "C:\\Users\JOHN\Desktop\\timestamps-1.xlsx"
extract_timestamps_to_excel(pcap_file, excel_file)
# 如果这个脚本是作为主程序运行(而不是被其他脚本导入),则执行main函数
if __name__ == "__main__":
main()
数据后处理
将pcap包保存到excel 或mat格式后,就可以用工具对数据进行处理了