Els camps de port SOCKS5 són dos bytes sense signe en ordre de bytes de xarxa: el byte més significatiu va primer. A Go, codifiqueu directament un uint16 ja validat:

var field [2]byte
binary.BigEndian.PutUint16(field[:], port)

Importeu encoding/binary. Per al port 1080, els bytes hexadecimals resultants són 04 38. Per al port 4, són 00 04; el zero inicial forma part del camp d'amplada fixa.

Si l'entrada comença com un enter més gran o una cadena, valideu-ne el rang numèric abans de convertir-la a uint16. La conversió pot descartar els bits alts en lloc d'informar d'un valor fora de rang.

En una resposta SOCKS5, serialitzeu BND.PORT, el camp de port vinculat del servidor. No copieu el port de destinació sol·licitat en aquest camp només perquè tots dos ocupen dos bytes. Col·loqueu el camp codificat després de l'adreça de la resposta, la longitud de la qual depèn de l'ATYP.

Articles relacionats