如何使用可加载模块修改 Linux 网络堆栈?

How to modify the Linux network stack with a loadable module?

对于一个项目,我们想要修改在网络堆栈中移动的所有数据。理想情况下,这应该是独立于协议的,并且应该无缝地融入 "normal" 网络堆栈。

基本上,每一位数据都必须先通过我们的设备进行路由,然后再传递到网络堆栈的其余部分。在this图片中,设备应该在in/between第二层和第三层的某个地方。

我的第一个想法是修改socket.c(this image shows the usual kernel flow for network data)中的代码,先将数据写入我们的设备,然后再进行正常操作,但如果有这个功能就更好了可加载(例如使用内核模块),因此用户可以根据需要将其关闭。

所以我的问题是:有没有什么办法可以编写内核模块插入网络堆栈以获取和修改传入和传出数据?

提前致谢!

您调查过 Netfilter 了吗?您可以使用 netfilter 挂钩编写可加载内核模块。

一个resource.