- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 netfilter 框架中有两个钩子(Hook)。
一个位于 NF_IP_PRE_ROUTING
用于传入数据包,另一个位于 NF_IP_LOCAL_OUT
用于传出数据包。
传出数据包:
现在,所有从特定 IP 地址发出的 IPv4 数据包都封装在另一个 IPv4-UDP 数据包中。
我使用 pskb_expand_head
API 来为封装留出更多空间。并且,然后用ip_route_output_key
找到合适的rtable
。使用 rtable
,我重新分配 skb->dst
和 skb->dev
。然后,我继续使用 NF_ACCEPT
接受数据包。
skb_dst_drop(skb);
skb_dst_set(skb, &rt->dst);
skb->dev = skb_dst(skb)->dev;
传入数据包:
现在,所有封装的数据包都被接收并根据端口号进行识别。并且,封装(IP+UDP+XYZ HEADER)
被拉出。类似于传出数据包我使用 ip_route_output_key
获取 rt(rtable)。
使用 rtable 重新分配 skb->dst
和 skb->dev
。然后我用 NF_ACCEPT
所以,碰巧我也收到碎片整理传入的数据包,我有点困惑应该如何处理它们。
我希望对数据包进行碎片整理,然后再接收整个数据包。对此有任何想法。我一直在浏览可用的功能
ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER);
但这似乎是用于在NF_IP_LOCAL_IN
阶段组装数据包,但我想要在NF_IP_PRE_ROUING
阶段组装数据包。
我们将不胜感激。
最佳答案
设置CONFIG_NF_DEFRAG_IPV4
,定义在/net/ipv4/netfilter/Kconfig
,它的钩子(Hook)ipv4_defrag_ops[]
会位于 >NF_INET_PRE_ROUTING
和 NF_INET_LOCAL_OUT
。并且你的钩子(Hook)的优先级应该大于 NF_IP_PRI_CONNTRACK_DEFRAG
,因此,你的钩子(Hook)在 ipv4_defrag_ops[]
之后执行,它会在 NF_IP_PRE_ROUING< 为你组装
阶段。之后,skb
进入你的钩子(Hook),应该是一个组装包。
关于c - 使用 Netfilter 封装和解封装 IPv4 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23234344/
为什么 pickle 重用现有的 Python 类“C”而不是从 pickle 字节重建类?有没有一种方法可以在没有副作用的情况下 pickle 和解 pickle ? 这是我的回复 session
我是一名优秀的程序员,十分优秀!