SOCKS5-porttien koodaaminen Go:ssa kahdeksi big-endian-tavuksi
Käytä Go:n binary.BigEndian-apureita SOCKS5-porttikenttiin sen sijaan, että leikkaisit vaihtuvamittaisen binäärimerkkijonon.
SOCKS5-porttikentät ovat kaksi etumerkitöntä tavua verkon tavujärjestyksessä: merkitsevin tavu tulee ensin. Go:ssa koodaa jo validoitu uint16 suoraan:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Tuo encoding/binary. Portille 1080 tuloksena olevat heksadesimaalitavut ovat 04 38. Portille 4 ne ovat 00 04; etunolla on osa kiinteäleveyksistä kenttää.
Jos syöte alkaa suurempana kokonaislukuna tai merkkijonona, validoi sen numeerinen alue ennen uint16:ksi muuntamista. Muunnos voi hylätä ylemmät bitit sen sijaan, että ilmoittaisi alueen ulkopuolisesta arvosta.
SOCKS5-vastauksessa serialisoi BND.PORT eli palvelimen sidottu porttikenttä. Älä kopioi pyydettyä kohdeporttia tuohon kenttään vain siksi, että molemmat vievät kaksi tavua. Sijoita koodattu kenttä vastauksen osoitteen jälkeen, jonka pituus riippuu ATYP:stä.