【问题标题】:Is it possible to re-transmit a packet after capturing it using XDP and processing it in userspace?是否可以在使用 XDP 捕获数据包并在用户空间处理后重新传输数据包?
【发布时间】:2020-03-10 22:45:01
【问题描述】:

我需要编写一个位于两台服务器之间的应用程序,并通过向每个数据包添加特定的 HTTP 标头来修改从一台服务器发送到另一台服务器的 HTTP 数据包。
显然它必须尽可能快地完成,我发现通过使用 eBFP 和 XDP,我可以捕获具有高性能的数据包,但据我所见,XDP 的判断是 abort、drop、pass 和发送。
使用 tx 判决我可以将捕获的数据包发送到用户空间程序来修改它,但是我不知道如何在标头修改后发送数据包?这段视频here 解释了使用 eBPF 和 XDP 可以做什么,它说可以做到,但我不知道如何做。
任何帮助将不胜感激。

【问题讨论】:

  • 你发现了什么吗?我可能有几个输入。
  • @Aif 不,我没有发现任何有用的东西。

标签: linux linux-kernel packet-capture packet-injection


【解决方案1】:

据我所知,XDP_TX 不会让数据包通过用户空间。它将在它来自的同一个 NIC 上返回数据包。此外,您可以修改数据包,但我看不到扩展数据包的简单方法。因此,要编写额外的标头,您必须覆盖一些数据。

看起来你有两个选择:

  • 依赖 L7 HTTP 反向代理(添加标头)
  • 如果您想阻止数据包到达您的主机并将其发回,请使用 nfqueue。

【讨论】:

    【解决方案2】:

    如果您仍然对该主题感兴趣,答案是否定的。但是,XDP 套接字可用于从内核空间或用户空间转发/发送新数据包。在 github 上查看 XDP 教程,或查看 Linux 内核中的代码 samples/bpf。

    【讨论】:

    猜你喜欢
    • 2013-07-25
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多