Pole portu SOCKS5 jsou dva bajty bez znaménka v síťovém pořadí bajtů: nejvýznamnější bajt je první. V Go zakódujte již ověřený uint16 přímo:

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

Importujte encoding/binary. Pro port 1080 jsou výsledné hexadecimální bajty 04 38. Pro port 4 jsou to 00 04; úvodní nula je součástí pole s pevnou šířkou.

Pokud vstup začíná jako větší celé číslo nebo řetězec, ověřte jeho číselný rozsah před převodem na uint16. Převod může zahodit vysoké bity místo toho, aby ohlásil hodnotu mimo rozsah.

V odpovědi SOCKS5 serializujte BND.PORT, pole portu připojení serveru. Neopisujte požadovaný cílový port do tohoto pole jen proto, že oba zabírají dva bajty. Zakódované pole umístěte za adresu odpovědi, jejíž délka závisí na ATYP.

Související články