I campi porta SOCKS5 sono due byte senza segno nell'ordine dei byte di rete: il byte più significativo viene per primo. In Go, codificate direttamente un uint16 già validato:

var field [2]byte
binary.BigEndian.PutUint16(field[:], port)

Importate encoding/binary. Per la porta 1080, i byte esadecimali risultanti sono 04 38. Per la porta 4, sono 00 04; lo zero iniziale fa parte del campo a larghezza fissa.

Se l'input inizia come un intero più grande o una stringa, validatene l'intervallo numerico prima di convertirlo in uint16. La conversione può scartare i bit alti invece di segnalare un valore fuori intervallo.

In una risposta SOCKS5, serializzate BND.PORT, il campo porta associata del server. Non copiate la porta di destinazione richiesta in quel campo solo perché entrambe occupano due byte. Collocate il campo codificato dopo l'indirizzo della risposta, la cui lunghezza dipende da ATYP.

Articoli correlati