20.3.2. 字节变量

suricata.bytevar 模块提供了对 Suricata 规则中由 byte_extractbyte_math 关键字定义的变量的访问。

该模块仅在 Suricata Lua 规则中可用,不适用于输出脚本。

20.3.2.1. 设置

local bytevars = require("suricata.bytevar")

20.3.2.2. 模块函数

bytevars.map(sig, varname)

确保 bytevar 存在,并通过将其映射到 Lua 上下文中来设置在脚本中的进一步使用。必须在 init() 期间调用。

Parameters:
  • sig -- 传递给 init() 的签名对象

  • varname (string) -- 规则中定义的变量名称

Raises:
  • error -- 如果变量名称未知

  • error -- 如果映射的字节变量过多

示例:

function init(sig)
    bytevars.map(sig, "var1")
    bytevars.map(sig, "var2")
    return {}
end
bytevars.get(name)

返回给定名称的字节变量对象。可在 thread_init() 期间调用以保存字节变量的句柄。

Parameters:

name (number) -- 之前通过 map() 设置的变量名称。

Raises:

error -- 如果变量名称未通过 map() 映射。

Returns:

一个字节变量对象

示例:

function thread_init()
    bv_var1 = bytevars.get("var1")
    bv_var2 = bytevars.get("var2")
end

20.3.2.3. 字节变量对象方法

bytevar:value()

返回字节变量的当前值。

Returns:

字节变量的值。

示例:

function match(args)
    local var1 = bv_var1:value()
    if var1 then
        -- 使用该值
    end
end