我正在尝试实现一项功能,其中可以根据HTTP请求的路径将请求转发到其他端口。
例如,如果请求GET / foo,我想将其转发到端口81,如果它是/ bar,我想将其转发到端口82。如果是其他请求,我想继续传入时将其转发到端口80。
有没有这样的示例eBPF程序?
我试图弄清楚如何确定HTTP请求是什么,因为eBPF将在数据包级别应用
答案 0 :(得分:0)
我目前不知道这样的例子。我知道Cilium项目使用BPF在HTTP API级别上创建过滤器,但是它们是在运行时生成BPF程序的,我不认为该存储库已经预先编译了示例。
如前所述,eBPF程序处理整个数据包,包括L2 / L3 / L4标头。因此,为了确定您拥有的HTTP请求,您将必须执行以下操作:
GET␣
吗?如果没有,请退出。/foo
和/bar
匹配至少对于第一步(处理以太网,IP,TCP),您可以在网络上找到可用的示例。从parse_simple.c
in kernel samples到更复杂的文件,例如Netronome样本存储库中的this L4 load balancer。