Go-pcap 是一个纯 Go 数据包捕获库和 tcpdump 风格的 cBPF 过滤器编译器。它提供类似 libpcap 的抓包接口,但不依赖 CGO,因此可以使用 CGO_ENABLED=0 构建,并能更方便地进行跨平台交叉编译。
核心特点
- 纯 Go 实现:无需 libpcap 和 CGO,支持静态构建及便捷的跨平台编译。
- 实时数据包捕获:为 Linux 和 macOS/Darwin 提供类似 libpcap 的实时抓包接口。
- cBPF 过滤器编译:将常用 tcpdump 风格表达式编译为 classic BPF 指令。
- 链路层感知:同一套过滤器语法可面向 Ethernet(EN10MB)或 Raw IP(L3)数据布局生成指令。
- 命令行工具:附带
pcapCLI,可进行实时抓包并输出兼容 tcpdump 风格的数据包摘要。
使用场景
- 网络观测工具开发:为流量采集、协议分析和故障诊断工具提供纯 Go 抓包能力。
- 无 CGO 部署环境:适用于静态二进制、精简容器和需要跨平台交叉编译的项目。
- 流量过滤:通过 tcpdump 风格表达式生成 cBPF 指令,过滤 IPv4、IPv6、ARP、TCP、UDP、ICMP 等常见协议流量。
- 命令行诊断:使用配套
pcapCLI 实时捕获流量并输出数据包摘要。
参与项目
使用方法、过滤语法和开发指南请参阅 Go-pcap 项目文档。欢迎通过 Issues 和 Pull Requests 参与协议、链路类型、兼容性或性能方面的改进。项目采用 Apache License 2.0。