对于一个项目,我们要修改在网络堆栈中移动的所有数据。理想情况下,这应该独立于协议(protocol),并且应无缝融合到“常规”网络堆栈中。

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

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

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

在此先多谢!

最佳答案

您调查过Netfilter吗?您可以编写带有netfilter挂钩的可加载内核模块。

一个resource

10-04 18:30