20.3.13. 文件

文件信息通过 suricata.file 库暴露给 Lua 脚本,例如:

local filelib = require("suricata.file")

20.3.13.1. 初始化

如果目的是创建日志脚本,请按以下方式初始化脚本:

function init (args)
   local needs = {}
   needs["type"] = "file"
   return needs
end

当前 Lua 文件库尚未实现对规则的支持。

20.3.13.2. API

20.3.13.2.1. 文件对象

文件数据通过文件对象访问,使用前必须先获取该对象:

local file, err = filelib.get_file()
if file == nil then
    print(err)
end

20.3.13.2.2. 文件方法

20.3.13.2.2.1. file_id()

返回文件的 ID 编号。

示例:

local file = filelib.get_file()
local id = file:file_id()
print("文件 ID: " .. id)

20.3.13.2.2.2. tx_id()

返回与文件关联的事务 ID。

示例:

local file = filelib.get_file()
local tx_id = file:tx_id()
print("事务 ID: " .. tx_id)

20.3.13.2.2.3. name()

返回文件名。

示例:

local file = filelib.get_file()
local name = file:name()
if name ~= nil then
    print("文件名: " .. name)
end

20.3.13.2.2.4. size()

返回文件大小。

示例:

local file = filelib.get_file()
local size = file:size()
print("文件大小: " .. size .. " 字节")

20.3.13.2.2.5. magic()

基于 libmagic 返回文件类型(如果可用)。如果 magic 不可用则返回 nil。

示例:

local file = filelib.get_file()
local magic = file:magic()
if magic ~= nil then
    print("文件类型: " .. magic)
end

20.3.13.2.2.6. md5()

返回文件的 MD5 哈希值(如果已计算)。如果未计算 MD5 哈希则返回 nil。

示例:

local file = filelib.get_file()
local md5 = file:md5()
if md5 ~= nil then
    print("MD5: " .. md5)
end

20.3.13.2.2.7. sha1()

返回文件的 SHA1 哈希值(如果已计算)。如果未计算 SHA1 哈希则返回 nil。

示例:

local file = filelib.get_file()
local sha1 = file:sha1()
if sha1 ~= nil then
    print("SHA1: " .. sha1)
end

20.3.13.2.2.8. sha256()

返回文件的 SHA256 哈希值(如果已计算)。如果未计算 SHA256 哈希则返回 nil。

示例:

local file = filelib.get_file()
local sha256 = file:sha256()
if sha256 ~= nil then
    print("SHA256: " .. sha256)
end

20.3.13.2.2.9. get_state()

返回文件的当前状态。

返回值:

  • 状态: "CLOSED"(已关闭), "TRUNCATED"(被截断), "ERROR"(错误), "OPENED"(已打开), "NONE"(无), 或 "UNKNOWN"(未知)

示例:

local file = filelib.get_file()
local state = file:get_state()
if state ~= nil then
    print("文件状态: " .. state)
end

20.3.13.2.2.10. is_stored()

如果文件已存储到磁盘则返回 true,否则返回 false。

示例:

local file = filelib.get_file()
local stored = file:is_stored()
print("文件已存储: " .. tostring(stored))