Кадаванне партоў SOCKS5 у Go двума байтамі ў парадку big-endian
Выкарыстоўвайце дапаможнікі binary.BigEndian у Go для палёў порта SOCKS5 замест разрэзвання бінарнага радка зменнай даўжыні.
Палі порта SOCKS5 — гэта два беззнакавыя байты ў сеткавым парадку байтаў: старэйшы байт ідзе першым. У Go кадуйце ўжо правераны uint16 напрамкі:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Імпартуйце encoding/binary. Для порта 1080 атрыманыя шаснаццатковыя байты — 04 38. Для порта 4 яны — 00 04; вядучы нуль з'яўляецца часткай поля фіксаванай шырыні.
Калі ўваход пачынаецца як большае цэлае або радок, праверце яго лікавы дыяпазон перад пераўтварэннем у uint16. Пераўтварэнне можа адкінуць старэйшыя біты, а не паведаміць пра значэнне па-за дыяпазонам.
У адказе SOCKS5 серыялізуйце BND.PORT — поле звязанага порта сервера. Не капіруйце запытаны порт прызначэння ў гэта поле толькі таму, што абодва займаюць два байты. Змяшчайце закадаванае поле пасля адраса адказу, даўжыня якога залежыць ад ATYP.