核心特性
从构建到嗅探 — goscapy 用简洁、地道的 Go API 覆盖完整的数据包生命周期。
🔨 Builder API
流畅的方法链式调用,实现类型安全、显式的数据包构建,编译时即可保证正确性。
⚡ 快捷函数
针对常用协议栈的一行式构建函数,内置合理默认值,一个函数调用即可构建数据包。
🔬 数据包解析
将原始字节解析为结构化数据包,支持自动协议检测和分层提取。
📡 发送与接收
通过原始套接字在 L2(以太网)和 L3(IP)层级发送和接收数据包。
👃 数据包嗅探
支持回调和通道两种方式的实时流量捕获,内置 BPF 过滤器支持。
✅ 自动校验和
IP、TCP、UDP 和 ICMP 校验和在序列化时自动计算,无需手动处理。
🔗 层绑定
相邻层之间自动推断字段 — IP 叠加在以太网上会自动设置 EtherType。
💻 跨平台
支持 macOS(Darwin)和 Linux,使用平台特定的原始套接字实现。
支持的协议
全面覆盖网络协议栈各层。
| 层级 | 协议 |
|---|---|
| 链路层 | Ethernet(CSMA/CD)、ARP |
| 网络层 | IPv4 |
| 传输层 | TCP、UDP、ICMP |
| 载荷层 | Raw 原始字节 |
几秒即可开始
只需一条命令即可将 goscapy 添加到你的项目中。
bash
# 安装最新版本 go get github.com/smallnest/goscapy
一行代码构建数据包
🔨 Builder API
go
// Ethernet + IP + ICMP Echo Request pkt, err := goscapy.NewEthernet(). SrcMAC("aa:bb:cc:dd:ee:ff"). DstMAC("ff:ff:ff:ff:ff:ff"). Over(goscapy.NewIP(). SrcIP("192.168.1.1"). DstIP("8.8.8.8")). Over(goscapy.NewICMP(). Type(8).Code(0)). Build()
⚡ 快捷函数
go
// 同样的数据包,一行搞定 pkt, err := goscapy.EtherIPICMP( "ff:ff:ff:ff:ff:ff", "8.8.8.8", 8, 0, )
🔬 解析原始字节
go
// 将原始字节解析为结构化数据包 raw := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ...} pkt, err := packet.Dissect(raw, packet.DissectEthernet) fmt.Println(pkt.String()) // "Ethernet / IP / ICMP"