Кодирање SOCKS5 портова у Go-у као два big-endian бајта
Користите Go-ове помоћнике binary.BigEndian за поља 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.