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))