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-യെ ആശ്രയിച്ചിരിക്കുന്നു.

അനുബന്ധ ലേഖനങ്ങൾ