- 博客(64)
- 资源 (3)
- 收藏
- 关注
原创 suricata 3.0,日志模块初始化流程
typedef struct RunModeOutput_ { const char *name; TmModule *tm_module; OutputCtx *output_ctx; TAILQ_ENTRY(RunModeOutput_) entries;} RunModeOutput;TAILQ_HEAD(, RunModeOutput_) RunModeOutputs = TAILQ_HEAD_INITIALIZER(RunModeOutputs);...
2022-01-06 16:08:15
1697
原创 suricata 结构体struct Pool_说明
suricata 内存池结构体struct Pool_结构体底层存储数据的是void*指针,所以可以存储任意类型的数据,我目前看到的tcp的分段和会话都使用该内存池进行存储,结构体分别是TcpSegment,TcpSession,在初始化函数PoolThreadInit->PoolInit中调用各自的内存分配函数进行内存分配。/* pool structure */typedef struct Pool_ { uint32_t max_buckets; pool的最大bucket
2022-01-06 15:30:20
883
原创 suricata smtp协议解析源码注释七-完结篇
一。ProcessBodyLineSMTPParse-> SMTPProcessRequest-> SMTPProcessCommandDATA-> MimeDecParseLine-> ProcessMimeEntity-> ProcessMimeBody->ProcessBodyLine该函数处理body数据,根据头部字段设置编码标志对数据进行解码,base64,quote-prntable。如果数据未编码则不需要解码,解码后将数据存储到mime_sta..
2021-09-13 10:09:11
880
原创 suricata smtp协议解析源码注释六
一。解析函数ProcessMimeBody:解析data命令的body数据 这个函数比较简单,主要查询boundary分界线,然后根据查找结果调用bounddary处理函数ProcessMimeBoundary,或者调用body数据处理函数static int ProcessMimeBody(const uint8_t *buf, uint32_t len, MimeDecParseState *state){ int ret = MIME_DEC_OK; ui.
2021-09-13 09:51:56
979
原创 suricata smtp协议解析源码注释五
一。MIME头部字段解析函数ProcessMimeHeaders主要完成以下几个工作:1。调研函数FindMimeHeader根据冒号查找头部字段name和value,如content-type等等,并对其进行存储。2。解析完头部字段后,分析头部字段的重要内容,如文本格式,编码类型,是否包含附件,是否有boundary,是否嵌套格式等,并根据这些信息设置相应的标志位,在解析body数据时使用。参数:buf 行数据,len:行数据长度 static int ProcessMimeHe
2021-09-12 17:48:35
3907
原创 suricata smtp协议解析源码注释四
一。data命令的数据处理函数SMTPProcessCommandDATA对data命令后的数据解析工作,先判断命令是否是点“.”,如果是说明数据接收完毕,客户端不再发送数据,则设置解析状态,和解析标志tx->done=1。如果不是“.”,则调用MimeDecParseLine函数,完成数据行的解析。static int SMTPProcessCommandDATA(SMTPState *state, Flow *f, Ap
2021-09-12 16:13:14
662
原创 suricata smtp协议解析源码注释三
本篇文章开始对主要函数的代码做注释,有的部分语句尚未理解,没有做注释。1 客户端到服务器请求的入口函数SMTPProcessRequeststatic int SMTPProcessRequest(SMTPState *state, Flow *f, AppLayerParserState *pstate){ SCEnter(); //state->curr_tx始终指向当前的tmtp事务结构体指针 SMT
2021-09-12 15:44:02
957
原创 suricata smtp协议解析源码注释-零--smtp协议格式简介
本篇文章为smtp协议解析源码注释的第一篇,简单介绍一下smtp协议格式,大部分格式内容是从网上复制过来的。一。smtp的客户端与服务器交互过程常用客户端命令:HELO/EHLO 发出请求AUTH LOGIN 身份认证MAIL FROM:发件人email地址RCPT TO:收件人email地址,可以写多个地址,发送给多人,这是一个列表DATA...
2021-09-12 14:19:57
1870
原创 suricata smtp协议解析源码注释二
一。MIME信件实体分界线Boundary分界线:在原boundary前加两个横线“--”结尾boundary:在原boundary前和后各加两个横线“--”二。Smtp解析模块使用变量state->stack->top->data指向当前信件实体,新到的数据包括头部和数据都会保存到该结构体,该变量始终指向正在解析的数据要保存到的信件实体结构体指针,state->stack以堆栈的形式组织所有信件实体: state->stack->top->data
2021-09-11 11:57:09
1306
原创 suricata smtp协议解析源码注释一
一。Suricata解析smtp协议整体思路Smtp协议解析模块根据客户端与邮件服务器之间的每一个smtp交互命令,设置了多个状态即当前的smtp命令和解析阶段。Smtp协议解析模块将smtp的交互过程视为一次事务,该事务记录了状态变化和解析阶段的过程,每次状态变化时,根据数据传输方向(客户到服务器,服务器到客户),根据当前方向对当前状态进行相应的处理。例如:当客户端发送HELO命令后,事务的状态变为HELO,此时,服务器的操作就是处理HELO后反馈数据给客户端,客户端的操作就是解析服务器对HE
2021-09-10 16:35:16
1934
原创 Linux PAM开发示例二:登录系统时使用自己的PAM模块进行密码认证
本文仅仅是一个示例,没有多余的说教内容,实现在登录Linux时命令行、图形界面、su等密码认证时使用自己的PAM模块进行密码认证,这个示例不需要编写应用程序,因为系统的登录程序就是应用程序,例如:login、su、lightdm。1。编写PAM模块动态库#include <stdio.h>#include <stdlib.h>#include <string.h>#include <security/pam_appl.h>#include &
2021-07-31 15:35:55
3167
2
原创 Linux PAM开发示例一:让自己的程序使用PAM认证方式
不对PAM模块机制做深入讲解,网上一堆文章已经把这个事儿做了,这里仅仅是PAM的实现示例以记录自己的学习过程和成果。本文仅仅实现一个PAM示例,即一个用户程序通过PAM机制进行密码认证,编写一个用户程序,编写一个pam模块动态库即可完成这个功能。一。PAM介绍Linux-PAM(即linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式。换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制,这种方式下,就算升级本地认证机制,也不用修
2021-07-31 13:44:08
3574
1
原创 IP分片笔记
1。ip分片的结构体组织形式先记录以下特殊的字段:(1)skb_buff的cb字段 char cb[48],是一个自定义字段,在协议各层处理时,可以存储各协议的私有数据,就是随便自己定义,在ip层分片时存储的是struct inet_skb_parm *,该结构体嵌套两个数据:ip选项 struct ip_options opt; 和 标识字段flags。(2)skb_buff结构...
2019-12-21 18:23:07
545
原创 IP重组笔记
看过ip协议源码后,将分片与重组注意事项记录下来,以免忘记。1。ip重组结构体组织形式理解任何代码,首先需要理解其数据结构,以及凌驾于数据结构之上的操作。整体而言,所有分片都存储在全局变量ip4_frags中:#define INETFRAGS_HASHSZ 64static struct inet_frags ip4_frags->hashstruct...
2019-12-18 19:43:48
1233
原创 netfilter学习总结一:规则结构表示及其内存布局
最近对netfilter进行了研究,已经搞明白了其框架结构、运行流程、以及与iptables的交互流程包括规则设置,慢慢总结一下理解的知识,记录下来,加深理解,以防忘记。另外,虽然我只是记录我的学习过程,以免忘记,而且不成体系,但是字段说明增加了结构体的重要字段在程序里的关键点的使用时机,这个是网上资料所没有的,网上资料只说明字段含义,从不说什么时候用,什么时候赋值,在哪里...
2019-12-07 16:48:10
840
原创 netfilter 学习练习一:通过目的端口过滤发出去的数据包
kernel版本 3.10.0-514.el7.x86_64netfilter框架通过在内核网络协议栈五个数据包处理点注册回调函数,调用这些回调函数实现数据包过滤、修改、转发。表示回调函数的hook结构体如下:struct nf_hook_ops { struct list_head list; //hook钩子函数双向列表,每一个hook点可以注册多个钩子函数 ...
2019-12-03 22:19:05
606
原创 Linux GDT全局描述符表-草图示之
1. 段描述符表寄存器系统设置的一个独立寄存器,用于存储段描述符表的内存地址和表的范围,就是表有多大,访问时不能超出表的范围。2. 段描述表系统中的一个数组,存储了很多段描述符,根据段寄存器存储的索引(即书上说的段选择子,忒太理解)确定内存段在段描述符表中的位置,进而取得段描述符信息,再根据段描述符信息的段基地址和段界限,得到内存段的内存地址。段寄存器存储的索引,是在保护...
2019-11-30 14:57:37
603
1
原创 list_entry(ptr, type, member) 与 container_of
#define list_entry(ptr, type, member) / container_of(ptr, type, member) #define container_of(ptr, type, member) / ({ ...
2019-11-28 23:26:43
254
原创 使用 C++11 array 插入排序
#include <iostream>#include <array>using namespace std;//2, 6, 1, 7, 4, 3, 8, 9, 5, 0void insert_sort(array<int, 10> &arr){ auto ite1 = arr.begin() + 1; for(it...
2019-01-07 21:57:41
296
原创 git 比较代码
git 比较代码,今天把本地工作目录的代码和版本库代码比较了一下,用到了如下命令,也学习了如何比较代码,不容易呀! 查看工作目录与本地仓库有哪些代码文件不同,-w选项忽略代码文件由空格变化引起的不同 git diff --stat -w 比较工作目录与本地仓库中的文件fm-stat.c,忽略空格引起的不同 git diff -w src/
2017-03-20 17:01:41
9200
原创 学习内容DPDK
DPDK是inter推出的性能不错的捕捉网卡数据的驱动程序,只是从网卡上读取数据,供用户层程序分析网络数据。开源软件:suricata,网络数据包处理软件可以使用DPDK,且实现了协议栈功能,包括各种协议解析及重组,直至传送到应用层的用户程序。=================================1. 流表管理 流:每一个数据包就是一个数据流 流表:将相关数据流的关
2016-06-02 15:03:27
1836
1
原创 Linux C函数strtok解析
1. 今天看了看strtok函数,特意找了下Linux内核2.0.1版本的代码,因为在更高版本(至少2.6)已经使用strsep替换了该函数.函数原型:char * strtok(char * s,const char * ct)使用第二个参数ct中的分隔符字符串,分割第一个参数s,ct参数的分隔符可以是任意字符,可以是单个字符的分隔符,也可以是字符串形式的分隔符如:"!,;'/"等,
2016-05-23 19:57:11
9211
1
原创 Linux环境内存泄漏工具vargrind
今天又温习了一下linux下检测内存泄漏工具vargrind的使用:1. 从网上看,大家都用的是valgrind工具集,valgrind包含了几种工具: (1) memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。 (2) callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。 (3) cachegrind:分析CPU的cache命中率、丢失率
2016-05-23 11:16:08
2787
原创 gdb调试core转储文件
1. 首先生成core文件,示例代码如下:#include #include #include void core1(){ char *p = NULL; *p = 'a'; printf("p:%s\n", p);}int main(){ core1(); return 0;}[ljq@ycy aup]$ gcc coredu
2016-05-16 18:34:04
1468
1
原创 epoll学习总结第一篇
epoll1. et模式:socket状态改变:缓冲区收到数据、关闭socket、,epoll_wait返回通知一次,不论是否接收完毕仅且通知一次,例如:客户端发送数据:”hello world!“ 服务端epoll_wait返回一次通知,然后recv 5个字节,接收到的是”hello“,此时缓冲区剩余数据为:“ world!”,然后继续epoll_wait,此时不会收到任何
2015-09-16 15:09:04
605
1
原创 ganglia在hadoop中的配置:hadoop-metrics2.properties
ganglia3.6.0 hadoop2.0.0-cdh4.2.0 使用 hadoop-metrics2.properties, 在文件中添加以下内容,
2014-07-10 19:05:51
5180
原创 ganglia3.6.0 监控 Hadoop 2.0.0-cdh4.2.0
1. 安装软件包,yum方式,源码方式以后再研究.yum ganglia-gmetad
2014-07-10 18:18:39
1950
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人