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

2023-11-02 00:10

本文主要是介绍【wireshark】插件开发(四):Lua插件Post-dissector和Listener,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Post-dissector

post-dissector和dissector不同,它会在所有dissectors都执行过后再被执行,这也就post前缀的由来。post-dissector的构建方式和dissector差不多,主要一个区别是注册的方式,post-dissector调用的是register_postdissetor接口。下面给出两个示例。

1.1 最简单的Post-dissector

这个示例主要是演示post-dissector脚本的骨架,它的功能是在packet list的所有info列加上了一个字符串"hello world"。

-- @brief A simple post-dissector, just append string to info column
-- @author zzq
-- @date 2015.08.13local myproto = Proto("hello","Dummy proto to edit info column")-- the dissector function callback
function myproto.dissector(tvb,pinfo,tree)pinfo.cols.info:append(" hello world")
end-- register our new dummy protocol for post-dissection
register_postdissector(myproto)

此插件运行效果如下图:

1.2 识别协议特征

这个示例简单地演示了如何使用post-dissector来识别协议特征。例子中,通过识别tcp载荷中是否含有字符串”weibo“来判断报文是否为weibo报文,如果是,则在packet list的protocol列标出,并在proto tree添加树节点,给出滑动特征在TCP载荷中的位置。

代码如下,其中有好多小问题,但这不是重点,重点是了解如何编写Lua插件。

-- @brief A post-dissector, to indentify pattern in payload
-- @author zzq
-- @date 2015.08.26local weibo = Proto("weibo", "Weibo Service")local function get_payload_offset(data, proto_type)local mac_len = 14;local total_len;local ip_len = (data(14, 1):uint() - 64) * 4;if (proto_type == 0x06) thenlocal tcp_len = (data(46, 1):uint()/16) * 4;total_len = mac_len + ip_len + tcp_len;elseif (proto_type == 0x11) thenlocal udp_len = 8;total_len = mac_len + ip_len + udp_len;endreturn total_len
end-- the dissector function callback
function weibo.dissector(tvb, pinfo, tree)local proto_type = tvb(23, 1):uint();if(proto_type ~= 0x06) thenreturnendlocal offset = get_payload_offset(tvb, proto_type)local data = tvb(offset):string();local i, j = string.find(data, "weibo")if(i) thenpinfo.cols.protocol = weibo.namelocal subtree = tree:add(weibo, tvb(offset+i-1))subtree:append_text(", ptn_pos: " .. i .. "-" .. j)end
end-- register our plugin for post-dissection
register_postdissector(weibo)

运行效果如下图。

2. Listener

Listner用来设置一个监听条件,当这个条件发生时,执行事先定义的动作。

实现一个Listner插件至少要实现以下接口:

  • 创建Listener
    listener = Listener.new([tap], [filter]),其中tap, filter分别是tap和过滤条件
  • listener.packet
    在条件命中时调用
  • listener.draw
    在每次需要重绘GUI时调用
  • listener.reset
    清理时调用

以上实现代码一般都包在一个封装函数中,最后把这个函数注册到GUI菜单:

register_menu(name, action, [group])

 

下面的示例代码对pcap文件中的http报文进行了简单的计数统计:

-- @brief a simple Listener plugin
-- @author zzq
-- @date 2015.08.13local function zzq_listener()local pkts = 0local win = TextWindow.new("zzq Listener")local tap = Listener.new(nil, "http")win:set_atclose(function() tap:remove() end)function tap.packet (pinfo, tvb, tapinfo)pkts = pkts + 1endfunction tap.draw()win:set("http pkts: " .. pkts)endfunction tap.reset()pkts = 0end-- Rescan all packets and just run taps - don’t reconstruct the display.
    retap_packets()
endregister_menu("freeland/zzq Listener", zzq_listener, MENU_STAT_GENERIC)

要查看运行结果,要选择”Statistics“菜单中的freeland/zzq Listerner子菜单来触发。此插件的运行效果如下图:

 

转载于:https://www.cnblogs.com/zzqcn/p/4846745.html

这篇关于【wireshark】插件开发(四):Lua插件Post-dissector和Listener的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326746

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类