⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netfilter

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻
字号:
any problems,send mails to lysindybear@sina.com.cn


相关文件
	/net/core/netfilter.c
	/net/ipv4/netfilter/ip_queue.c


目前看来,最主要的TCP/IP协议的开始就是ip_queue.c中的init函数,
通过nfnl = netlink_kernel_create(NETLINK_FIREWALL, netlink_receive_user_sk);这一行程序
产生了一个全局的struct sock结构,并且这个sock结构中的protinfo(协议信息)中的netlink_opt中的
data_ready函数被设置成为netlink_receive_user_sk,


而netlink_receive_user_sk则从sk中摘下一个sk_buff结构,送到netlink_receive_user_skb中去处理
static void netlink_receive_user_sk(struct sock *sk, int len)
{
	do {
		struct sk_buff *skb;

		if (rtnl_shlock_nowait())
			return;
		while ((skb = skb_dequeue(&sk->receive_queue)) != NULL) {
			netlink_receive_user_skb(skb);
			kfree_skb(skb);
		}
		up(&rtnl_sem);
	} while (nfnl && nfnl->receive_queue.qlen);
}


******************使用方法***************************************
在init_module中使用nf_register_hook(&ip_vs_in_ops)注册一个接口函数集合,

例如下面的函数集合
static struct nf_hook_ops ip_vs_in_ops = {
	            { NULL, NULL },
    	            packet_in, PF_INET, NF_IP_LOCAL_IN, 100
};

对其中的packet_in函数进行具体的操作,
 static unsigned int packet_in(unsigned int hooknum,
	                 struct sk_buff **skb_p,
	                const struct net_device *in,
	                const struct net_device *out,
 			int (*okfn)(struct sk_buff *))
这个函数中穿进来的sk_buff就是数据包,我们可以对他进行各种操作


系统一共定义了几种截取点
#define NF_IP_PRE_ROUTING	0
#define NF_IP_LOCAL_IN		1
#define NF_IP_FORWARD		2
#define NF_IP_LOCAL_OUT		3
#define NF_IP_POST_ROUTING	4
他们的作用顺序是NF_IP_PRE_ROUTING在最前面,她可以截取所有的IP包,然后按照IP包的方向分为
LOCAL和FORWARD,如果是送到本地机的IP包,就走NF_IP_LOCAL_IN这条路,然后经过NF_IP_LOCAL_OUT
到NF_IP_POST_ROUTING,如果IP包是被转发到别的机器上,就走NF_IP_FORWARD这条路,到NF_IP_POST_ROUTING
所有的路径都要汇集到NF_IP_POST_ROUTING这一点上。


*****************************************************************















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -