【wireshark】插件开发(三):Lua插件 Dissector

// 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 = 9877
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 = 0

    -- 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, 1)
    subtree:add(fields.type, type)
    subtree:append_text(", type: " .. type:uint())
    offset = offset + 1

    subtree:add(fields.flags, tvb(offset, 1))
    offset = offset + 1
    subtree:add(fields.seqno, tvb(offset, 2))
    offset = offset + 2
    subtree:add(fields.ipaddr, tvb(offset, 4))
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协议应用显示过滤器:

时间: 2024-12-23 08:13:21

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

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

drcom_2011.lua是来源于Google code上的一个开源项目中的一个插件,感谢网络大神的分享 需要使用drcom_2011.lua分析drcom协议的话,需要把drcom_2011.lua放到wireshark安装目录下(例如C:\Program Files\Wireshark), 然后打开安装目录的init.lua(用高级一些的文件编辑器打开可以看到分行信息),在最后一行加入dofile("drcom_2011.lua"),保存. 然后重启wireshark,在筛选器那

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

环境 windows + eclipse +sonarqube server 5.6.4 准备 新建一个maven项目,其中加入了一些插件所用的jar <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/PO

wireshark插件开发 - Lua插件解析

wireshark支持C语言和Lua语言开发插件,本部分内先介绍Lua插件部分开发.Lua语言相对C语言开发有一个巨大的优势,就是不需要编译代码,因为Lua语言是脚本语言,只需要编写相关协议解析的脚本内容,然后由wireshark加载即可(Wireshark自带Lua解析器),wireshark封装丰富的接口给Lua使用, 实现代码 1 ----------------------------------------------------------------- 2 -- wireshark

Linux编译wireshark,并支持lua插件

由于工作需要,我编写过一个解析内部通信协议的wireshark的插件,插件是使用lua语言编写的,所以wireshark必须要支持lua接入才行. 一般在windows下的wireshark使用安装包安装后,都是支持lua的.只是默认lua支持是处于关闭状态,在网上一搜索就能知道怎么打开lua支持了. 但是,在Linux下就不一定支持了.我们公司使用的是CentOS的操作系统,默认使用操作系统光盘安装的wireshark是没有lua支持的.所以,我就只能摸索如下的步骤去重新编译wireshark

wireshark插件开发 - 汇总

wireshark插件开发 - 自定义协议 wireshark插件开发 - Lua插件解析 wireshark插件开发 - C插件解析 wireshark插件开发 - 更多

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

1.前言 我们在实际工作中,遇到了一个这样的用例,在每天例行扫描活动中,发现有些应用系统不定期的被扫挂,因为我们不是服务的制造者,没有办法在不同的系统里打印日志,所以我们就想用一个工具来获取特定服务的输入数据流.我们如果不在IDS上看应用的服务,可以直接针对服务所在服务位置,针对应用端口进行,有针对性的监听分析. Tshark和tcpdump.windump这些监听工具提供了比较丰富的命令行参数来监听流量数据.wireshark.burpsuite这些工具也提供相应的lua.python脚本的机

【手把手教你Eclipse插件开发】之插件入门

最近由于特殊需要,开始学习插件开发. 以前接触java也算有些时日,但是一直不知道有插件开发这样一种技术路径,本想着这开发工具都给你备好了,直接用不就行了.但是总有些IT工厂,为了要节约成本,开发自己的开发工具,但是又要节省时间,总不能一切都自己来.毕竟开发一个eclipse也要很长时间的.因此,插件开发出现在历史舞台. 首先要了解插件开发,就得从SWT/JFACE说起了.SWT是一种开源的界面开发框架,以前学java的时候,总是用一些panel,就类似这个.JFace又是一种基于SWT的UI不

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

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

[Lua]插件管理工具LuaRocks

lua 插件管理工具LuaRocks 一个关于LuaRocks的ppt 参考 这里的环境是ubuntu, 只是安装了lua5.2 ,还没有安装其他包. 资源 官网:http://luarocks.org/ 扩展列表:http://luarocks.org/repositories/rocks/ 安装说明:http://luarocks.org/en/Installation_instructions_for_Unix(有很多的配置选项) install 总是提示–with-lua 其实是需要找到