Wireshark EtherCAT解析插件开发日志
本日志主要是记录学习wireshark插件开发的过程,以便以后查看,以及供像我一样对wireshark插件开发不了解的朋友的参考。
最近在学习ethercat协议,但是目前wireshark中的ethercat插件没有对从站(ESC)的寄存器进行解析(从git log来看新版的会增加),所以需要增加寄存器解析这一部分。The Tao Of Fieldbus里提供了一个有ESC寄存器解析功能的插件,不过不太符合我的需求,而且在我工作用的XP系统上不能用。XP只能装1.10版的wireshark。
找了一下写wireshark解析插件的方法,其中有一种是C语言编写的,比如生成ethercat.dll,然后放放wireshark的plugins目录下,这种效率比较高但是编译什么的比较复杂,等以后再用这种方法吧。另一种就是采用lua写,简单的也几十行就可以完成,比如用Lua语言编写Wireshark dissector插件。
首先在Wireshark安装目录C:Program FilesWireshark下建立ecatesc.lua。
然后在init.lua中添加dofile(DATA_DIR.."ecatesc.lua")。
图中可以看到可以通过按下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网站。
看了几个例子好像都需要注册到一个DissectorTable里,如果只能这样的话,ethercat就不能这样做了。
local udp_encap_table = DissectorTable.get("udp.port")udp_encap_table:add(1127,p_ScoreBoard)
还好,通过git拉下来的代码编译成功了,编译出来的版本里有有关于ESC寄存器的解析。
嗯,既然编译成功了,那我先研究一下C语言的版本吧。等我熟悉了解析插件开发的流程后再研究一下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的插件。
原版
新版
关键字:lua, wireshark, c
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!