mirror of
				https://github.com/oneclickvirt/backtrace.git
				synced 2025-11-04 15:52:37 +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