diff --git a/bk/trace.go b/bk/trace_ipv4.go similarity index 100% rename from bk/trace.go rename to bk/trace_ipv4.go diff --git a/bk/trace_ipv6.go b/bk/trace_ipv6.go new file mode 100644 index 0000000..0253cf9 --- /dev/null +++ b/bk/trace_ipv6.go @@ -0,0 +1,30 @@ +package bk + +import ( + "net" + + "golang.org/x/net/icmp" + "golang.org/x/net/ipv6" +) + +func newPacketV6(id uint16, dst net.IP, ttl int) []byte { + msg := icmp.Message{ + Type: ipv6.ICMPTypeEchoRequest, + Body: &icmp.Echo{ + ID: int(id), + Seq: int(id), + }, + } + p, _ := msg.Marshal(nil) + ip := &ipv6.Header{ + Version: ipv6.Version, + NextHeader: ProtocolIPv6ICMP, + HopLimit: ttl, + Dst: dst, + } + buf, err := ip.Marshal() + if err != nil { + return nil + } + return append(buf, p...) +}