Initial commit
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package wg
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// WGPlugin WireGuard 协议插件实现
|
||||
type WGPlugin struct{}
|
||||
|
||||
// NewWGPlugin 创建 WireGuard 协议插件
|
||||
func NewWGPlugin() *WGPlugin {
|
||||
return &WGPlugin{}
|
||||
}
|
||||
|
||||
// IsControlPacket 判断是否为控制包
|
||||
// WG 控制包类型:1 (Initiation), 2 (Response), 3 (CookieReply)
|
||||
func (p *WGPlugin) IsControlPacket(packet []byte) bool {
|
||||
if len(packet) < 1 {
|
||||
return false
|
||||
}
|
||||
|
||||
packetType := packet[0]
|
||||
return packetType == 1 || packetType == 2 || packetType == 3
|
||||
}
|
||||
|
||||
// IsDataPacket 判断是否为数据包
|
||||
// WG 数据包类型:4
|
||||
func (p *WGPlugin) IsDataPacket(packet []byte) bool {
|
||||
if len(packet) < 1 {
|
||||
return false
|
||||
}
|
||||
|
||||
return packet[0] == 4
|
||||
}
|
||||
|
||||
// ExtractRouteID 从数据包中提取路由标识(WG receiver index)
|
||||
// WG 数据包格式:[类型 (1 字节)][保留 (3 字节)][receiver index (4 字节)]...
|
||||
func (p *WGPlugin) ExtractRouteID(packet []byte) (uint32, error) {
|
||||
if len(packet) < 8 {
|
||||
return 0, fmt.Errorf("数据包过短:%d", len(packet))
|
||||
}
|
||||
|
||||
// 读取 packet[4:8],网络字节序解析为 uint32
|
||||
routeID := binary.BigEndian.Uint32(packet[4:8])
|
||||
return routeID, nil
|
||||
}
|
||||
Reference in New Issue
Block a user