首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Netfilter封装和解封装IPv4数据包

使用Netfilter封装和解封装IPv4数据包
EN

Stack Overflow用户
提问于 2014-04-23 03:43:26
回答 1查看 1K关注 0票数 1

我在netfilter框架中有两个钩子。

一次在NF_IP_PRE_ROUTING处理传入数据包,另一次在NF_IP_LOCAL_OUT处理传出数据包。

传出数据包:

现在,从特定IP地址发送的所有IPv4数据包都封装在另一个IPv4 4-UDP数据包中。

我使用pskb_expand_head API来获得更大的封装空间。然后用ip_route_output_key找到合适的rtable。使用rtable,我重新分配了skb->dstskb->dev。然后,我继续使用NF_ACCEPT接受数据包。

代码语言:javascript
复制
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(可选)。

使用可重新分配的skb->dstskb->dev。然后我接受带有NF_ACCEPT的包

因此,碰巧我也收到了碎片传入的数据包,我有点困惑,他们应该如何处理。

我希望碎片包排队,然后接收整个数据包。对此有任何想法。我一直在浏览可用的功能

代码语言:javascript
复制
ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER);

但这似乎是用于在NF_IP_LOCAL_IN阶段组装数据包,但I需要在NF_IP_PRE_ROUING阶段组装分组。

如对此有任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 07:20:06

Set CONFIG_NF_DEFRAG_IPV4是在/net/ipv4/netfilter/Kconfig中定义的,它的钩子ipv4_defrag_ops[]位于NF_INET_PRE_ROUTINGNF_INET_LOCAL_OUT。并且您的钩子应该比NF_IP_PRI_CONNTRACK_DEFRAG具有更大的优先级,因此,您的钩子在ipv4_defrag_ops[]之后执行,这将在NF_IP_PRE_ROUING阶段为您进行组装。在那之后,skb去你的钩子,应该是一个组装的包。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23234344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档