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用法

http://blog.csdn.net/leecrest/article/details/31742419讲得比较透彻

  • 加载一个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")

5、wireshark 库函数

https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html

  • 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
数据解析格式#

  http://note.youdao.com/noteshare?id=b2c354990472154833321e1d7b316df1

  0000   70 ba ef 56 e7 cb dc 49 c9 01 01 96 08 00| 45 00

  0010   00 28 bf 8f 00 00 40 06 a0 d8 0a 41 01 18 0a 02

  0020   05 0e| ea 65 40 19 ca b2 10

  0030   c3 ae 00 00 00 00 00 00

  分隔符| 分隔 数据链路层 网络层传输层

参考文档:

http://www.docin.com/p-1350594454.html wireshak使用教程

http://blog.tianya.cn/blogger/post_show.asp?BlogID=2338564&PostID=19226926 Wireshak 插件编写

http://www.codingnow.com/2000/download/lua_manual.html lua中文教程

http://manual.luaer.cn/  lua在线手册

https://wiki.wireshark.org/Lua/Dissectors 参考

https://www.wireshark.org/docs/wsdg_html_chunked/wsluarm_modules.html 
wireshark
lua库函数

http://blog.csdn.net/leecrest/article/details/31742419 讲得比较透彻#require
、dofile区别#

http://blog.csdn.net/birdflyto206/article/details/49403801 #VC 生成lua源代码#

时间: 2024-10-12 15:52:51

wireshark lua脚本的相关文章

Java中使用Lua脚本语言(转)

Lua是一个实用的脚本语言,相对于Python来说,比较小巧,但它功能并不逊色,特别是在游戏开发中非常实用(WoW采用的就是Lua作为脚本的).Lua在C\C++的实现我就不多说了,网上随便一搜,到处都是这方面的介绍,我想说的是如何在Java下使用Lua以提高编程效率.增强你的程序可扩展性. 首先,要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库.我使用的是一个叫做LuaJava的开源项目,可以在: http://www.keple

online_jf.lua --累计在线时间领取物品(积分)的lua脚本

原作者: ayase 8-27修正 修复首次使用后的红字不需要额外进数据库导入计分表,这lua全自动生成 --------------------------------------------------------------惯例写在前面: 写这玩意其实学习性更大于目的性..= =研究了两天晚上写的我人参中滴第一个lua脚本,居然还真给我写出来了,好感动由于写代码的基础基本是零 所以碰了N+N次壁 什么函数字母大小写还要区分  -- 闹哪样啊喂 因为这个原因我试了半个多钟才发现问题所在什么函

C程序与Lua脚本相互调用

Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows环境下Lua的下载以及安装注意事项:2.Visual C++6.0中Lua的配置:3.C程序与Lua脚本相互调用实例. 1.Windows环境下Lua的下载以及安装注意事项 a.下载Lua for Windows,笔者用的版本是V5.1.4-35: b.上微软官网,下载Visual C++运行库——vcred

redis限速器设计(不使用lua脚本及事物)

公司有一个需求,需要集群中的机器每分钟发送固定个数请求到局域网以外的一台服务器,固定个数,是指集群中的所有机器发送的所有的请求加起来是一个固定的个数,这就需要一个分布式的限速器. 首先想到的就是使用redis中的incr方法,在redis的官方文档中寻找到了一个示例 FUNCTION LIMIT_API_CALL(ip) ts = CURRENT_UNIX_TIME() keyname = ip+":"+ts current = GET(keyname) IF current != N

wax lua 脚本升级练习(2)

wax lua 脚本升级练习(1)介绍了object-c通过调用lua中的函数计算两值乘积并返回显示. 这一篇将介绍通过点击按钮下载新的lua脚本文件,并且热加载lua,使起能即时生效. 在写代码前需要做一点点准备. 1.启动本机的Apache服务,作为新lua脚本的存放位置 打开"终端(terminal)",输入sudo apachectl start(可能需要输入机器秘密),打开Safari浏览器地址栏输入 "127.0.0.1",可以看到内容为"It

Cocos Code IDE里xcode工程lua脚本更新

lua脚本修改后xcode需要clean重新编译才能更新,这个是xcode里的老毛病了,网上有一些脚本但不是针对Cocos Code IDE的工程目录的,这里列出 cocos2dx版本3.1 首先在 Xcode 里选中工程,右侧会显示工程的设置界面. 从设置界面选择 Build Phases 标签,然后点击右下角的 Add Build Phases 按钮,并选择"Add Run Script". 在新出现的 Run Script 栏中输入以下内容: _TARGET_BUILD_CONT

.net core中加载lua脚本的类库: MoonSharp

前言 MoonSharp是一个支持C#调用lua脚本的类库,支持.net, .net core, mono, unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单: 官网:http://www.moonsharp.org/ 源码:https://github.com/xanathar/moonsharp nuget:PM> Install-Package MoonSharp 使用 加载脚本 1 string scriptCode = @" 2 sum = 0

(一)Lua脚本语言入门

今天开始自己的Lua语言学习,Lua脚本语言,是介于应用程序和开发其应用程序的底层编程语言之间,,它很方便调用其它语言,它只是在载入时对其进行编译,而不像我们写的单片机程序是预编译的,先编译好然后写入单片机,它只是在调用时编译,所以脚本语言的灵活性很高,,,,,对于自己为什么又开始学习脚本语言了,,因为需要了 ........ 先打印个 hello world 一,变量 Lua有五种变量类型nil,Boolean,string,Number,table 看一个例子,,,,,,,,,先哄我外甥玩,

LUA脚本调用C场景,使用C API访问脚本构造的表

LUA调用C lua解析中集成了一些系统服务, 故脚本中可以访问系统资源, 例如, lua脚本可以调用文件系统接口, 可以调用数学库, 但是总存在一些lua脚本中访问不到的系统服务或者扩展功能, 如果这些系统服务或者扩展功能是使用C语言实现, 那么可以, 使用lua库的对C库的封装方法, 将其中功能封装成lua 接口, 这样脚本就调用这些lua接口调用这些功能. ------- 这种情况,是以lua脚本作为宿主程序. C调用LUA 另外一种场景,是C程序作为宿主程序, 调用LUA脚本, 例如将l