一、背景
公司某个项目的开发过程中使用了基于TCP的自定义协议。CS交互过程中的数据包是使用tls协商的会话密钥加密过的,使用Wireshark抓取的数据包没办法看出具体的通信数据。那么有没有办法直接看到通信数据明文呢?经过一番研究发现Wireshark提供的dissector插件机制提供了一个很好的解决方案。
二、编译Wireshark源码(3.4.4版本)
Wireshark dissector没有独立的编译环境,需要跟Wireshark源码一起编译,所以第一步就是需要成功的编译Wireshark源码,具体的过程可以阅读源码根目录下的INSTALL文件,或者参考这篇文章
在编译过程中遇到了Moc相关的报错,解决方案是打开源码根目录下的CMakeLists.txt,增加一行内容:set(CMAKE_AUTOMOC ON)
三、dissector开发
dissector的开发可以参考源码目录下的doc/README.dissector、doc/README.heuristic等几篇说明文档,下面简单介绍下主要步骤。
1. 创建插件目录
在 plugins/epan目录下创建 vhsm 目录,然后将 plugins/epan/gryphon目录下的文件复制一份到foo目录下,将packet-gryphon名称改为packet-foo,修改对应的CMakeLists.txt等文件内容
2. 创建并编辑 CMakeListsCustom.txt
将源码根目录下的CMakeListsCustom.txt.example改名为CMakeListsCustom.txt(也可以复制一份出来改名),增加以下内容
set(CUSTOM_PLUGIN_SRC_DIR
plugins/epan/vhsm
)
目的是告诉CMake把自己的dissector源码目录包含进来
3. 编写dissector代码
参考这篇文章:wireshark协议插件开发--官方文档中文翻译
4. 编译插件
重新编译wireshark源码,即可生成我们自己的插件dll文件了
四、plugin部署
插件的部署很简单,把dll放到指定目录下就可以了,wireshark启动的时候会自动加载
1. 安装3.4.4版本wireshark至目录<InstallDir>
2. 把插件dll放到目录 <InstallDir>/plugins/3.4/epan 下
3. 运行wireshark
最后上一张效果图: