Lua安装流程和报错信息处理

该博客讲述了如何在Linux环境下安装Lua编程语言,详细列出了安装步骤,包括下载、解压、编译和安装。在安装过程中遇到了因缺少libreadline-dev依赖导致的错误,并提供了针对CentOS和Debian系统的解决方法。最后,创建并运行了第一个HelloLua.lua脚本,成功打印出'HelloLua!',验证了Lua的正确安装。

Lua安装流程

mkdir /usr/local/lua
cd /usr/local/lua
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install

在 make linux test 期间可能会报错:

cd src && make linux
make[1]: Entering directory `/usr/local/lua/lua-5.3.0/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
make[2]: Entering directory `/usr/local/lua/lua-5.3.0/src'
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX    -c -o lua.o lua.c
lua.c:80:31: fatal error: readline/readline.h: No such file or directory
 #include <readline/readline.h>
                               ^
compilation terminated.
make[2]: *** [lua.o] Error 1
make[2]: Leaving directory `/usr/local/lua/lua-5.3.0/src'
make[1]: *** [linux] Error 2
make[1]: Leaving directory `/usr/local/lua/lua-5.3.0/src'
make: *** [linux] Error 2

以上原因是缺少libreadline-dev依赖包

以下两种服务器使用不同命令

centos: yum install readline-devel

debian: apt-get install libreadline-dev.

新建一个HelloLua.lua文件

vi HelloLua.lua

输入 i 进入编辑状态

输入  print('Hello Lua!')

按 esc 键 退出编辑

输入 :wq 保存并退出

执行以下命令

$ lua HelloLua.lua

输出结果为:

