在 BPF_PROG_TYPE_SK_LOOKUP 中获取连接所有者的 PID

Shu*_*ain 6 ebpf xdp-bpf

我找到了一个 eBPF 示例,它代理请求,根据目标端口过滤哪些请求。

我试图按客户端的 process_id 而不是目标端口进行过滤,并尝试添加bpf_get_current_pid_tgid() here。然而,该方法似乎在该上下文中未找到/可用。

在这种情况下,如何找到正确的方法来获取连接所有者 process_id ?

Dyl*_*ink 3

BPF_PROG_TYPE_SK_LOOKUP当主机知道传入连接应该由本地套接字处理但还不知道是哪个套接字时,程序就会被调用。通常,内核会查看套接字绑定的 IP 和端口,但此程序类型允许我们替换该逻辑并将连接分配给通常不允许的套接字。例如,将整个 /24 的流量发送到单个套接字(绑定仅允许您侦听特定 IP 或通配符,而不是 IP 范围)。

因此,由于该程序类型的工作是为连接选择所有者,因此还没有可以返回的 PID。bpf_get_current_pid_tgid验证程序将拒绝任何尝试在程序类型中使用帮助程序的程序BPF_PROG_TYPE_SK_LOOKUP

在这种情况下,如何找到正确的方法来获取连接所有者 process_id ?

您可能正在寻找在另一个位置触发的另一种程序类型。