Cloudflare 发布了 xdpcap,一个基于 XDP 子系统的流量分析器

云耀公司 提交 开放项目 xdpcap,其中正在开发类似于tcpdump的网络数据包分析器,建立在该子系统的基础上 XDP (eXpress 数据路径)。 项目代码是用Go编写的 分发者 在 BSD 许可下。 该项目还 准备好的 用于从 Go 应用程序绑定 eBPF 流量处理程序的库。

xdpcap 实用程序与 tcpdump/libpcap 过滤表达式兼容,并允许您在同一硬件上处理大量流量。 Xdpcap 还可以用于在常规 tcpdump 不适用的环境中进行调试,例如使用 Linux 内核 XDP 子系统的过滤、DoS 保护和负载平衡系统,该子系统在数据包被 Linux 内核网络堆栈 (tcpdump没有看到 XDP 处理程序丢弃的数据包)。

通过使用 eBPF 和 XDP 子系统实现高性能。 eBPF 是内置于 Linux 内核中的字节码解释器,允许您创建传入/传出数据包的高性能处理程序,并决定转发或丢弃它们。 使用 JIT 编译器,eBPF 字节码可即时转换为机器指令,并以本机代码的性能执行。 XDP(eXpress Data Path)子系统补充了 eBPF,能够在网络驱动程序级别运行 BPF 程序,支持直接访问 DMA 数据包缓冲区,并在网络堆栈分配 skbuff 缓冲区之前的阶段工作。

与 tcpdump 一样,xdpcap 实用程序首先使用标准 libpcap 库将高级流量过滤规则转换为经典 BPF 表示形式 (cBPF),然后使用编译器将它们转换为 eBPF 例程的形式 CBFC,使用 LLVM/Clang 开发。 在输出中,流量信息以标准 pcap 格式保存,这允许您使用 xdpcap 中准备的流量转储,以便在 tcpdump 和其他现有流量分析器中进行后续研究。 例如,要捕获 DNS 流量信息,您可以运行“xdpcap /path/to/hook capture.pcap 'ip 和 udp port 53′”,然后使用捕获,而不是使用“tcpdump ip and udp port 53”命令.pcap 文件,例如使用命令“tcpdump -r”或在 Wireshark 中。

来源: opennet.ru

添加评论