如何修改struct sk_buff

时间:2010-01-02 21:31:32

标签: linux-kernel vpn

我必须编写一个vpn模块。首先,我编写了一个内核模块,用于修改所有传入和传出的TCP数据包。它使用netfilter钩子。对于传入的数据包,我通过将它们递增1来修改(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等特殊库)?

谢谢。

1 个答案:

答案 0 :(得分:2)

是的,您可以在不使用libnetfilter的情况下执行此操作。但鉴于您提供的有关项目的信息有限,很难就如何解决问题给出一个好的建议。这里有一些应该有用的参考资料。

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

如果您对更高级的内核空间挂钩感兴趣...
2)查看关于挂钩到netfilter netfilter kernel hooks

的文章
相关问题