【Python】使用python解析someip报文,以someip格式打印报文

1.安装scapy库

使用 pip 安装 scapy 第三方库,打开 cmd,输入以下命令:

pip install scapy

出现如图所示,表示安装成功:

在这里插入图片描述

2.解析someip格式报文

要解析someip格式报文,需要导入someip模块:

from scapy.contrib.automotive.someip import *
# 导入someip模块
from scapy.contrib.automotive.someip import * 

# 普通格式的someip报文
data = b"\x07\xff\x80\x01\x00\x00\x00S\x00\x00\x00\x06\x01\x01\x02\x00\x0c\xf1\xdds\x84\x00\x00\x00>[\x19\xa2\xd1aV\xce'\xc1)\xa9x02Eg\x00\x00\x00D"

someipData  = SOMEIP(_pkt=data) # 解析普通格式报文为someip格式
someipData.show() # 打印someip格式的报文

打印的someip格式报文如下:

在这里插入图片描述

3.示例

以下通过udp收发someip报文,示例如下:

1.新建文件udp_server.py,用于模拟server

from scapy.contrib.automotive.someip import * 
import socket

udpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建socket对象,走udp通道
host = socket.gethostname() # 获取本地主机名
port = 1000
serverAddr = (host, port)
udpServer.bind(serverAddr) # 绑定服务端地址

clientData, clientAddr = udpServer.recvfrom(1024) # 接收来自客户端的数据
print(clientData) # 打印普通格式报文
someipData = SOMEIP(_pkt=clientData)
someipData.show() # 打印someip格式报文
udpServer.sendto(clientData, clientAddr) # 发送数据给客户端
udpServer.close()
    

2.新建文件udp_client.py,用于模拟client

import socket

udpClient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建socket对象,走udp通道
host = socket.gethostname() # 获取本地主机名
port = 1000
serverAddr = (host, port)

# someip报文
data = b"\x07\xff\x80\x01\x00\x00\x00S\x00\x00\x00\x06\x01\x01\x02\x00\x0c\xf1\xdds\x84\x00\x00\x00>[\x19\xa2\xd1aV\xce'\xc1)\xa9x02Eg\x00\x00\x00D"

udpClient.sendto(data, serverAddr) # 发送报文给服务端
udpClient.close()
    

3.打开两个cmd窗口,一个为server端窗口,另一个为client端窗口

运行顺序,先启动server,后启动client:

  • server端窗口,先执行命令 python udp_server.py
  • client端窗口,后执行命令 python udp_client.py

运行结果如下:

server端窗口:

在这里插入图片描述

client端窗口:

在这里插入图片描述

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值