Codificar os portos SOCKS5 en Go como dous bytes big-endian
Use os axudantes binary.BigEndian de Go para os campos de porto SOCKS5 en lugar de cortar unha cadea binaria de lonxitude variable.
Os campos de porto SOCKS5 son dous bytes sen signo en orde de bytes de rede: o byte máis significativo vai primeiro. En Go, codifique directamente un uint16 xa validado:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importe encoding/binary. Para o porto 1080, os bytes hexadecimais resultantes son 04 38. Para o porto 4, son 00 04; o cero inicial forma parte do campo de ancho fixo.
Se a entrada comeza como un enteiro maior ou unha cadea, valide o seu rango numérico antes de convertela a uint16. A conversión pode descartar os bits altos en lugar de informar un valor fóra de rango.
Nunha resposta SOCKS5, serialice BND.PORT, o campo de porto vinculado do servidor. Non copie o porto de destino solicitado nese campo só porque ambos ocupan dous bytes. Coloque o campo codificado despois do enderezo da resposta, cuxa lonxitude depende de ATYP.