汽车以太网协议之 SOME/IP(下)

2022-11-14 11:30:11 浏览数 (1)

本篇文章接上篇《汽车以太网协议之 SOME/IP(上)》,介绍 Wireshark 解析 SOME/IP 协议以及利用 ANDi 模拟发送 SOME/IP & SOME/IP-SD 包

Wireshark 解析 SOME/IP 协议

Wireshark 自带的解析

自 Wireshark 3.2 SOME/IP 发布以来,SOME/IP 支持就已公开,可以在 Wireshark 上解析 SOME/IP 数据。在 github 的 wireshark 仓库中,可以找到 SOME/IP 的解析代码 epan/dissectors/packet-someip.c 、epan/dissectors/packet-someip-sd.c。

以下操作中都将使用 Wireshark 的 3.6.3 版本。

先从网上找一些 SOME/IP 的数据来测试一下,在 https://github.com/thunder2005/SOMEIP 中找到一些数据包:

直接将 vsomeip抓包.pcapng 拖入 Wireshark 后,可以看出数据包并没有被解析:

要想在 Wireshark 中能够自动解析 SOME/IP 协议的数据包,需要启用协议,操作如下:

配置过后,数据包自动被解析:

Wireshark lua 插件解析

此外,还可以用 lua 脚本来解析。https://github.com/jamores/eth-ws-someip 中有 SOME/IP 和 SOME/IP-SD 的 Wireshark LUA 解析器。vsomeip.lua 是用于Wireshark解析SOME/IP 协议的lua插件。

在Wireshark 中启用插件配置如下:

1、确认 Wireshark找到用户创建插件的路径。

帮助 -> 关于 -> 文件夹

2、下载项目后,拷贝其中的以下文件放到指定的 plugin 目录下:

在进行以上操作之后,拖入数据包到 Wireshark 时出现了如下报错:

报错意思是名字重复了,因为 wireshark 本身就支持 someip,所以这里给插件 someip.lua 中的 p_someip = Proto("someip", xx) 任意修改如下:

此时再加载会报另外一个错误:

出现以上报错的原因在这一句:

Dissector.get 的参数原本是 someip ,它的参数和 p_someip = Proto("someip", xx) 修改后的名字保持一致就没有问题了。

利用ANDi 模拟发送SOME/IP&SOME/IP-SD 包

ANDi 是一款汽车以太网专用仿真测试软件,由 Technica Engineering 公司于 2009 年开发推出。

2012年,Technica为宝马提供了SOME/IP测试服务。

2013年,Techncia与宝马、Valeo、博通一道在2013年成功实施了世界第一个车载以太网量产项目,即宝马X5 环视系统。

2016年,Technica为奥迪提供SOME/IP测试服务。

2019年11月1日,SOME/IP标准的制定者,Lars Völker加入Technica。

ANDi 工具有免费的版本和付费版本。

免费版下载:

https://files.technica-engineering.de/ANDi Free/

付费版下载:https://files.technica-engineering.de/ANDi/

免费版试用之后,功能像是 Wireshark ,可以直接解析 SOME/IP 的数据包。

根据官网介绍,付费版 ANDi Premium 中可以模拟发送 SOME/IP 和 SOME/IP SD 流量。模拟发送教程可参考:

https://files.technica-engineering.de/ANDi/Documentation/Tutorials/ANDi_frequent_use_cases.html

ANDi Premium 申请试用流程

付费版 ANDi Premium 的申请流程不复杂,本次下载的是当前最新的 SetupANDi_v1.0.0.exe。

安装之后通过提示的 “Request License” 创建一个请求文件,请求文件形如:

之后,向 "support@technica-engineering.de" 发送一封邮件,表示想申请试用 ANDi Premium ,并将请求文件添加进附件。

在邮件回复中,technica-engineering 会提供一个个人专属的门户网站链接,注册登录之后,在 “产品试用问题” 中提问,提问内容可以和之前邮件中发送的一样,说明想要获得 ANDi Premium 试用机会即可。

客服人员之后会在门户网站上响应,并且发送形如下图中的许可文件:

将下载下来的许可文件,导入到 CodeMeter 控制中心中即可,该程序在 ANDi Premium 安装之后就会自动运行。

申请之后,可以试用 30 天的时间,具体的信息可以点击 “Web 管理界面” 进行查看。

ANDi Premium 使用

ANDi Premium 界面如下:

在使用任何功能之前,首先配置一下 Adapters。

Channel 列可以进行自定义修改,为每个 Channel 选择一块对应的网卡。

对于使用 ANDi 模拟发送 SOME/IP 和 SOME/IP SD 的包,可以通过脚本来实现:

脚本代码:

代码语言:javascript复制
from project import * 
# set ethernet and ip header
someip_msg_4.ethernet_header.mac_address_source = "源mac地址"
someip_msg_4.ip_header.ip_address_source = "源ip地址"
someip_msg_4.ethernet_header.mac_address_destination = "目的mac地址"
someip_msg_4.ip_header.ip_address_destination = "目的ip地址"

# set SOME/IP specific fields
someip_msg_4.someip_header.service_identifier = 0x1111
someip_msg_4.someip_header.method_identifier = 0x2222
someip_msg_4.someip_header.interface_version = 0x02
someip_msg_4.someip_header.protocol_version = 0x03
someip_msg_4.someip_header.request_id = 0x4444

# set payload of SOME/IP message
someip_msg_4.payload = System.Array[Byte]([0x11,0x22,0x33])

# send the message
someip_msg_4.send()

使用 ANDi Free 版抓包如下:

参考链接

[1] https://www.wireshark.org/docs/dfref/s/someip.html wireshark 官网 someip

[2] https://www.wireshark.org/docs/dfref/s/someipsd.html wireshark 官网 someip-sd

[3] ANDi 官网链接:https://technica-engineering.de/en/produkt/andi-automotive-network-diagnoser/

[4] ANDi软件使用教程 https://files.technica-engineering.de/ANDi/Documentation/

0 人点赞