【问题标题】:How to modify struct sk_buff如何修改 struct sk_buff
【发布时间】:2010-01-02 21:31:31
【问题描述】:

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

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


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

谢谢。

【问题讨论】:

    标签: linux-kernel vpn


    【解决方案1】:

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

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

    如果您有兴趣进行更高级的内核空间挂钩...
    2) 查看这篇文章,了解如何连接到 netfilter netfilter kernel hooks

    【讨论】:

    • netfilter 内核挂钩链接已损坏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2020-11-11
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多