核心特性

从构建到嗅探 — 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"