Codificarea porturilor SOCKS5 în Go ca doi octeți big-endian
Folosiți ajutoarele binary.BigEndian din Go pentru câmpurile de port SOCKS5 în loc să tăiați un șir binar de lungime variabilă.
Câmpurile de port SOCKS5 sunt doi octeți fără semn în ordinea octeților de rețea: octetul cel mai semnificativ vine primul. În Go, codificați direct un uint16 deja validat:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importați encoding/binary. Pentru portul 1080, octeții hexazecimali rezultați sunt 04 38. Pentru portul 4, aceștia sunt 00 04; zeroul inițial face parte din câmpul de lățime fixă.
Dacă intrarea începe ca un întreg mai mare sau ca un șir, validați intervalul său numeric înainte de a-l converti în uint16. Conversia poate elimina biții înalți în loc să raporteze o valoare în afara intervalului.
Într-un răspuns SOCKS5, serializați BND.PORT, câmpul de port legat al serverului. Nu copiați portul de destinație solicitat în acel câmp doar pentru că ambele ocupă doi octeți. Plasați câmpul codificat după adresa răspunsului, a cărei lungime depinde de ATYP.