Codificar portas SOCKS5 em Go como dois bytes big-endian
Use os auxiliares binary.BigEndian do Go para campos de porta SOCKS5 em vez de fatiar uma string binária de comprimento variável.
Os campos de porta SOCKS5 são dois bytes sem sinal na ordem de bytes de rede: o byte mais significativo vem primeiro. Em Go, codifique diretamente um uint16 já validado:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importe encoding/binary. Para a porta 1080, os bytes hexadecimais resultantes são 04 38. Para a porta 4, são 00 04; o zero inicial faz parte do campo de largura fixa.
Se a entrada começar como um inteiro maior ou uma string, valide seu intervalo numérico antes de converter para uint16. A conversão pode descartar os bits altos em vez de relatar um valor fora do intervalo.
Em uma resposta SOCKS5, serialize BND.PORT, o campo de porta vinculada do servidor. Não copie a porta de destino solicitada para esse campo só porque ambas ocupam dois bytes. Coloque o campo codificado após o endereço da resposta, cujo comprimento depende do ATYP.