我正在编写一个bpf过滤器来阻止某些netlink消息。我正在尝试调试bpf代码。有没有可以帮助我的调试工具?
我最初考虑使用nlmon来捕获netlink消息:
来自https://jvns.ca/blog/2017/09/03/debugging-netlink-requests/
#创建网络接口
sudo ip link add nlmon0 type nlmon
sudo ip link set dev nlmon0 up
sudo tcpdump -i nlmon0 -w netlink.pcap#捕获你的数据包
然后使用./bpf_dbg( https://github.com/cloudflare/bpftools/blob/master/linux_tools/bpf_dbg.c)
1)./bpf_dbg
进入shell(shell cmds用'>'表示):
2)> load bpf 6,40 0 0 12,21 0 3 20 ...(这是我打算调试的bpf代码)
3)> load pcap netlink.pcap
4)> run / disassemble / dump / quit(不言自明)
5)>断点2(在加载的BPF insn 2处设置bp,然后执行run
;
可以设置多个bps,当然是对breakpoint
的调用
w / o args显示当前加载的bps,breakpoint reset
重置所有断点)
6)>选择3(run
等将从pcap中的第3个数据包开始)
7)> step [ - ,+](执行单步执行BPF)
之前有人试过这个吗?
另外,我无法在我的linux内核上加载nlmon模块(有没有这方面的文档?)
我正在运行内核版本Linux版本4.10.0-40-generic nlmon模块似乎存在于内核源代码中:
https://elixir.free-electrons.com/linux/v4.10/source/drivers/net/nlmon.c#L41
但是,当我在里面搜索时,/ lib / modules /为nlmon.ko我找不到任何东西。
instance-1:/lib/modules$ find . | grep -i nlmon
instance-1:/lib/modules$