0

我只是在学习XDP。在旅途中,我遇到了一个我无法理解的案例。当我注意到没有任何变化时,我正在对某些 UDP 数据包尝试一些花哨的东西。所以我试图用一个最小的例子来重现这个问题。这是最小的示例:

#include <linux/bpf.h>
#include <linux/in.h>                             
#include <linux/if_ether.h>                       
#include <linux/ip.h>
#include <linux/udp.h>
                                                         
#define SEC(NAME) __attribute__((section(NAME), used))
                                                                                                                      
SEC("obfuscator_main")
int dropper(struct xdp_md *ctx) {
    return XDP_DROP;        
}
char _license[] SEC("license") = "GPL";

(不要介意“混淆器”名称,它是其余代码的剩余部分)。

我编译并加载这个:

clang -Wall -O2 -target bpf -c obfuscate.c -o obfuscate.o
sudo ip link set dev enp3s0 xdp obj obfuscate.o sec obfuscator_main

我确认传入我的计算机的流量已完全丢弃。但是,数据包仍然可以出去。我 ping 了一个运行 tcpdump 的远程服务器,它看到了 ICMP 请求。但是我在本地计算机上没有得到任何响应。

为什么它不能对传出的数据包做任何事情?

4

1 回答 1

2

在挖掘谷歌搜索时,我在 GitHub 上遇到了这个问题:https ://github.com/iptraf-ng/iptraf-ng/pull/33

...因为 XDP 不处理传出流量。

事实证明,XDP 不处理传出数据包。我不知道为什么我花了这么长时间才遇到这个。原来我一直在误解一些事情。

于 2021-03-28T11:12:48.240 回答