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.

Artigos relacionados