Go-да SOCKS5 порттарын екі big-endian байт ретінде кодтау
Айнымалы ұзындықтағы бинарлық жолды кесу орнына SOCKS5 порт өрістері үшін Go-ның binary.BigEndian көмекшілерін пайдаланыңыз.
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-қа байланысты.