socks5_helper.go 851 B

1234567891011121314151617181920212223242526272829303132333435
  1. package scenarios
  2. import (
  3. v2net "github.com/v2ray/v2ray-core/common/net"
  4. )
  5. const (
  6. socks5Version = byte(0x05)
  7. )
  8. func socks5AuthMethodRequest(methods ...byte) []byte {
  9. request := []byte{socks5Version, byte(len(methods))}
  10. request = append(request, methods...)
  11. return request
  12. }
  13. func socks5Request(command byte, address v2net.Address) []byte {
  14. request := []byte{socks5Version, command, 0}
  15. switch {
  16. case address.IsIPv4():
  17. request = append(request, byte(0x01))
  18. request = append(request, address.IP()...)
  19. case address.IsIPv6():
  20. request = append(request, byte(0x04))
  21. request = append(request, address.IP()...)
  22. case address.IsDomain():
  23. request = append(request, byte(0x03), byte(len(address.Domain())))
  24. request = append(request, []byte(address.Domain())...)
  25. }
  26. request = append(request, address.PortBytes()...)
  27. return request
  28. }