SOCKS5-poorten in Go coderen als twee big-endian bytes
Gebruik Go's binary.BigEndian-helpers voor SOCKS5-poortvelden in plaats van een binaire tekenreeks van variabele lengte te snijden.
SOCKS5-poortvelden zijn twee niet-ondertekende bytes in netwerkbytevolgorde: de meest significante byte komt eerst. Codeer in Go een al gevalideerde uint16 rechtstreeks:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importeer encoding/binary. Voor poort 1080 zijn de resulterende hexadecimale bytes 04 38. Voor poort 4 zijn ze 00 04; een voorloopnul hoort bij het veld met vaste breedte.
Als de invoer begint als een groter geheel getal of een tekenreeks, valideer dan het numerieke bereik voordat u naar uint16 converteert. Conversie kan hoge bits weggooien in plaats van een waarde buiten bereik te melden.
In een SOCKS5-antwoord serialiseert u BND.PORT, het gebonden poortveld van de server. Kopieer de gevraagde bestemmingspoort niet naar dat veld alleen omdat beide twee bytes innemen. Plaats het gecodeerde veld na het adres van het antwoord, waarvan de lengte afhangt van ATYP.