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ä.

Aiheeseen liittyvät artikkelit