0

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

4

2 回答 2

2

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

看起来你有两个选择:

  • 依赖 L7 HTTP 反向代理(添加标头)
  • 如果您想阻止数据包到达您的主机并将它们发回,请使用 nfqueue。
于 2018-10-09T10:11:58.217 回答
0

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

于 2020-03-10T14:45:01.083 回答