这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战
笔者此前对Linux内核相关模块稍有研究,实现内核级通信加密、视频流加密等,涉及:Linux内核网络协议栈、Linux内核通信模块、Linux内核加密模块、秘钥生成分发等。
后续考虑开设Linux内核专栏。
掘金平台写过关于XFRM框架的分析,现简单对XFRM框架做简单的demo。
一、Netfilter应用案例
如下为在网络上找到的一个内核模块 Demo,该模块的基本功能是将经过 IPv4 网络层 NF_INET_LOCAL_IN 节点的数据包的源 Mac 地址,目的 Mac 地址以及源 IP,目的 IP 打印出来,源码包下载.NF_INET_LOCAL_IN
代码如下所示:
1 | c复制代码#include <linux/module.h> |
dmesg | tail
后的结果:
1 | csharp复制代码[452013.507230] [MAC_DES:70,f3,95,e,42,faMAC_SRC: 0,f,fe,f6,7c,13 Prot:8] |
这个 Demo 程序是个内核模块,模块入口为module_init传入的init_nf_test函数。
在init_nf_test函数中,其通过 Netfilter 提供的 nf_register_hooks 接口将自定义的nf_test_opt注册到钩子节点中。nf_test_opt为struct nf_hook_ops类型的结构体数组,其内部包含了所有关键元素,比如钩子函数的注册节点(此处为NF_INET_LOCAL_IN)以及钩子函数(nf_test_in_hook)。
在nf_test_in_hook函数内部,其检查每一个传递过来的数据包,并将其源 Mac 地址,目的 Mac 地址,源 IP 地址以及目的 IP 地址打印出来。最后返回NF_ACCEPT,将数据包交给下一个钩子函数处理。
二、Linux流量控制
Traffic Control HOWTO:大多利用Netfilter来实现流的控制.
比较详细的文档是 Linux Advanced Routing & Traffic Control HOWTO 和缩简版的 Traffic Control HOWTO.
三、扩展阅读
Monitoring and Tuning the Linux Networking Stack: Sending Data
Linux Netfilter and Traffic Control
Netfilter and iptables homepage
Linux 网络层收发包流程及 Netfilter 框架浅析
Netfileter & iptables 实现(一)— Netfilter实现
本文转载自: 掘金