问题标签 [bpf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
filter - 如何为 Linux 内核编写和调试 Berkeley Packet Filter
我正在寻找在 Linux 中开发内核数据包过滤器以过滤大量网络流量中的数据包的方法。
请问在Linux内核中是否可以使用Berkeley Packet Filter(BPF)来实现Bloom filter?是否有任何替代和更好的方法来实现内核过滤器?
BPF 语法相当低级且难以理解,是否有任何高级/更简单的方法来编写 BPF 和好的示例/参考/教程?还有,如何在开发过程中调试 BPF?
networking - 在 TCPdump 中解构 BPF 过滤器
试图解构这个 TCPdump BPF 风格的过滤器,需要一些帮助:
它取自这里
为更好地了解正在发生的事情而采取的步骤:
这就是我感到困惑的地方。我在上面提供的超链接中的解释是
multiply it by four ( (tcp[12:1] & 0xf0)>>2 ) which should give the tcp header length
如果为零是不可能的。请:
- 帮我找出计算中的错误(也许我正在混合 TCP 和 IP 标头?);
- 提供一些指导我的逻辑是否正确。
这是数据包:
sample - 使用 libpcap 库样例转储文件
事实证明,使用 libpcap 非常简单,但是对于巨大的(在任意意义上).pcap 转储,速度始终是一个问题。
仅对转储进行采样是否有任何常见做法?也许可以有效地将“每五帧读取一次”作为 pcap 过滤器,或者我应该只是在 pcap_handler 中什么都不做?
kernel - 是否定义了伯克利包过滤器操作码值实现?
是否定义了伯克利包过滤器操作码值实现?
我一直认为 tcpdump/libpcap 在 BPF 领域是权威的。我注意到 linux 内核和 tcpdump 读取 BPF 过滤器的方式不同。BPF 助记符和行为是相同的,但实际操作码值本身似乎不同。我在互联网上寻找“标准”,但我发现的所有东西都只有助记符。
linux - 如何构建 Linux 内核以支持 SO_ATTACH_BPF 套接字选项?
我想构建一个支持eBPF
(CentOS 7
内核版本为3.10.0
)的应用程序:
于是我下载了一个4.0.5
版本,在上面进行如下配置:
然后按照此链接构建和安装4.0.5
内核。
执行后make modules_install install
发现还是没有SO_ATTACH_BPF
in <asm-generic/socket.h>
,所以上面的代码无法编译成功。
如何构建 Linux 内核以支持SO_ATTACH_BPF
套接字选项?
pcap - 使用“vlan”的 Libpcap 过滤器字符串的行为很奇怪
使用 libpcap pcap_compile 时出现一些奇怪的错误如果这些是已知问题,或者我正在犯一些 bpf 格式/排序错误,请告诉我
例如:
1)如果我通过(protocol_filter 和 vlan_filter),我看不到数据包:像((arp 或 udp 端口 234)和 vlan 12)但是如果我将 exp 交换为(vlan_filter 和 protocol_filter),那么数据包过滤工作:像((vlan 12) 和 (arp 或 udp 端口 234))
2)如果我包含带有“not”协议的vlan,我会得到应用了协议过滤器的数据包:例如:(((vlan 20))和(not(udp端口3800))和((not(tcp))和(not( udp 端口 53)) 和 (not (icmp)) 和 (not (ip6)) 和 (not (udp port 5353))))
如果我没有在协议中包含 vlan,当 bpf 为:(not (udp port 3800)) and ((not (tcp)) and (not (udp port 53)) and (不是(icmp))和(不是(ip6))和(不是(udp端口5353))))
3)(((not vlan)) and (not (udp port 3800)) and ((not (tcp)) and (not (udp port 53)) and (not (icmp)) and (not (ip6)) and (not (udp port 5353)))) 获取所有数据包,包括 ip6、tcp 等
(((not vlan)) and (not (udp port 3800)) and (((tcp)) or ((udp port 53)) or ((icmp)) or ((ip6)) or ((udp port 5353) ))) 甚至没有得到单个数据包
parsing - Tcpdump BPF 语法歧义
在 tcpdump/libpcap 语法中观察这些 BPF 过滤器:
我认为主机 z 匹配上述所有内容(6 除外,因为它的语法无效)。我的问题是第 4 行。tcpdump 程序认为它等同于第 5 行,但我认为这不直观,因此不正确。第 5 行是明确的,第 3 行也是如此。但是,第 4 行可以同时表示两件事,这取决于你如何看待事物。我认为,因为你不能将 y 与“host”关键字分开,所以将第 4 行视为第 5 行是错误的。
这背后的解析逻辑是什么?谁能解释为什么 1 == 4 == 5 以及为什么 2 != 4 和 3 != 4 ?
tcpdump - BPF(Berkeley Packet Filter)或tcpdump中什么时候使用内存暂存空间15?
我的问题是关于 tcpdump 命令的。命令“tcpdump -i eth1 -d”列出了过滤器中涉及的汇编指令。我很好奇没有指令正在访问 M[15](内存插槽 15)。
谁能告诉我,有没有使用这个内存插槽的过滤器?它的用途是什么?它是如何使用的?
linux-kernel - 如何使用 BPF 过滤内核函数参数?
如何使用 Berkeley Packet Filter (BPF) 过滤内核中的函数参数?该函数应该是任何非内联函数,而不仅仅是系统调用。此外,最好可以取消引用函数参数中的指针以进行验证。
我搜索了互联网,但找不到任何用例。大部分资料只描述了如何使用 seccomp / seccomp-BPF。
似乎集成了 eBPF 和 kprobe/jprobe 来实现挂钩。但我在网上找不到一个很好的例子。
freebsd - FreeBSD 内核中 bpf_filter() 的可能返回码是什么?每个返回码是什么意思?
FreeBSD 内核中 bpf_filter() 的可能返回码是什么?
每个返回码是什么意思?
手册页(链接)在这个问题上不清楚。
该bpf_filter()
函数在包 pkt 上从 pc 开始执行过滤程序。wirelen 参数是原始数据包的长度,buflen 是存在的数据量。buflen 的值0
比较特殊;它表明 pkt 实际上是一个指向 mbuf 链 ( struct mbuf *
) 的指针。
返回值
如果没有过滤器,该bpf_filter()
函数将返回(转换为无符号整数)。-1
否则,它返回过滤程序的结果。
65535
当有比赛和0
没有比赛时,我会得到。不确定返回值是什么意思65535
。
有人可以bpf_filter()
详细解释一下返回码吗?