Палі порта 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.

Падобныя артыкулы