Ang mga field ng port ng SOCKS5 ay dalawang unsigned byte sa network byte order: ang pinaka-mahalagang byte ang nauuna. Sa Go, i-encode nang direkta ang isang uint16 na na-validate na:

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

I-import ang encoding/binary. Para sa port 1080, ang mga resultang hexadecimal na byte ay 04 38. Para sa port 4, ang mga ito ay 00 04; ang nangungunang zero ay bahagi ng fixed-width na field.

Kung ang input ay nagsisimula bilang isang mas malaking integer o string, i-validate ang numeric range nito bago i-convert sa uint16. Maaaring itapon ng conversion ang matataas na bit sa halip na i-report ang isang value na wala sa range.

Sa isang tugon ng SOCKS5, i-serialize ang BND.PORT, ang bound port field ng server. Huwag kopyahin ang hiniling na destination port sa field na iyon dahil lang sa parehong sumasakop ng dalawang byte. Ilagay ang naka-encode na field pagkatapos ng address ng tugon, na ang haba ay depende sa ATYP.

Kaugnay na mga artikulo