当前位置: 首页 > news >正文

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

文章目录

  • 1.安装scapy库
  • 2.解析someip格式报文
  • 3.示例

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 socketudpServer = 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 socketudpClient = 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端窗口:

在这里插入图片描述

http://www.lryc.cn/news/132646.html

相关文章:

  • C#与西门子PLC1500的ModbusTcp服务器通信2--ModbusTcp协议
  • SpringBoot + MyBatis-Plus构建树形结构的几种方式
  • linux vscode 下开发
  • 【工具】python代码编辑器--PyCharm下载安装和介绍
  • SpringBoot第44讲:SpringBoot集成Redis - Redis分布式锁的实现之Jedis(setNXPX+Lua)
  • STM32F4X USART串口使用
  • python实现两个字符串比对差异点
  • SQLite数据库实现数据增删改查
  • 【Golang系统开发】搜索引擎(2) 压缩词典
  • clickhouse修改默认密码
  • 基于java在线捐赠系统设计与实现
  • 【前端】vscode javascript 代码片段失效问题解决
  • AE-卡通人物解说动画视频的制作
  • Linux 查看日志
  • 使用IO多路复用select完成TCP循环服务器接收客户端消息并打印
  • unity之Input.GetKeyDown与Input.GetKey区别
  • excel 核心快捷键用法
  • postgresql
  • AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解
  • 基于Java+SpringBoot+Vue的学校田径运动会管理系统【源码+论文+演示视频+包运行成功】
  • 使用 Visual Studio Code Docker 工具调试 .NET 容器
  • AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!
  • opencv进阶07-支持向量机cv2.ml.SVM_create()简介及示例
  • LA@n维向量@解析几何向量和线性代数向量
  • go 协程并发数控制
  • MySQL的安装以及卸载
  • LRU算法与Caffeine、Redis中的缓存淘汰策略
  • HTML笔记(3)
  • c++——重写(覆盖),实际上对应的就是虚函数
  • 算法通关村——字符串反转问题解析