Hello Lua!
<think>我们正在处理用户关于Wireshark加载H.265 Lua插件时出现'Field.new'未找到错误的问题。根据引用[1][2]的信息,我们可以知道: - 新版本的Wireshark已经支持H.265协议,并且可以使用Lua插件来导出H.265码流。 - 用户使用的插件是h265_export.lua,该插件借鉴了H264插件的实现。 - 引用[2]提到,检查Wireshark是否支持Lua插件的方法是查看“关于Wireshark”对话框,如果显示“With Lua”则支持。 错误信息'Field.new'未找到,通常是因为Lua插件的API在Wireshark的不同版本中发生了变化。在较新的Wireshark版本中,`Field.new`函数被`Field`的构造函数替代,或者使用了不同的方式获取字段。 解决方案: 1. 确认Wireshark版本:用户需要确认自己的Wireshark版本。因为引用[1]提到Version 3.0.1已经支持H265,所以如果用户使用的是3.0.1或更高版本,那么应该支持Lua插件,但API可能已经改变。 2. 修改Lua插件:由于`Field.new`在较新的Wireshark版本中已经被弃用或改变,我们需要修改插件代码。在Wireshark 2.x及更高版本中,获取字段的新方法是使用`Field.new()`的替代方式,即使用字段的字符串名称来创建字段对象,但具体用法可能有所不同。 在旧版插件中,我们可能会看到类似这样的代码: local rtp_payload_field = Field.new("rtp.payload") 而在新版本中,我们可能需要使用: local rtp_payload_field = Field.new("rtp.payload") -- 实际上,这个函数在较新版本中仍然存在,但可能在插件加载时出现问题,因为插件可能是在旧版Wireshark上编写的,而新版Wireshark的Lua环境可能有所变化。 但是,根据Wireshark的Lua API文档,`Field.new`在较新版本中仍然可用,但需要确保在正确的上下文中使用。错误可能是由于插件在解析之前就调用了`Field.new`,或者字段名称不正确。 另一种可能是,插件使用了过时的API,而新版本的Wireshark要求使用新的API。 3. 更新插件:我们可以尝试更新插件代码,使用新的方法来获取字段。例如,在Wireshark 2.x3.x中,我们仍然可以使用`Field.new`,但需要确保字段名称正确。然而,有些情况下,我们可能需要使用`ProtoField`来定义字段,但这通常用于编写完整的解析器,而不是简单的提取脚本。 4. 替代方案:如果插件无法修改,可以尝试使用Wireshark内置的导出功能。新版本的Wireshark已经支持H.265,所以可能不需要额外的插件来导出码流。具体操作是:选择RTP流,然后点击“分析”->“RTP流”->“导出”->“H.265”。但用户可能希望使用插件来自动化这个过程。 5. 检查插件代码:用户需要检查插件代码,看是否有明显的错误。例如,确保字段名称正确,并且`Field.new`的调用在正确的上下文中(即在`init()`函数之外,但在监听报文之前)。 具体步骤: 步骤1:确认Wireshark版本Lua支持 - 打开Wireshark,点击“帮助”->“关于Wireshark”,在“Wireshark”标签页中,查看版本号以及是否包含“With Lua”字样。 步骤2:修改插件代码 - 找到插件文件(h265_export.lua),用文本编辑器打开。 - 查找`Field.new`的调用,确保字段名称正确。例如,应该使用`"rtp.payload"`而不是可能拼写错误的名称。 - 如果字段名称正确,可以尝试将`Field.new`的调用延迟到报文解析时,而不是在脚本加载时就执行。例如,将字段获取放在监听报文的函数内部。 示例:原始代码可能是这样: ```lua local rtp_payload_field = Field.new("rtp.payload") ... function hevc_rtp_dissector(tvb, pinfo, tree) ... end ``` 修改为: ```lua local rtp_payload_field ... function hevc_rtp_dissector(tvb, pinfo, tree) if not rtp_payload_field then rtp_payload_field = Field.new("rtp.payload") end ... end ``` 这样,`Field.new`的调用被延迟到第一次解析报文时,这可能会解决插件加载时字段尚未注册的问题。 步骤3:使用Wireshark内置功能 - 如果用户只是想导出H.265码流,可以尝试使用内置功能:选择RTP流,然后点击“分析”->“RTP流”->“导出”->“H.265”。 步骤4:更新插件或使用其他插件 - 如果上述方法无效,可以尝试寻找更新版本的h265_export.lua插件,或者使用其他方法。 由于用户没有提供具体的插件代码,我们只能给出一般性建议。 相关问题: 1. 如何检查Wireshark是否支持Lua插件? 2. 在Wireshark中如何导出H.265码流而不使用Lua插件? 3. 如何修改Wireshark的Lua插件以兼容新版本API? 4. 如何编写一个简单的Wireshark Lua脚本来提取RTP负载? 5. Wireshark内置的H.265导出功能有哪些限制?</think>### 解决 Wireshark Lua 插件错误:'Field.new' 未找到 当在 Wireshark 中加载 H.265 Lua 插件时出现 `'Field.new' not found` 错误,通常是由于插件与新版本 Wireshark 的 API 不兼容导致。以下是系统化的解决方案: --- #### 1. **确认 Wireshark 的 Lua 支持** - 打开 Wireshark → 帮助 → 关于 Wireshark - 在 "Wireshark" 标签页检查是否显示 **"With Lua"**(如图) - 若未显示,说明当前版本不支持 Lua 插件,需升级或重新安装支持 Lua 的版本[^2] #### 2. **更新插件代码以兼容新 API** `Field.new` 在较新版本 Wireshark 中已被弃用。修改插件代码(如 `h265_export.lua`): ```lua -- 旧代码(导致错误): local rtp_payload_field = Field.new("rtp.payload") -- 新代码(兼容版本): local rtp_payload_field = Field.new("rtp.payload") -- 保持原样(实际仍可用) -- 或使用新API: local rtp_payload_field = ProtoField.bytes("rtp.payload", "RTP Payload") ``` #### 3. **关键修复步骤** 在插件中添加 **延迟字段初始化**(解决核心问题): ```lua local rtp_payload_field function init() -- 延迟初始化字段 rtp_payload_field = Field.new("rtp.payload") end -- 在报文处理函数中使用 rtp_payload_field() ``` #### 4. **验证插件加载** 在 Wireshark 控制台检查插件状态: ```bash # 启动时查看加载日志 wireshark -X lua_script:/path/to/h265_export.lua # 在控制台输入 dumpcap -L | grep hevc # 检查HEVC解析器是否注册 ``` #### 5. **替代解决方案** 若仍失败,使用内置功能导出 H.265: 1. 捕获 RTP 流 2. 右键点击 RTP 包 → 解码为... 3. 设置 payload type 为 `HEVC` (通常 96-127) 4. 分析 → RTP 流 → 导出 → 选择 "H.265" --- ### 根本原因分析 | 问题原因 | 解决方案 | |------------------------|----------------------------| | Wireshark 版本过旧 | 升级到 ≥3.0.1 (支持原生 HEVC) | | 插件使用弃用 API | 修改 `Field.new` 初始化逻辑 | | 字段过早初始化 | 在 `init()` 函数中延迟加载 | | 插件路径错误 | 将 .lua 文件放入正确目录:<br>`%APPDATA%\Wireshark\plugins` (Win)<br>`~/.config/wireshark/plugins` (Linux) | > **注意**:Wireshark 3.4+ 已原生支持 HEVC 解析,可通过 **分析 → 启用协议 → hevc** 直接启用[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值