Wireshark EtherCAT解析插件开发日志

本日志主要是记录学习wireshark插件开发的过程,以便之后查看,以及供像我同样对wireshark插件开发不了解的朋友的参考。html

最近在学习ethercat协议,可是目前wireshark中的ethercat插件没有对从站(ESC)的寄存器进行解析(从git log来看新版的会增长),因此须要增长寄存器解析这一部分。The Tao Of Fieldbus里提供了一个有ESC寄存器解析功能的插件,不过不太符合个人需求,并且在我工做用的XP系统上不能用。XP只能装1.10版的wireshark。git

找了一下写wireshark解析插件的方法,其中有一种是C语言编写的,好比生成ethercat.dll,而后放放wireshark的plugins目录下,这种效率比较高可是编译什么的比较复杂,等之后再用这种方法吧。另外一种就是采用lua写,简单的也几十行就能够完成,好比用Lua语言编写Wireshark dissector插件segmentfault

首先在Wireshark安装目录C:Program FilesWireshark下创建ecatesc.lua。
而后在init.lua中添加dofile(DATA_DIR.."ecatesc.lua")ide

clipboard.png
图中能够看到能够经过按下Ctrl+Shift+L来从新载入Lua插件,这样就能够看到代码修改后的效果,不用每次修改后都重启wireshark。函数

首先从console.lua中抄一段代码到ecatesc.lua中,验证lua能够正常运行,就当是hello world吧。工具

do
    function segment_fault()
        browser_open_url("https://segmentfault.com")
    end
    register_menu("Lua/SegmentFault", segment_fault, MENU_TOOLS_UNSORTED)
end

打开wireshark按下Ctrl+Shift+L快捷键从新载入lua后能够看到菜单 工具-lua 中多了一个SegmentFault,点击会打开SegmentFault网站。学习

clipboard.png

看了几个例子好像都须要注册到一个DissectorTable里,若是只能这样的话,ethercat就不能这样作了。网站

local udp_encap_table = DissectorTable.get("udp.port")
    udp_encap_table:add(1127,p_ScoreBoard)

还好,经过git拉下来的代码编译成功了,编译出来的版本里有有关于ESC寄存器的解析。
嗯,既然编译成功了,那我先研究一下C语言的版本吧。等我熟悉了解析插件开发的流程后再研究一下lua版本吧。ui

这个类型的文章应该放到日志里吧,放错了,下一篇放日志里吧。lua

以前我一直觉得能够只编译一个插件,而不用把wireshark所有编译了,不过研究了很久没有成功,目前先所有编译吧。

首先git clone一下wireshark的源代码,而后按照Win32/64: Step-by-Step Guide里面的步骤一步一步的作。编译的过程当中产生了error C2220的错误,warning产生的错误,而后在产生错误的文件里面添加相似#pragma warning(disable: 4047)有语句,终于编译成功了。

而后把msbuild64\run\RelWithDebInfo\plugins里的ethercat.dll复制到我已经安装的wireshark的plugins\2.0.4\目录里面,可是会提示

没法定位程序输入点call_data_dissector于动态连接库

不知道为何,难道我编译的是Debug版吗,对这个还不太了解。

用Dependency Walker看了一下原来的ethercat.dll(2.0.4版)和新版的ethercat.dll(从git仓库编译的2016-06-19)发现原来的ethercat.dll没有调用libwireshark.dll中的call_data_dissector。用DLL Export Viewer 看了一下原来的libwireshakr.dll中并无call_data_dissector这个函数,而新版的有。看来我是不能将新版本的dll放到原来的wireshark里用了,更不用说用在XP版上了。仍是lua版的比较通用吧。不过我仍是要继续看下去的。继续研究下怎么编写wireshark的插件。
原版

clipboard.png

新版

clipboard.png

相关文章
相关标签/搜索