Linux kernel 如何修改struct sk_buff

Linux kernel 如何修改struct sk_buff,linux-kernel,vpn,Linux Kernel,Vpn,我必须写一个vpn模块。首先,我编写了一个内核模块,用于修改所有传入和传出的TCP数据包。它使用netfilter挂钩。对于传入的数据包,我修改了(struct sk_buff)->data和(struct sk_buff)->tail指针之间的字节,方法是将它们增加1。对于传出数据包,我修改了(struct sk_buff)->data和(struct sk_buff)->tail指针之间的字节,方法是将它们递减一 然而,我试图在localhost和localhost之间建立一个TCP连接(通

我必须写一个vpn模块。首先,我编写了一个内核模块,用于修改所有传入和传出的TCP数据包。它使用netfilter挂钩。对于传入的数据包,我修改了
(struct sk_buff)->data
(struct sk_buff)->tail
指针之间的字节,方法是将它们增加1。对于传出数据包,我修改了
(struct sk_buff)->data
(struct sk_buff)->tail
指针之间的字节,方法是将它们递减一

然而,我试图在localhost和localhost之间建立一个TCP连接(通过netcat),但没有成功。你能告诉我我做错了什么吗?我需要修改struct
sk_buff
结构中的一些其他字段吗


是否可以仅从内核空间实现我的简单vpn模块?(因此不使用特殊库,如libnetfilter_queue)


谢谢。

是的,您无需使用libnetfilter即可完成此操作。但是考虑到您提供的关于项目的有限信息,很难就如何着手解决您的问题给出好的建议。这里有一些参考资料应该会有所帮助

1) 我建议您看看接口驱动程序API。这将允许您在应用程序空间而不是内核中实现代码。有关此类型VPN的一个很好的示例,请参见

如果您对更高级的内核空间挂钩感兴趣…

2) 查看这篇关于挂钩到netfilter的文章

netfilter内核挂钩链接已断开