Go-da SOCKS5 portlarini ikkita big-endian bayt sifatida kodlash
Oʻzgaruvchan uzunlikdagi ikkilik satrni kesish oʻrniga SOCKS5 port maydonlari uchun Goʼning binary.BigEndian yordamchilaridan foydalaning.
SOCKS5 port maydonlari tarmoq bayt tartibida ikkita ishorasiz baytdir: eng muhim bayt birinchi keladi. Go-da allaqachon tekshirilgan uint16-ni toʻgʻridan-toʻgʻri kodlang:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)encoding/binary import qiling. 1080-port uchun hosil boʻlgan oʻn oltilik baytlar 04 38. 4-port uchun ular 00 04; boshidagi nol qatʼiy kenglikdagi maydonning bir qismidir.
Agar kirish kattaroq butun son yoki satr sifatida boshlansa, uint16-ga aylantirishdan oldin uning raqamli diapazonini tekshiring. Aylantirish diapazondan tashqari qiymat haqida xabar berish oʻrniga yuqori bitlarni tashlab yuborishi mumkin.
SOCKS5 javobida BND.PORT-ni, yaʼni serverning bogʻlangan port maydonini seriyalashtiring. Ikkalasi ham ikki bayt egallagani uchungina soʻralgan manzil portini oʻsha maydonga koʻchirmang. Kodlangan maydonni javob manzilidan keyin joylashtiring; uning uzunligi ATYP-ga bogʻliq.