Lua 解析帧长度
2021-3-19 11:17:44
收藏:0
阅读:203
评论:1
我有一个二进制文件,如果在记事本中打开它会显示乱码信息。 我正在开发一个插件,将其与wireshark一起使用。
现在我的问题是我需要帮助,我想要读取文件,并在其中查找'V ' '0 ' '0 ' '1 '(0x56 0x30 0x30 0x31),因为它是帧的开头,表示其内部有一个数据包。我需要对整个文件执行此操作,类似于解析。同时,应该以V 0 0 1开始并且不以此结束。 我目前有一个代码,其中我正在搜索0x7E并对其进行解析。我需要的是帧的长度。例如V 0 0 1被发现,所以从V到下一个V 0 0 1之前的位置的长度。因此,我可以使用该长度将其与捕获的长度相加,以获得wireshark可以使用的位置。
以下是我的不完善的0x7E代码示例:
local line = 文件:读取()
local len = 0
for c in(line or''):gmatch('。')do
len = len + 1
if c:byte()== 0x7E then
break
end
end
if not line then
return false
end
frame.captured_length = len
这里也存在问题,即该帧以7E结尾,这是错误的。我需要完美解决'V' '0' '0' '1'的方法。也许我需要使用string.find? 求助!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?


Lua 有一些不错的模式工具。以下是一个摘要:
(...)导出()中的所有捕获文本并给我们。-,+,*,?,分别代表“尽可能少地选择可选匹配”、“尽可能多地选择强制匹配”、“尽可能多地选择可选匹配”、“只匹配一次可选项”。^和$:分别代表文件开始和结束。我们将使用此通用输入和输出来进行测试:
local output = {} local input = "V001Packet1V001Packet2oooV001aaandweredonehere"最简单的方法可能是递归地拆分字符串,其中一个在字符“V”之前结束,另一个从字符“1”之后开始。我们将使用以下模式导出“V001”之前和之后的部分:
local this, next = string.match(input, "(.-)V001(.*)") print(this,next) --> "", "Packet1V001Packet2..."很简单。现在我们需要再次执行此操作,并且我们还需要消除第一个空包,因为它是模式的怪癖。我们可以说只要任何空的
this字符串都不应被添加:if this ~= "" then table.insert(output, this) end现在,由于最后一个 V001 不会在末尾出现,因此最后一个数据包将对
this和next均返回 nil。我们可以通过在模式不匹配时添加字符串的最后一部分来做好准备。所有内容都组合在一起:
local function doStep(str) local this, next = string.match(str, "(.-)V001(.*)") print(this,next) if this then -- 仍有更多数据包 if this ~= "" then -- 这是一个空包 table.insert(output, this) end if next ~= "" then -- 还有更多的数据包! doStep(next) end else -- 最后一个数据包 table.insert(output, str) end end当然,这可以改进,但应该是一个不错的起点。为了证明它有效,此脚本:
doStep(input) print(table.concat(output, "; "))会输出: