【发布时间】:2013-08-14 00:29:00
【问题描述】:
我正在构建一个模块,对其中包含的协议进行大量修改。我只处理第 4 层数据包。我在另一端将它们转换回应有的状态。包大小还是1:1,所以真的不需要重新分配skb...
也就是说,我更改了skb->data,然后从我的NF_IP_LOCAL_OUT 挂钩返回NF_ACCEPT。我有另一个钩子显示 sk_buff 已传递给NF_IP_POST_ROUTING,但数据包实际上从未离开主机(因为我在 Wireshark 中看不到它)。我不知道发生了什么。数据包是否被丢弃在某个地方?除了 netfilter 钩子之外,我没有使用任何其他内核钩子,也没有操作目标,所以它应该毫无疑问地离开机器。
任何想法可能导致它?我需要向内核注册我的自定义 IPPROTO 吗?我在/etc/protocols 有它,我认为这就足够了。还是我完全走错了路?我尝试使用 IPsec 内核中的 ESP 和 AH 代码,因为它也会破坏数据包,但所有转换代码都比我正在做的事情要复杂。
【问题讨论】:
-
我没有关注你的所有帖子,所以只有一点:内核甚至不读取
/etc/protocols,无论如何这只是一个将名称与数字相关联的数据库。该文件与任何内核编程都无关。 -
我以为是这样。我发现与
/etc/protocols唯一有关的是netdb.h标头。稍后我会在收到一篇博文后更新我的答案,并详细说明我的工作以及我是如何做到的,以便其他人可以了解更多信息。
标签: networking netfilter