Полињата на 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.

Поврзани статии