mirror of
https://github.com/oneclickvirt/backtrace.git
synced 2025-04-22 04:02:07 +08:00
fix: 修复IPV6包构建
This commit is contained in:
parent
b93b8fbb4a
commit
5b416aa419
@ -1,6 +1,7 @@
|
||||
package backtrace
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"net"
|
||||
|
||||
"golang.org/x/net/icmp"
|
||||
@ -8,6 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func newPacketV6(id uint16, dst net.IP, ttl int) []byte {
|
||||
// 创建ICMP消息(回显请求)
|
||||
msg := icmp.Message{
|
||||
Type: ipv6.ICMPTypeEchoRequest,
|
||||
Body: &icmp.Echo{
|
||||
@ -15,16 +17,20 @@ func newPacketV6(id uint16, dst net.IP, ttl int) []byte {
|
||||
Seq: int(id),
|
||||
},
|
||||
}
|
||||
p, _ := msg.Marshal(nil)
|
||||
ip := &ipv6.Header{
|
||||
Version: ipv6.Version,
|
||||
NextHeader: ProtocolIPv6ICMP,
|
||||
HopLimit: ttl,
|
||||
Dst: dst,
|
||||
}
|
||||
buf, err := ip.Marshal() //TODO 修复
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return append(buf, p...)
|
||||
// 序列化ICMP消息
|
||||
icmpData, _ := msg.Marshal(nil)
|
||||
// 手动创建原始IPv6数据包头部
|
||||
ipHeaderBytes := make([]byte, ipv6.HeaderLen)
|
||||
// 设置版本和流量类别(第一个字节)
|
||||
ipHeaderBytes[0] = (ipv6.Version << 4)
|
||||
// 设置下一个头部(协议)
|
||||
ipHeaderBytes[6] = ProtocolIPv6ICMP
|
||||
// 设置跳数限制
|
||||
ipHeaderBytes[7] = byte(ttl)
|
||||
// 设置有效载荷长度(2字节字段)
|
||||
binary.BigEndian.PutUint16(ipHeaderBytes[4:6], uint16(len(icmpData)))
|
||||
// 设置目标地址(最后16个字节)
|
||||
copy(ipHeaderBytes[24:40], dst.To16())
|
||||
// 合并头部和ICMP数据
|
||||
return append(ipHeaderBytes, icmpData...)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user