本篇文章接上篇《汽车以太网协议之 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%20Free/
付费版下载: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 的包,可以通过脚本来实现:
脚本代码:
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/