lua语言在wireshark中的使用浅析
最近项目中使用了一直没接触过的wireshark,从基本的使用到过滤条件的书写,数据的获取查看一步步的都要学习。一直很好奇过滤条件是怎么实现的,借助于api和一些博客的介绍,自己也简单写了个条件过滤的脚本。网上的博客介绍的也比较少,在这里对网上自己不易搜到的一些知识做个总结,分享给需要的朋友。
- wireshark要使用自己编写的脚本首先要在wireshark的安装文件下的init.lua脚本里把这个脚本添加进去。
- 定义一个协议。
- 实现协议的内容。
- 注册协议的端口。
具体的实现步骤网上有很多,在这里就不写了。下面主要记录在自己编写脚本的过程不容易找到的东西。
1)buffer(1,1):uint()
buffoer()后面的unit()方法是把字节转化为无符号整型的值。buffer(a,b)方法第二个参数b不能大于4,因为是int取值。如果要超过4位可以使用uint64()。由于没注意 到这个细节,在这里折腾了好长时间没找到错误。
2) buffer(a,b):string()
buffer()后面的string()可以把获得的字节转化为string类型的字符串。
3) string.format("%d",buffer(44,4):uint())
这行代码实现的功能是从第44位开始读取4个字节长度的值,转化为十进制的整形。使用了string.format()的格式化方法。
4) tostring(), tonumber()
这两个方式可以分别把读取的值转换为string字符串或者number类型。
5)时间值的转换
os.date("%Y/%m/%d %H:%m:%S",time) 这行代码可以将time转换为1970年以后的时间格式:年/月/日 时:分:秒。os.date()里面的参数可以有好多,具体可以网上搜,在这里不一一列举了。要注意time的值不能是string类型。同时如果读取出来的是毫秒值一定要/1000转换成秒值,否则日期转换时不成功的。
初学才几天时间,不过已经实现自己想要的脚本功能,这也说明lua脚本语言比较好学,同时如果以上内容有什么错误的地方欢迎指正,交流。