ChargePoint/wireshark-v2g

GitHub: ChargePoint/wireshark-v2g

一个 Wireshark 插件,用于解析和调试电动汽车 V2G(Vehicle-to-Grid)充电通信协议。

Stars: 62 | Forks: 21

# wireshark-v2g - 用于 V2G 通信的协议解析器 [![构建 Ubuntu 插件](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/04d1735c2d074335.svg)](https://github.com/ChargePoint/wireshark-v2g/actions/workflows/ubuntu.yml) [![构建 MacOS 插件](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/403c81d69b074336.svg)](https://github.com/ChargePoint/wireshark-v2g/actions/workflows/macos.yml) [![构建 Windows 插件](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b0c8f26c9e074338.svg)](https://github.com/ChargePoint/wireshark-v2g/actions/workflows/windows.yml) ## 概述 Vehicle to Grid 协议用于充电应用,本项目 提供了协议解码和分析的参考。 * Wireshark 的 LUA 文档:https://wiki.wireshark.org/Lua * Wireshark 的开发文档:https://wiki.wireshark.org/Development * OpenV2G 文档:http://openv2g.sourceforge.net ## 快速开始 根据所使用的主机选择合适的归档文件 * linux-x86_64 * macos-x86_64 * win64 请按照说明,根据不同平台将预构建的发布镜像 安装到 Wireshark 中。 文件复制完成后,重启 Wireshark,这些 v2g 插件 现在应该会列在 __关于 Wireshark__ 界面的插件 选项卡中。对于 tshark,使用命令行选项 `tshark -G plugins` 将列出已加载的内容。 ### Linux 和 MacOS 个人插件文件夹是 `~/.local/lib/wireshark/plugins`,因此 需要将资产中的 v2g.lua 和 v2gexi.so 文件解压并 放置在此目录中。 对于 Linux - 将 v2g.lua 复制到 `~/.local/lib/wireshark/plugins` - 将 v2gexi.so 复制到 `~/.local/lib/wireshark/plugins/4.2/epan` 对于 Mac - 将 v2g.lua 复制到 `~/.local/lib/wireshark/plugins` - 将 v2gexi.so 复制到 `~/.local/lib/wireshark/plugins/4-2/epan` ### Windows Windows 的个人插件文件夹是 `%APPDATA%/Wireshark/plugins` 为了确保 dll 能在 Windows 上加载,它的布局可能有些不同。 - 将 v2g.lua 复制到 `%APPDATA%/Wireshark/plugins` - 将 v2gexi.dll 复制到 `%APPDATA%/Wireshark/plugins/4.2/epan` __注意__:也可以使用 `Program Files` 下 `Wireshark` 目录中的全局 插件文件夹(即 Wireshark.exe 所在的位置)。那里的插件文件夹可以作为 复制 v2g 文件的目标位置。 ## 构建 此插件不作为 Wireshark 源码的一部分分发,在 被合并之前——它可以作为独立插件构建,也可以 作为完整 Wireshark 构建的一部分。 ### Linux #### 独立插件 在 Debian/Ubuntu 上构建并安装此插件: ``` sudo add-apt-repository ppa:wireshark-dev/stable -y sudo apt -get install tshark wireshark wireshark-dev git clone https://github.com/ChargePoint/wireshark-v2g.git mkdir wireshark-v2g/build && cd wireshark-v2g/build cmake .. make sudo make install ``` #### 源码插件 将插件作为 Wireshark 的一部分进行构建和安装(即永久安装) 1. 获取 Wireshark 仓库并更改目录以便进行后续步骤 git clone https://gitlab.com/wireshark/wireshark cd wireshark git checkout release-4.2 2. 将 V2G 插件复制到新的 `plugins/epan/v2g` 目录 git clone https://github.com/ChargePoint/wireshark-v2g.git plugins/epan/v2g 3. 修补 Wireshark 中的 cmake 以包含 v2g 插件 git apply plugins/epan/v2g/extern/wireshark-release-4.2.patch 4. 使用 v2g 插件执行新的 Wireshark 构建 mkdir -p build && cd build cmake .. make sudo make install ### Mac OS X 构建过程类似于 Linux 构建,但基于 homebrew。这意味着大多数设置都需要一个完整的构建, 其中包括获取 brew 配方。 有关 macOS 的软件包安装和构建步骤, 请参见 GitHub 的 workflows。 1. 获取 Wireshark 仓库并更改目录以便进行后续步骤 git clone https://gitlab.com/wireshark/wireshark cd wireshark git checkout release-4.2 2. 将 V2G 插件复制到新的 `plugins/epan/v2g` 目录 git clone https://github.com/ChargePoint/wireshark-v2g.git plugins/epan/v2g 3. 修补 Wireshark 中的 cmake 以包含 v2g 插件 git apply plugins/epan/v2g/extern/wireshark-release-4.2.patch 4. 使用 Wireshark tools 脚本配置 brew 进行构建 sh tools/macos-setup-brew.sh 5. 使用 v2g 插件执行新的 Wireshark 构建 mkdir -p build && cd build cmake -DFETCH_lua=ON -GNinja .. ninja ninja plugins # 推荐的安装目录 cp -a run/Wireshark.app /Applications/ ### Windows 在此特定平台上,插件需要作为源码树的一部分进行构建。 因此,需要进行以下步骤来完成完整的构建设置。 1. 请遵循 Wireshark Windows 的[分步指南](https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html) 2. 将 V2G 插件复制到 `plugins/epan/v2g` 目录 3. 修补 Wireshark 构建系统以包含此插件 git apply plugins/epan/v2g/extern/wireshark-release-4.2.patch 4. 执行包含插件的完整构建 ## 用法 假设已经执行了插件的构建和安装, 通过 tshark 进行集成和显示的基本测试可以 快速检查插件的解析和显示。 ``` tshark -V -r ../wireshark-v2g/pcaps/test.pcap 2>&1 ``` *注意:* 对于开发者,可以使用输出到 stderr 的 fprintf 来 追踪并确定解析错误的可能来源。 ## 解密 TLS 负载 ### 自动方法 在 tools 文件夹下有一个简单的 Python 脚本,它可以获取 V2G 调试数据包捕获文件,提取密钥,使用 Wireshark 的 `editcap` 实用程序提取 TLS 会话密钥并将其应用到整个抓包记录中。 #### 前置条件安装 如果您已安装 python3,则可以安装 `scapy`,或者使用 包含在 `tools/` 目录中的 `pipenv`。 不使用 pipenv 安装 scapy:`python3 -m pip install scapy==2.4.5` 使用 pipenv:`pipenv shell` #### 运行 `extract_secrets.py` ``` $ ./extract_secrets.py -f ../../pcaps/plc_20210810T190140.pcap WARNING: No IPv4 address found on en3 ! WARNING: No IPv4 address found on en4 ! WARNING: more No IPv4 address found on en1 ! TLS was requested by fe80::218:23ff:fe0f:fbfe:49156 found potential session key on raw UDP packet with dest port 49156 writing ../pcaps/plc_20210810T190140_secret.txt editcap --inject-secrets tls,../pcaps/plc_20210810T190140_secret.txt ../pcaps/plc_20210810T190140.pcap ../pcaps/plc_20210810T190140_decrypted.pcap ``` ### 手动方法 大多数调试记录会通过从随机端口发送到车辆端口的 单个 UDP 数据包来记录 TLS 会话密钥。在其中您会找到 类似以下内容的密钥: ``` CLIENT_RANDOM 6112d032475e758bbf8eaf2b0a540f3f2c7a6f6d1a9b48935d16c468086822f5 8471a233b4f1926084b68977a28ef8b65f59fea4b4942800539ba1d991a98c3f81e29a109d394606bd91286981dbd122 ``` ## 解码整个 EXI 流 ### 辅助程序 * `yq`(`jq` 的同类工具)附带了 `xq`,用于 XML -> JSON 转换 * 还推荐使用 `tidy`(OSX 自带)来美化 XML 数据 在对抓包记录进行解码后,您可以使用以下命令导出数据进行解码: ### 构建并运行 docker 容器 ``` cd tools/docker/decoder docker build -t decoder:test . docker run --name=decoder --rm -p 9000:9000/tcp -d decoder:test ``` ### 导出抓包流中的所有特定 EXI 负载 以下命令将导出所有的抓包 EXI 数据并 将其直接解码输出到 stdout ``` tshark -X lua_script:v2g.lua -r ~/Downloads/Analyzer_M043_decrypted.pcap -Y "exi" -T json | jq '.[]._source.layers.v2gtp.exi.data."data.data"' | sed s/\://g | sed s/\"//g | while read line; do curl -s -X POST -H "Expect:" -H "Format: EXI" -d ${line} http://localhost:9000 |tidy -xml -iq;done ``` ### 完成后,终止容器: ``` docker kill decoder ```
标签:Bash脚本, rizin, V2G协议, Wireshark插件, 客户端加密, 流量解析, 物联网, 电动汽车, 网络协议分析, 请求拦截, 逆向工具