1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-07-05 13:35:23 +00:00
v2fly/testing/scenarios/socks5_helper.go

50 lines
1.3 KiB
Go
Raw Normal View History

2015-11-06 12:08:20 +00:00
package scenarios
import (
2016-08-20 18:55:45 +00:00
v2net "v2ray.com/core/common/net"
2015-11-06 12:08:20 +00:00
)
const (
socks5Version = byte(0x05)
)
func socks5AuthMethodRequest(methods ...byte) []byte {
request := []byte{socks5Version, byte(len(methods))}
request = append(request, methods...)
return request
}
2015-11-06 12:45:41 +00:00
func appendAddress(request []byte, address v2net.Address) []byte {
2016-08-14 16:14:12 +00:00
switch address.Family() {
case v2net.AddressFamilyIPv4:
2015-11-06 12:08:20 +00:00
request = append(request, byte(0x01))
request = append(request, address.IP()...)
2016-08-14 16:14:12 +00:00
case v2net.AddressFamilyIPv6:
2015-11-06 12:08:20 +00:00
request = append(request, byte(0x04))
request = append(request, address.IP()...)
2016-08-14 16:14:12 +00:00
case v2net.AddressFamilyDomain:
2015-11-06 12:08:20 +00:00
request = append(request, byte(0x03), byte(len(address.Domain())))
request = append(request, []byte(address.Domain())...)
}
return request
}
2015-11-06 12:45:41 +00:00
2015-12-16 22:53:38 +00:00
func socks5Request(command byte, address v2net.Destination) []byte {
2015-11-06 12:45:41 +00:00
request := []byte{socks5Version, command, 0}
2016-09-20 09:53:05 +00:00
request = appendAddress(request, address.Address)
request = address.Port.Bytes(request)
2015-11-06 12:45:41 +00:00
return request
}
2015-12-16 22:53:38 +00:00
func socks5UDPRequest(address v2net.Destination, payload []byte) []byte {
2015-11-06 12:45:41 +00:00
request := make([]byte, 0, 1024)
request = append(request, 0, 0, 0)
2016-09-20 09:53:05 +00:00
request = appendAddress(request, address.Address)
request = address.Port.Bytes(request)
2015-11-06 12:45:41 +00:00
request = append(request, payload...)
return request
}