Medan port SOCKS5 ialah dua bait tanpa tanda dalam susunan bait rangkaian: bait paling bererti datang dahulu. Dalam Go, kodkan uint16 yang telah disahkan secara terus:

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

Import encoding/binary. Untuk port 1080, bait perenambelasan yang terhasil ialah 04 38. Untuk port 4, ia ialah 00 04; sifar pendahulu ialah sebahagian daripada medan lebar tetap.

Jika input bermula sebagai integer yang lebih besar atau rentetan, sahkan julat berangkanya sebelum menukar kepada uint16. Penukaran boleh membuang bit tinggi dan bukannya melaporkan nilai di luar julat.

Dalam balasan SOCKS5, siri-sirikan BND.PORT, medan port terikat pelayan. Jangan salin port destinasi yang diminta ke dalam medan itu semata-mata kerana kedua-duanya mengambil dua bait. Letakkan medan yang dikodkan selepas alamat balasan, yang panjangnya bergantung pada ATYP.

Artikel berkaitan