Codificar puertos SOCKS5 en Go como dos bytes big-endian
Use los ayudantes binary.BigEndian de Go para los campos de puerto SOCKS5 en lugar de cortar una cadena binaria de longitud variable.
Los campos de puerto SOCKS5 son dos bytes sin signo en orden de bytes de red: el byte más significativo va primero. En Go, codifique directamente un uint16 ya validado:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importe encoding/binary. Para el puerto 1080, los bytes hexadecimales resultantes son 04 38. Para el puerto 4, son 00 04; el cero inicial forma parte del campo de ancho fijo.
Si la entrada comienza como un entero mayor o una cadena, valide su rango numérico antes de convertirla a uint16. La conversión puede descartar los bits altos en lugar de informar un valor fuera de rango.
En una respuesta SOCKS5, serialice BND.PORT, el campo de puerto vinculado del servidor. No copie el puerto de destino solicitado en ese campo solo porque ambos ocupan dos bytes. Coloque el campo codificado después de la dirección de la respuesta, cuya longitud depende de ATYP.