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

时间:2016-05-08 12:35:29

标签: linux linux-kernel network-programming linux-device-driver embedded-linux

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

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

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

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

提前多多感谢!

1 个答案:

答案 0 :(得分:3)

你有没有看过Netfilter?您可以使用netfilter挂钩编写可加载的内核模块。

A resource