-
Linux操作系统,推荐使用最新稳定内核版本.
本人自己的实验环境是
Ubuntu 18.04
标准版vagrant虚拟机,内核版本为4.15.0
。可以从这里下载该vagrant虚拟机环境,已安装bcc工具集合:下载链接: https://pan.baidu.com/s/11dsEU6Yk6KGDGNor-fbsgQ 提取码: qvhc
以下命令如无特殊说明,均在Ubuntu环境下测试执行。
-
预装clang、LLVM、iproute2、libelf-dev
# for ubuntu apt install clang llvm libelf-dev # test clang clang -v # test llvm llc --version # test iproute2 ip link
- 编写代码,文件名
xdp_drop_all.c
#include <linux/bpf.h> int main() { # 意思是无论什么网络数据包,都drop丢弃掉 return XDP_DROP; }
- 编译代码,生成obj文件
clang -O2 -target bpf -c xdp_drop_all.c -o xdp_drop_all.o
- attach xdp 程序到主机网卡上
# 通过ip link查询主机上的可用网卡设备名称,一般可以选取本机对外可以访问的IP所在的网卡设备 ip link set dev [network-device-name] xdp obj xdp_drop_all.o sec .text
- 测试
- 使用
tcpdump
命令监测网络数据包传输情况 - 使用
ping
命令创造测试网络数据包
- 使用
- 从主机网卡上detach xdp 程序
ip link set dev [network-device-name] xdp off
#include <linux/bpf.h>
#define SEC(NAME) __attribute__((section(NAME), used))
SEC("xdp")
int xdp_drop_all(struct xdp_md *ctx)
{
return XDP_DROP;
}