问题标签 [ebpf]

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.

0 投票
1 回答
1085 浏览

llvm-clang - 构建 ebpf 时,我得到“未知目标三重 'bpf',请使用 -triple 或 -arch”

我刚刚开始在 VM 中试验 XDP。我尝试为 bpf 构建并遇到错误,我该如何解决?

0 投票
2 回答
2139 浏览

llvm-clang - Linux 的 BPF 程序中是否允许循环?

我正在考虑在内核中复制数据包并转发到 5 个主机(单播)的解决方案。计划为此使用 eBPF/XDP。

我尝试循环 5 次,在循环内我计划克隆数据包,修改 DST IP 地址,更新 cksum 并在接收到的同一 intf 上发送数据包。

我在某处读到不能在 XDP 中使用循环,所以不确定这是否可行?

请需要专家的建议。

0 投票
1 回答
340 浏览

ebpf - EBPF 新手:需要帮助,在加载 EBF 代码时遇到错误

我写了一个 bpf 代码并用 clang 编译,在尝试加载时,我遇到了一个错误。我无法理解为什么以及如何解决它,需要专家的建议。

我在 VM 操作系统中运行此代码:Ubuntu 18.04.2 内核:Linux 4.18.0-15-generic x86_64

我尝试了简单的程序,我能够加载但不能使用这个程序。

看到的错误:

0 投票
0 回答
52 浏览

performance-testing - linux - 如何对事件之间的 CPU 使用情况进行采样

我想做类似“perf record -g -p PID -- sleep 60”之类的事情,但要将堆栈采样限制在特定时间段内,以避免应用程序中运行的许多线程产生噪音。

所以这个想法是,每当函数 X() 在线程 T 上运行时,我就开始在线程 T 上采集 cpu 样本,直到函数 Y() 在同一个线程上运行。输出可以限制为每个函数的 cpu% - 有和没有被调用者。

作为这种选择性采样的替代方法,我可以记录所有样本并过滤后处理阶段不感兴趣的样本。

关于如何做到这一点的任何想法?

0 投票
1 回答
379 浏览

ubuntu - eBPF / XDP 无法在 Ubuntu 16.04.6 上编译

升级 Ubuntu 16.04 后,无法再编译 eBPF。该bpf.h文件缺少关键结构,并且uapi似乎没有安装标头。

示例代码:

编译clang -target bpf -O2 -c xdp.c -o xdp.o

这将返回错误:

没有提到XDP

有什么问题?

0 投票
1 回答
105 浏览

linux - 如何监视新的网络连接 TTL

我需要注意新的连接 accept() TTL 并收集它们以进行进一步调查。

tcpdump 可以显示数据包的 TTL,但不能仅显示 accept() 连接。我试过 iovisor/bcc 并且tcpaccept做得很好,但没有显示 TTL。

Cloudflare 有一篇关于从连接中提取 TTL 的精彩文章,但它仅适用于您创建的套接字。

有谁知道如何做到这一点?

更新:不是accept(),而是inet_csk_accept()

0 投票
1 回答
712 浏览

dtrace - eBPF vs. System vs. DTrace

CentOS 未来主要支持哪一个?

我不是这些工具的专家,所以我想知道我应该更深入地学习哪个工具。

谢谢

0 投票
0 回答
347 浏览

linux - TCP 状态从 SYN_RECV 变为 ESTABLISHED 需要多长时间?

在玩 eBPF 时,我尝试了 tcpstates,发现 TCP 状态转换 SYN_RECV -> ESTABLISHED 的时间非常短

我的测试数字:

握手图中看起来从 SYN_RECV 到 ESTABLISHED 的转换时间应该接近主机之间的 RTT?

TCP 快速打开在主机上关闭。
操作系统:Ubuntu 18.10(GNU/Linux 4.18.0-21-generic x86_64)

是错误还是我错了?

更新:
tcpdump -ttttv

此 tcpdump 中主机之间的 ping 时间约为 83 毫秒

0 投票
1 回答
356 浏览

c - eBPF:连接到 security_socket_connect 时如何读取 sockaddr 结构

正如演示文稿Security Monitoring with eBPF中所建议的那样,我正在尝试连接security_socket_connect

虽然我的基于gobpf / bcc的代码部分有效,但我似乎无法读取sockaddr结构中的 IP 地址。

相关部分如下所示:

之后,我尝试读取 addr2 中的 IP 地址。第一次尝试是:

第二次尝试是bpf_probe_read

两个选项都出现相同的错误:

可以在此处找到带有可构建示例的 repo:socket-connect-bpf

0 投票
0 回答
131 浏览

networking - 来自内核空间和用户空间的 eBPF(BCC) 目标 IP 地址不匹配

我正在使用 eBPF 和 BCC 打印出我收到的数据包的 IP 地址。

对于内核,我编写了一个从 ip_t -> dst 打印出来的代码;我认为它是目的地的地址。

对于用户空间,我编写了一个代码来从字节码中打印出用户地址。

我已经用其他变量检查了很多次,看看我的程序是否向我显示了数据包头中存储的正确数据值,并且除了地址之外它都运行良好。

因此,对于用户级别,我得到:目标 ip 地址 = 203.237.53.121

这是我给服务器的静态 IP 地址。

但是,当我打印出 ip_t -> dst 时,我得到:3421320703

我不明白为什么他们会有不同的输出。

我正在尝试最终构建一个程序,我的目标是仅从特定的发件人 IP 地址等获取数据包。

如果有人可以帮助我,那就太好了。

谢谢 :)