Кодирање на 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.