在Netfilter模块中管理sk_buff数据

时间:2013-08-14 00:29:01

标签: networking netfilter

我正在构建一个模块,对其中包含的协议进行大量修改。我只是在破坏第4层数据包。我将它们转换回另一端应该如何。数据包大小仍为1:1,因此确实无需重新分配skb ...

也就是说,我更改skb->data,然后从NF_ACCEPT挂钩返回NF_IP_LOCAL_OUT。我有另一个钩子,告诉我sk_buff传递给NF_IP_POST_ROUTING,但数据包从未真正离开主机(就像我在Wireshark中看不到它一样)。我无法弄清楚发生了什么。数据包是否被丢弃?我没有使用除netfilter钩子之外的任何其他内核钩子而且我没有操纵目的地,所以它应该毫无疑问地离开机器。

任何可能导致它的想法?我是否需要在内核中注册我的自定义IPPROTO?我在/etc/protocols中得到它我认为这就足够了。还是我完全走错了路?我尝试使用内核中用于IPsec的ESP和AH代码,因为它也会破坏数据包,但所有转换代码都比我正在做的事情更复杂。

1 个答案:

答案 0 :(得分:0)

分辨率

看起来我正在做一切正常的一个例外。我没有重新计算IP头的校验和(因为我正在更改协议ID本身,这是强制性的。)

代码

iph->check = 0;
iph->check = ip_fast_csum(iph, iph->ihl);

并且它有效。