Linux kernel thread 内核线程

Linux中无论是用户态进程、线程,还是内核线程,在内核中都使用同样的结构task_struct,可以看出内核都是以任务这个概念对待这些不同名字的事物。至于为什么会有kernel thread或者说内核线程这个词,个人认为应该是因为所有内核线程共享内核空间资源,因此有线程之名。

阅读全文

Linux kernel 链路层帧接收

Linux kernel接收链路层帧时涉及中断部分、软中断部分,具体数据接收过程根据网卡驱动不同有传统的中断方式接收与NAPI方式接收,本文会分析两种方式的具体接收过程及两者的不同之处。

阅读全文

Netfilter 内核数据包过滤框架

Netfilter是linux内核中的数据包过滤框架,2.4版本及其后的内核包含该框架,该框架使数据包过滤、网络地址转换(NAT)和其他数据包修改功能成为可能。Netfilter框架由之前的ipfwadm和ipchains系统改进并重新设计而来,iptables工具与其紧密关联并依赖其在内核完成相应功能。

阅读全文

NFQUEUE 用户态数据包处理

本文部分翻译自Using NFQUEUE and libnetfilter_queue

NFQUEUE是iptables和ip6tables的一种target,用于将数据包委托给用户态应用程序裁决如何处理数据包。用户态应用程序可以使用libnetfilter_queue库连接到该队列获取包含了数据包的内核消息,并必须为数据包做出一个裁决。

阅读全文

Linux kernel module 内核模块

Linux内核模块是一种可以根据需要动态加载和卸载的代码,可以在不重启系统的情况下扩展内核功能。
这里演示一个最简单的内核模块的开发过程。

阅读全文

BM字符串搜索算法

BM(Boyer-Moore)字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。算法对将要搜索的字符串(模式)进行预处理,对文本不进行预处理操作。这个算法适用于模式远短于文本的场景,以及模式会被多次搜索的场景。BM算法在搜索时使用预处理阶段生成的信息以快速跳过文本中不匹配的部分,相比其他很多字符串搜索算法更快。

阅读全文

suricata 4.0.3 应用层协议检测

suricata中应用层协议检测包含了两种方法,pattern match和probing parser,这里对协议检测的初始化和查找做整理记录。

阅读全文

AC自动机多模式匹配

Aho–Corasick算法是由Alfred V. Aho和Margaret J.Corasick 发明的字符串搜索算法,用于在输入的一串字符串中匹配有限组“字典”中的子串。它与普通字符串匹配的不同点在于同时与所有字典串进行匹配。

阅读全文

suricata 4.0.3 tcp reassembly

tcp协议上的应用层协议检测时,需要做数据重组,这里简单介绍reassembly逻辑。

阅读全文

suricata 4.0.3 flow

FlowWorker线程模块的处理函数为FlowWorker,主要包括五部分功能,分别是Flow处理、应用层协议识别、特征检测、输出、tcp segment清理。这里简单记录flow的处理。

阅读全文