Поља 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.

Повезани чланци