Netfilter NF_HOOK执行流程分析 内核kprobe机制中的Jprobe机制 drop_watch hook_inspector

原理是通过内 核kprobe机制中的Jprobe机制,hook内核的kfree_skb函数,再进入kfree_skb之前,查看skb的目的地址是否是我们需要,需要就打印出前三栈帧。
内核释放skb有kfree_skb和consume_skb, 根据内核本身设计, kfree_skb属于异常丢包,consume_skb属于正常丢包,所以这里只Hook了kfree_skb
skb保存dev就两个地方, skb->dev, skb->iif
hook_inspector, 看netfilter hook链中注册的函数及执行顺序;
drop_watch, 查看 dip>丢包的栈帧

利用Linux 我们可以实现复杂的防火墙机制,大家防火墙路由器,得易于Linux 强大的内核,这些实现都变得非常简单,通过简单的几条iptables命令就可以定制我们的防火墙功能。那么Linux内核是如何完成对包的处理,流程又是怎么样呢?

一 首先看一下netfilter的整体架构

netfilter的具体实现,以NF_IP_PREROUTING为例

二 NF_HOOK的实现原理

    在网卡收到包之后交由ip层处理的时候,就交给了ip_recv函数

int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)

{

    在做了基本的头校验等工作后,就到了我们的重点NF_HOOK钩子函数,此时还未作路由等路处理

    return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL,

         ip_rcv_finish);

    在做完PRE_ROUTING的筛选后,会执行ip_recv_finish函数,继续执行路由等处理,如果是本地的就会交给更高层的协议进行处理,如果不是交由本地的就执行FORWARD

}

通过NF_HOOK的宏定义可以看到,NF_HOOK主要是调用nf_hook_slow,那么,nf_hook_slow主要做了哪些东西呢?

nf_hook_slow(pf, hook, skb, indev, outdev, okfn, thresh)

{

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值