Bidang port SOCKS5 adalah dua byte tanpa tanda dalam urutan byte jaringan: byte paling berarti muncul lebih dulu. Di Go, enkodekan uint16 yang sudah divalidasi secara langsung:

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

Impor encoding/binary. Untuk port 1080, byte heksadesimal yang dihasilkan adalah 04 38. Untuk port 4, hasilnya 00 04; nol di depan adalah bagian dari bidang berlebar tetap.

Jika masukan dimulai sebagai bilangan bulat yang lebih besar atau string, validasi rentang numeriknya sebelum mengonversi ke uint16. Konversi dapat membuang bit tinggi alih-alih melaporkan nilai di luar rentang.

Dalam balasan SOCKS5, serialkan BND.PORT, bidang port terikat server. Jangan menyalin port tujuan yang diminta ke bidang itu hanya karena keduanya menempati dua byte. Tempatkan bidang yang telah dikodekan setelah alamat balasan, yang panjangnya bergantung pada ATYP.

Artikel terkait