suricata源码解读-事务日志

注册事务日志线程模块

void TmModuleTxLoggerRegister (void)
{tmm_modules[TMM_TXLOGGER].name = "__tx_logger__";tmm_modules[TMM_TXLOGGER].ThreadInit = OutputTxLogThreadInit;tmm_modules[TMM_TXLOGGER].Func = OutputTxLog;tmm_modules[TMM_TXLOGGER].ThreadExitPrintStats = OutputTxLogExitPrintStats;tmm_modules[TMM_TXLOGGER].ThreadDeinit = OutputTxLogThreadDeinit;tmm_modules[TMM_TXLOGGER].cap_flags = 0;
}

注册协议的线程模块

void TmModuleJsonDnsLogRegister (void)
{tmm_modules[TMM_JSONDNSLOG].name = MODULE_NAME;tmm_modules[TMM_JSONDNSLOG].ThreadInit = LogDnsLogThreadInit;tmm_modules[TMM_JSONDNSLOG].ThreadDeinit = LogDnsLogThreadDeinit;tmm_modules[TMM_JSONDNSLOG].RegisterTests = NULL;tmm_modules[TMM_JSONDNSLOG].cap_flags = 0;tmm_modules[TMM_JSONDNSLOG].flags = TM_FLAG_LOGAPI_TM;OutputRegisterTxModule(MODULE_NAME, "dns-json-log", JsonDnsLogInitCtx,ALPROTO_DNS, JsonDnsLogger);OutputRegisterTxSubModule("eve-log", MODULE_NAME, "eve-log.dns", JsonDnsLogInitCtxSub,ALPROTO_DNS, JsonDnsLogger);
}

注册协议的日志线程初始化和销毁函数

注册协议的事务日志模块

void
/*** \brief Register a tx output module.** This function will register an output module so it can be* configured with the configuration file.** \retval Returns 0 on success, -1 on failure.*/
void
OutputRegisterTxModule(const char *name, const char *conf_name,OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,TxLogger TxLogFunc)

注册协议的事务日志模块,存储到output_modules

初始化输出

/*** Initialize the output modules.*/
void RunModeInitializeOutputs(void)

根据配置选择加载输出模块,调用SetupOutput将输出模块添加到OutputPacketLogger *list;

初始化TxLogger线程

/** \brief thread init for the tx logger*  This will run the thread init functions for the individual registered*  loggers */
static TmEcode OutputTxLogThreadInit(ThreadVars *tv, void *initdata, void **data)

遍历前面添加到OutputPacketLogger *list的日志模块,调用日志模块对应的线程模块的线程初始化函数,对日志模块进行初始化。

日志输出

static TmEcode OutputTxLog(ThreadVars *tv, Packet *p, void *thread_data, PacketQueue *pq, PacketQueue *postpq)

遍历所有事务日志模块OutputTxLogger *list,找到事务协议对应的日志模块,调用日志输出函数输出日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98127.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】层叠上下文和z-index

z-index 的作用范围受“层叠上下文(stacking context)”影响。🔹 1. z-index 的基本作用 控制元素在 同一个层叠上下文(stacking context) 内的堆叠顺序。值越大,显示层级越靠上。🔹 2. 什么是层…

自动化脚本的降本增效实践

一、自动化脚本的核心价值自动化脚本通过模拟人类操作完成重复性任务,其核心价值体现在三个维度:首先,在时间成本方面,标准化的数据处理流程可缩短90%以上的操作耗时;其次,在人力成本上,单个脚本…

【C语言】第七课 字符串与危险函数​​

