SOCKS5 prievado laukai yra du beženkliai baitai tinklo baitų tvarka: reikšmingiausias baitas eina pirmas. Go kalboje koduokite jau patvirtintą uint16 tiesiogiai:

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

Importuokite encoding/binary. Prievadui 1080 gauti šešioliktainiai baitai yra 04 38. Prievadui 4 jie yra 00 04; pirmaujantis nulis yra fiksuoto pločio lauko dalis.

Jei įvestis prasideda kaip didesnis sveikasis skaičius arba eilutė, prieš konvertuodami į uint16 patikrinkite jos skaitinį diapazoną. Konvertavimas gali atmesti aukštuosius bitus, o ne pranešti apie reikšmę už diapazono ribų.

SOCKS5 atsakyme serializuokite BND.PORT, serverio susieto prievado lauką. Nekopijuokite prašomo paskirties prievado į tą lauką vien todėl, kad abu užima du baitus. Įdėkite užkoduotą lauką po atsakymo adreso, kurio ilgis priklauso nuo ATYP.

Susiję straipsniai