// TODO: 部分内容需要修改

1. 骨架

首先新建一个文件,命名为foo.lua,注意此文件的编码方式不能是带BOM的UTF8,否则wireshark加载它时会出错(不识别BOM):

-- @brief Foo Protocol dissector plugin
-- @author zzq
-- @date 2015.08.12 -- create a new dissector
local NAME = "foo"
local PORT =
local foo = Proto(NAME, "Foo Protocol") -- dissect packet
function foo.dissector (tvb, pinfo, tree)
end -- register this dissector
DissectorTable.get("udp.port"):add(PORT, foo)

这是一个lua解析器的骨架:创建解析器对象、解析器函数、将解析器注册到wireshark解析表。

写完之后,将foo.lua拷贝到plugins/<版本号>目录即可,然后用文件打开之前抓的foo协议的Pcap文件foo.pcap。

是的,wireshark没有提示错误,然而什么变化也没有:当然,因为我们没有编写实际的解析代码。

依次打开”Internals”、”Dissector tables“菜单,选中”Interger tables”标签页,下拉滚动条,找到“UDP port“树节点,展开,再往下来,会发现FOO协议赫然在列,证明foo插件确实被正确加载了:

2. 完善

下面需要写一些具体的代码,首先是定义foo协议的各个字段:

-- create fields of foo
local fields = foo.fields
fields.type = ProtoField.uint8 (NAME .. ".type", "Type")
fields.flags = ProtoField.uint8 (NAME .. ".flags", "Flags")
fields.seqno = ProtoField.uint16(NAME .. ".seqno", "Seq No.")
fields.ipaddr = ProtoField.ipv4(NAME .. ".ipaddr", "IPv4 Address")

根据foo协议字段类型的不同,分别调用ProtoField的不同方法创建它们,其中第一个参数是字段的缩写,第2个参数是字段的全名,另外还有一些可选参数表示进制,掩码之类,这里略去。

然后编写具体的解析函数:

-- dissect packet
function foo.dissector (tvb, pinfo, tree)
local subtree = tree:add(foo, tvb())
local offset = -- show protocol name in protocol column
pinfo.cols.protocol = foo.name -- dissect field one by one, and add to protocol tree
local type = tvb(offset, )
subtree:add(fields.type, type)
subtree:append_text(", type: " .. type:uint())
offset = offset + subtree:add(fields.flags, tvb(offset, ))
offset = offset +
subtree:add(fields.seqno, tvb(offset, ))
offset = offset +
subtree:add(fields.ipaddr, tvb(offset, ))
end

wireshark约定解析器函数接口有3个参数,第一个是报文数据buffer tvb,第2个是报文信息结构pinfo,第3个是协议解析树tree。

subtree = tree:add(foo, tvb())为foo协议往协议解析树上添加了一个新节点subtree;

pinfo.cols.protocol = foo.name把wireshark报文列表上的”Protocol“列的文本置为foo协议名称”Foo”;

接下来,根据Foo协议的规范依次解析各字段,并把它们的信息加入到协议解析树。

编写完成后把新的foo.lua拷贝到插件目录,重启wireshark打开foo.pcap,显示效果如下:

也可以对foo协议应用显示过滤器:

【wireshark】插件开发(三):Lua插件 Dissector的更多相关文章

  1. Wireshark使用drcom_2011.lua插件协助分析drcom协议

    drcom_2011.lua是来源于Google code上的一个开源项目中的一个插件,感谢网络大神的分享 需要使用drcom_2011.lua分析drcom协议的话,需要把drcom_2011.lu ...

  2. sonarqube插件开发(三) 调试插件

    环境 windows + eclipse +sonarqube server 5.6.4 准备 新建一个maven项目,其中加入了一些插件所用的jar <project xmlns=" ...

  3. 【wireshark】插件开发(四):Lua插件Post-dissector和Listener

    1. Post-dissector post-dissector和dissector不同,它会在所有dissectors都执行过后再被执行,这也就post前缀的由来.post-dissector的构建 ...

  4. 基于Lua插件化的Pcap流量监听代理

    1.前言 我们在实际工作中,遇到了一个这样的用例,在每天例行扫描活动中,发现有些应用系统不定期的被扫挂,因为我们不是服务的制造者,没有办法在不同的系统里打印日志,所以我们就想用一个工具来获取特定服务的 ...

  5. 【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解

    Eclipse插件开发5--时间插件Timer开发实例详解 这里做的TimeHelper插件设定为在菜单栏.工具栏提供快捷方式,需要在相应地方设置扩展点,最后弹出窗体显示时间. 在上一篇文章里创建好了 ...

  6. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  7. word插件开发 运行时,插件不启动.

      word插件开发 运行时,插件不启动. 查看插件信息时. 在禁用的应用程序加载项中.   启动禁用的插件: 点击转到.  选择你要启动的插件就可以了.

  8. Visual Studio2012 Lua插件--BabeLua

    之前,找了好久VS2012的Lua插件,没有找到. 今天在http://www.cocoachina.com/bbs/read.php? tid-205043.html 看到了.cocos2dx-qu ...

  9. Lua IDE工具-Intellij IDEA+lua插件配置教程(Chianr出品)

    Lua 编译工具IDE-Intellij IDEA 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Ch ...

随机推荐

  1. Ubuntu 配置网卡信息

    关于图形界面的配置,我这里就不多介绍了,这个很简单.这里介绍的是如何通过修改配置文件来实现虚拟网卡. 首先介绍ubuntu(我这里使用的是ubuntu-16.04)下虚拟网卡的配置 1.先用ifcon ...

  2. 7. Debug on local machine

    Step 1:

  3. ubuntu16.04 LTS Server 安装mysql phpmyadmin apache2 php5.6环境

    1.安装apache sudo apt-get install apache2 为了测试apache2是否正常,访问http://localhost/或http://127.0.0.1/,出现It W ...

  4. 运行 .jar dos 命令

    命令行进入 jar  所在文件夹 执行 java -jar  a.jar;

  5. 记录pytorch的几个问题

    1.Variable里面的creator没有,网上博客上面说有,奇怪??

  6. Django入门指南-第7章:模板引擎设置(完结)

    http://127.0.0.1:8000/ <!--templates/home.html--> <!DOCTYPE html> <html> <head& ...

  7. CodeForces 611C New Year and Domino (动态规划,DP)

    题意:给定一个h*w的网格,里面只有.和#,.表示空的,#表示禁止的,然后有q个询问,询问中给你两个坐标,分别是左上和右下,求在这两者中间的有多少种(竖着和横着)两个相邻的点. 析:一看到这个题目,肯 ...

  8. 12) maven-compiler-plugin

    The Compiler Plugin is used to compile the sources of your project. At present the default source se ...

  9. (转)SQL Server 2008无法修改表的解决办法

    转自:http://www.soaspx.com/dotnet/sql/mssql/sql2008/sqlserver2008_20121010_9683.html 在SQL Server 2008 ...

  10. (并查集 建立关系)食物链 -- POJ-- 1182

    链接: http://poj.org/problem?id=1182 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...