C语言中的字符串处理既是基础,也是安全漏洞的重灾区。理解C风格字符串的底层原理及其危险函数的运作方式,对于编写安全代码和进行逆向工程分析至关重要。 🧩 C风格字符串的本质 C风格字符串本质上是以空字符\0(ASCII值为0&#xf…

Mac安装hadoop

1.在terminal中检查是否安装brew命令 brew --version 如果没有安装,在terminal中执行命令,安装brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装完成后,再重新打…

多语言编码Agent解决方案(4)-Eclipse插件实现

Eclipse插件实现:支持多语言的编码Agent集成 本部分包含Eclipse插件的完整实现,包括多语言支持、命令注册、API调用和UI集成。插件使用Java开发,基于Eclipse Plugin Development Environment (PDE)。 1. Eclipse插件目录结构 eclipse-plugin/…

风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具

机器人流程自动化(RPA)听起来好像跟机器人统治世界似的,但其实不是那么回事。RPA 就是一套能在电脑上运行的程序,能快速、高效地自动完成日常重复的工作。RPA 让你能够设置一些软件“机器人”来执行特定的任务。RPA 的一个大好处就…

漏洞无效化学习

一、基础概念与原理1. 核心定义漏洞无效化(Vulnerability Mitigation):并非直接修补漏洞本身,而是通过技术手段降低漏洞被成功利用的概率。其目标是让攻击者即使发现漏洞也无法达成攻击目的。 关键思路:通过访问控制、…

「Vue 项目中实现智能时间选择:带业务规则的级联选择器」

#创作灵感公司业务需要,某个时间节点前可以选择到月,某个时间节点后只能选择季度vue2 Vant2javascriptimport { Cascader, Field, Form, Popup, Button } from vant; import vant/lib/index.css;export default {name: CascaderPage,components: {VanCa…

day1———Qt———应用程序界面设置

1&#xff0c;定义一个Mystring类代替string的功能#include <iostream> #include <string.h>using namespace std; class Mystring {friend ostream &operator<<(ostream &cout,const Mystring &s);friend istream &operator>>(istrea…

apache实现LAMP+apache(URL重定向)

1.apache实现LAMPLAMP是指一组通常一起使用来运行动态网站的自由软件名称首字母的缩写a.L是指Linux操作系统b,.A是指Apache&#xff0c;用来提供Web服务c.M指MySQL&#xff0c;用来提供数据库服务d.P指PHP&#xff0c;是动态网站的一种开发语言1.1php运行方式说明php是脚本语言…

SAConv可切换空洞卷积

SAConv可切换空洞卷积 带来的改进机制时可切换的空洞卷积 是一种创新型卷积网络 专门为增强物体检测和分割任务&#xff0c;中特征提取去设计 SAC核心时相同的输入儿子应用到不同空洞率去进行卷积&#xff0c;设计特别开关函数融合这些不同卷积的成果 该方法可让网络更灵活的适…

基于Matlab的雾霾天气和夜间车牌识别系统

在复杂天气和低光照环境下&#xff0c;车牌识别系统的准确率和稳定性显著下降&#xff0c;严重影响交通管理与智能监控的可靠性。本文针对雾霾天气和夜间环境下车牌图像特征模糊、对比度低、噪声干扰严重的问题&#xff0c;提出了一种融合图像增强与模板匹配的车牌识别方法。系…

华为云/本地化部署K8S-查看容器日志

华为云日志查看 目前工作的大部分情况下&#xff0c;通过华为云LTS云日志服务就可以满足日常需求。 不过上线时过来支援的开发老哥更习惯于从容器里查看日志&#xff0c;也一并记录下以备不时之需。 1.登录服务节点服务器 点击左侧三个横线&#xff0c;选择 应用服务-云容器引擎…

【MySQL 死锁:从 “业务卡顿“ 到 “根因定位“ 的实战指南】

MySQL 死锁&#xff1a;从 “业务卡顿” 到 “根因定位” 的实战指南 后端开发必看&#xff1a;MySQL死锁排查与预防全攻略线上系统突然报出Deadlock found when trying to get lock; try restarting transaction&#xff0c;用户操作卡顿甚至超时&#xff0c;排查时却对着一堆…

从虚拟化基石到云原生架构的降维打击:用dd/mkfs玩转namespace隔离,解锁Docker/K8S资源密码,看透物理机到云服务器的进化之路

本篇摘要 本文围绕虚拟化与容器化技术展开&#xff0c;涵盖架构演进、Docker/K8S优势与挑战、namespace隔离实操&#xff08;如主机名/PID隔离&#xff09;、磁盘操作&#xff08;dd/mkfs/df/mount&#xff09;等&#xff0c;对比虚拟机与容器差异&#xff0c;阐明技术原理与架…

自动化测试的概念

文章目录自动化测试能够取代人工测试吗&#xff1f;回归测试自动化分类自动化测试金字塔为啥单元测试的性价比这么高呢&#xff1f;那为啥UI自动化测试的性价比没有组件测试的高呢&#xff1f;web自动化测试举例引入自动化测试的准备工作自动化测试的简单示例自动化测试能够取代…

OSPF故障排查实战:如何通过一条命令精准定位网络掩码不匹配问题

掌握display ospf error命令的解读技巧&#xff0c;快速解决OSPF邻接关系建立失败难题。一、问题背景与场景引入 在网络运维工作中&#xff0c;OSPF&#xff08;开放最短路径优先&#xff09;协议作为主流的内部网关协议&#xff0c;其稳定运行至关重要。然而&#xff0c;在实际…

Redis----如何引入分布式锁

一、概述首先引入分布式锁指的是应用程序引入&#xff0c;不是Redis本身引入&#xff0c;Redis作为中间件可以作为分布式锁的一个典型实现方案&#xff0c;同时也有一些其他的实现方案。分布式锁指的是一个/组程序&#xff0c;使用Redis实现的话就是通过添加一个特殊的Key-Valu…

prometheus-2.42.0.linux-amd64.tar.gz 安装配置展示

一、prometheus 1.1解压文件 # tar -xzvf prometheus-2.42.0.linux-amd64.tar.gz -C ~/apps/ prometheus-2.42.0.linux-amd64/ prometheus-2.42.0.linux-amd64/NOTICE prometheus-2.42.0.linux-amd64/consoles/ prometheus-2.42.0.linux-amd64/consoles/index.html.example p…

Linux 标准输入 标准输出 标准错误

目录一. 简介二. 常见用法2.1 输出重定向2.2 错误重定向2.3 同时重定向标准输出 错误2.4 输入重定向2.5 特殊设备三. 这样设计的好处3.1 区分正常信息和错误信息3.2 方便调用方脚本处理3.3 与管道结合时更清晰四. 案例4.1 if判断4.2 ls查询一. 简介 ⏹在 Linux/Unix 中&#…