SOCKS5 prievadų kodavimas Go kalba dviem big-endian baitais
Naudokite Go binary.BigEndian pagalbininkus SOCKS5 prievado laukams, o ne kirpkite kintamo ilgio dvejetainę eilutę.
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.