Кодиране на SOCKS5 портове в Go като два байта с голям ред
Използвайте помощните функции binary.BigEndian на Go за полетата на SOCKS5 порт, вместо да режете двоичен низ с променлива дължина.
Полетата на 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.