Polja vrat SOCKS5 sta dva nepredznačena bajta v omrežnem vrstnem redu bajtov: najpomembnejši bajt je prvi. V Go kodirajte že preverjeni uint16 neposredno:

var field [2]byte
binary.BigEndian.PutUint16(field[:], port)

Uvozite encoding/binary. Za vrata 1080 so dobljeni šestnajstiški bajti 04 38. Za vrata 4 so 00 04; vodilna ničla je del polja s fiksno širino.

Če se vnos začne kot večje celo število ali niz, preden ga pretvorite v uint16, preverite njegov številčni razpon. Pretvorba lahko zavrže visoke bite, namesto da bi sporočila vrednost zunaj razpona.

V odgovoru SOCKS5 serializirajte BND.PORT, polje vezanih vrat strežnika. Zahtevanih ciljnih vrat ne kopirajte v to polje samo zato, ker oba zasedata dva bajta. Kodirano polje postavite za naslovom odgovora, katerega dolžina je odvisna od ATYP.

Sorodni članki