Kod SOCKS5-porte i Go som to big-endian-byte
Brug Gos binary.BigEndian-hjælpere til SOCKS5-portfelter i stedet for at skære en binær streng med variabel længde.
SOCKS5-portfelter er to usignerede byte i netværksbyteorden: den mest betydende byte kommer først. I Go koder du en allerede valideret uint16 direkte:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importer encoding/binary. For port 1080 er de resulterende hexadecimale byte 04 38. For port 4 er de 00 04; et indledende nul er en del af feltet med fast bredde.
Hvis inputtet begynder som et større heltal eller en streng, skal du validere dets numeriske interval, før du konverterer til uint16. Konvertering kan kassere høje bit i stedet for at rapportere en værdi uden for intervallet.
I et SOCKS5-svar serialiserer du BND.PORT, serverens bundne portfelt. Kopier ikke den anmodede destinationsport til det felt, blot fordi begge optager to byte. Anbring det kodede felt efter svarets adresse, hvis længde afhænger af ATYP.