wireshark lua脚本
1、目的:解析rssp2协议
2、如何使用wireshark lua插件将编写的(假设为rssp2.lua)lua文本,放入wireshark 安装目录下,放哪里都行只要dofile添加了路径.
并且在安装目录下找到init.lua,最后一行添加路径代码 :
dofile(DATA_DIR.."RSSP2.lua")
3、介绍解析由rssp2.lua、p2_data.lua、p2_parse.lua3个文件组成。如果协议内容很少,一个lua文件就能完全解决.init.lua会调用rssp.lua,rssp2.lua会加载p2_data.lua、p2_parse.lua文件.解析器dissectors介绍可以参照官网:https://wiki.wireshark.org/Lua/Dissectors
- 必须注册为句柄
- 解析函数必须设置为 Proto对象
- call wireshark时可通过 TVB buffer(TVB object) ORZ a packet information record(pinfo object:) ORZ a tree root(TreeItem object)
- 只有当包与解析表匹配,或者用户强制“decode as”,才能解析
4、dofile、require用法
加载一个lua文件时require会先在package.load中查找此模块是否存在,如果存在,直接返回模块。如果不存在加载此模块文件。@require仅加载一次,对于模块会按照特定的搜索规则查找文件加载。 在rssp2.lua先添加路径:
package.path = "D:/professional program/WireShark/plugins/?.lua;;"
require("data") 那么加载路径D:/professional program/WireShark/plugins/data/lua
- dofile和loadfile区别;dofile:读入代码文件并编译执行。每调用一次dofile都会重新编译执行一次。loadfile:编译代码,将整个模块文件当成一个函数返回,但是不执行代码。dofile是对loadfile的一次包装。dofile使用:
dofile("D:/professionalprogram/WireShark/plugins/data.lua")
- 如果不太懂可以参考http://www.runoob.com/lua/lua-modules-packages.html中的lua模块与包的例子.
5、wireshark 库函数
- package.path = "D:/professional program/WireShark/plugins/?.lua;;"
添加路径package.path
- require("p2_data")
这里面是要用到的全部解析全局变量,函数没有放里面
- func = dofile("D:/professional program/WireShark/plugins/p2_parse.lua")
func返回了rssp2.lua需要调用的所有函数
- self_rssp2 = Proto ("RSSP2","RSSP2_Protocol")
注册协议,函数Proto
- f_usALELen = ProtoField.uint16("rssp2.len", "Length", base.DEC)
ProtoField.uint16解析2字节的f_usALELen字段,Length在wireshark中显示名称,base.DE 十进制显示
- f_usRole = ProtoField.uint8("rssp2.Role", "Role", base.HEX, { [0x10] = "Client", [0x11] = "Server"})
还可以是这样的,不仅显示值 [0x10] = "Client",还显示含义.
- self_rssp2.fields = {f_usALELen, f_usALEVer, f_usAPPType, f_usSequen, f_usNRFlag}
最终将所有需要解析的字段添加到field中,如果只是定义了这个字段,而不添加到这里是解析不了的.
- function self_rssp2.dissector(buffer,pinfo,tree)
可以把函数dissector理解为我们编写脚本的主函数,入口函数。形参是数据帧buffer,消息pinfo和 wireshark上层已经解析的tree
- pinfo.cols.protocol:set("RSSP-II")
在wireshark protocol列显示“RSSP-II”协议字符串同理pinfo.cols.info:set("Invalid Msg")在info中显示"Invalid Msg"
- local RSSP2Tree = tree:add(self_rssp2, buffer(offset, buffer_len),
"RSSP-II Msg Structure")添加自己的tree,"RSSP-II Msg
Structure",然后就可以解析在这个tree下面的字段RSSP2Tree 下面又有ALE_tree.local ALE_tree = RSSP2Tree:add(self_rssp2,buffer(offset, 10),"ALE
Layer")
- local usMsgLen = buffer(offset,2):le_uint()
offset是自己定义的局部变量,帧的偏移量,表示解析到offset字节数了.offset后面两个字节转化成无符号 32进制赋值给变量usMsgLen
- ALE_tree:add(f_usALELen, buffer(offset,2))
ALE_tree下面解析f_usALELen字段,该字段在帧的offset位置起始的后面两个字节
- local tcp_port_table = DissectorTable.get("tcp.port")
将该解析函数添加到tcp_port_table ,这一步是必须的
- tcp_port_table:add(60005, self_rssp2)
该帧是通过60005端口采集,这个打开wireshark满足帧条件,就能自动解析.实在不懂,可以到github中搜关键字“wireshark
lua”,有很多人的lua代码
6、注意@不同于其他语言的数组把0作为数组的初始索引,Lua里表的默认初始索引一般从1开始
@在Lua中0为true
@~= 不等于
7、wireshark中tcp帧格式# wireshark
数据解析格式#0000 70 ba ef 56 e7 cb dc 49 c9 01 01 96 08 00| 45 000010 00 28 bf 8f 00 00 40 06 a0 d8 0a 41 01 18 0a 020020 05 0e| ea 65 40 19 ca b2 100030 c3 ae 00 00 00 00 00 00分隔符| 分隔 数据链路层 网络层传输层
、dofile区别#
wireshark lua脚本的更多相关文章
- Wireshark lua dissector 对TCP消息包合并分析
应用程序发送的数据报都是流式的,IP不保证同一个一个应用数据包会被抓包后在同一个IP数据包中,因此对于使用自制dissector的时候需要考虑这种情况. Lua Dissector相关资料可以见:ht ...
- lua脚本简介
Lua [1] 是一个小巧的脚本语言.它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ier ...
- 在redis中使用lua脚本让你的灵活性提高5个逼格
在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...
- 《转》Unity3D研究院编辑器之创建Lua脚本模板
Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 : Assets/Editor/Lua/Template/lua.lua ...
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- redisTemplate的spring配置以及lua脚本驱动
最近在使用spring-data-redis的redisTemplate,所以写篇使用记录吧. 1.不用多说,使用maven引入相关依赖,因为项目已经引入其他的 <dependency> ...
- redis原子性读写操作之LUA脚本和watch机制
最近在开发电商平台的子系统--储值卡系统,系统核心业务涉及到金额消费以及库存控制,因此为了解决建立在内存上高并发情况下的事务控制,使用了spring封装的RedisTemplate执行lua脚本进行原 ...
- online_jf.lua --累计在线时间领取物品(积分)的lua脚本
原作者: ayase 8-27修正 修复首次使用后的红字不需要额外进数据库导入计分表,这lua全自动生成 ----------------------------------------------- ...
随机推荐
- Android中通信协议
一.TCP/IP协议(传输层协议) 1.Socket与ServerSocket Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计就是门 ...
- Android 防止多次点击事件
恐怕大家都会遇到这样的问题,一个点击事件多次触发,导致,同样的内容提交了多次,或者说弹出多个页面... 下面是简单的方案,大家可以试一试 原理很简单,当我们第一次点击的时候,把按钮变成不可点击状态. ...
- 树莓派:raspberry pi 3b - NOOBS
NOOBS - 多操作系统安装器,可以将不同支持树莓派的流行操作系统安装在一张SD卡中并提供一个启动管理工具,安装的不同操作系统相互独立,互不影响,是一种比较有意思的玩法. 从版本1.3.1开始到1. ...
- 个人作业week3——代码复审
1. 软件工程师的成长 感想 看了这么多博客,收获颇丰.一方面是对大牛们的计算机之路有了一定的了解,另一方面还是态度最重要,或者说用不用功最重要.这些博客里好些都是九几年或者零几年就开始学习编 ...
- 5、项目间的沟通协调 - PMO项目管理办公室
沟通是人类所具备的优良而有一定技巧的一种方式.但是,沟通也是PMO项目管理办公室中所有项目组必须建立起来的能力,也是PMO项目管理办公室日常所需要进行的一项工作内容. 一.项目间的沟通: PMO项目管 ...
- CentOS 7 安装MySQL 5.6遇到的疑难杂症小结
在一测试服务器(CentOS Linux release 7.2.1511)上安装MySQL 5.6(5.6.19 MySQL Community Server)时遇到下面错误,这个是因为CentOS ...
- NFS网络共享服务部署
10.3 NFS服务端部署环境准备 10.3.1 NFS服务部署服务器准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server) 192.168.1.14 ...
- Apache与Nginx的优缺点比较
1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下ngin ...
- 4-1 Linux用户管理命令详解
1. /etc/passwd 格式 用户名:密码:UID:GID:注释:家目录:默认shell useradd [options ] USERNAME -u: UID 要大于等于500, - ...
- RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用
最近几天在看RabbitMQ,所以发了两天时间写了一个调试和测试工具.方便使用. 下载地址:RabbitMQTool-V1.0.1.zip