内核释放skb有kfree_skb和consume_skb, 根据内核本身设计, kfree_skb属于异常丢包,consume_skb属于正常丢包,所以这里只Hook了kfree_skb
drop_watch, 查看 dip>丢包的栈帧
利用Linux 我们可以实现复杂的防火墙机制,大家防火墙路由器,得易于Linux 强大的内核,这些实现都变得非常简单,通过简单的几条iptables命令就可以定制我们的防火墙功能。那么Linux内核是如何完成对包的处理,流程又是怎么样呢?
一 首先看一下netfilter的整体架构
netfilter的具体实现,以NF_IP_PREROUTING为例
二 NF_HOOK的实现原理
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
{
}
通过NF_HOOK的宏定义可以看到,NF_HOOK主要是调用nf_hook_slow,那么,nf_hook_slow主要做了哪些东西呢?
nf_hook_slow(pf, hook, skb, indev, outdev, okfn, thresh)
{