在netlink消息上调试bpf代码

时间:2017-12-23 00:48:39

标签: debugging linux-kernel netlink bpf

我正在编写一个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)&​​gt; 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$

0 个答案:

没有答案