netfilter可以过滤数据包,也就对数据包经行了截获,它通过调用内核网络代码中的一些hook函数完成所需要的工作。
而当一个当数据包游历Linux内核的网络堆栈时,它穿过了几个hook点,在这里,数据包可以被分析并且选择是保留还是丢弃,这些hook点就是Netfilter hook。
而钩子函数(回调函数)也是系统内核为驱动程序提供的一些特定的函数,在驱动程序中某个变量的状态发生改变或将要改变或改变完成时,将会自动调用该回调函数,在netfilter中的状态就有五个(针对IPV4):
hook调用的时机
NF_IP_PRE_ROUTING 在完整性校验之后,选路确定之前
NF_IP_LOCAL_IN 在选路确定之后,且数据包的目的是本地主机
NF_IP_FORWARD 目的地是其它主机地数据包
NF_IP_LOCAL_OUT 来自本机进程的数据包在其离开本地主机的过程中
NF_IP_POST_ROUTIN

本文介绍了如何使用Linux内核的netfilter框架来截取和处理数据包。netfilter通过在网络堆栈的不同hook点调用钩子函数,允许在数据包的生命周期中进行过滤和操作。文章详细阐述了netfilter的五个IPv4钩子点及其作用,并解释了钩子函数的返回值意义。同时,展示了如何声明和注册一个简单的钩子函数来丢弃所有数据包。
最低0.47元/天 解锁文章
1019

被折叠的 条评论
为什么被折叠?



