Kodeer SOCKS5-poorpoorte in Go as twee groot-endiese grepe
Gebruik Go se binary.BigEndian-hulpmiddels vir SOCKS5-poorpoortvelde eerder as om 'n binêre string van veranderlike lengte te sny.
SOCKS5-poorpoortvelde is twee ongetekende grepe in netwerkbyteorde: die mees beduidende greep kom eerste. In Go kodeer jy 'n reeds gevalideerde uint16 direk:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Voer encoding/binary in. Vir poort 1080 is die resulterende heksadesimale grepe 04 38. Vir poort 4 is dit 00 04; 'n voorste nul is deel van die vaste-wydte veld.
As die invoer as 'n groter heelgetal of 'n string begin, valideer sy numeriese bereik voordat jy na uint16 omskakel. Omskakeling kan hoë bisse weggooi eerder as om 'n waarde buite bereik te rapporteer.
In 'n SOCKS5-antwoord, serialiseer BND.PORT, die bediener se vasgemaakte poortveld. Moenie die versoekte bestemmingspoort in daardie veld kopieer net omdat albei twee grepe beslaan nie. Plaas die gekodeerde veld ná die antwoord se adres, waarvan die lengte van ATYP afhang.