Kode SOCKS5-porter i Go som to big-endian-byte
Bruk Gos binary.BigEndian-hjelpere for SOCKS5-portfelt i stedet for å kutte en binær streng med variabel lengde.
SOCKS5-portfelt er to usignerte byte i nettverksbyteorden: den mest betydningsfulle byten kommer først. I Go koder du en allerede validert uint16 direkte:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importer encoding/binary. For port 1080 er de resulterende heksadesimale bytene 04 38. For port 4 er de 00 04; en innledende null er en del av feltet med fast bredde.
Hvis inndata starter som et større heltall eller en streng, valider det numeriske området før du konverterer til uint16. Konvertering kan forkaste høye biter i stedet for å rapportere en verdi utenfor området.
I et SOCKS5-svar serialiserer du BND.PORT, serverens bundne portfelt. Ikke kopier den forespurte målporten inn i det feltet bare fordi begge opptar to byte. Plasser det kodede feltet etter svarets adresse, hvis lengde avhenger av ATYP.