Les champs de port SOCKS5 sont deux octets non signés dans l'ordre des octets réseau : l'octet de poids fort vient en premier. En Go, encodez directement un uint16 déjà validé :

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

Importez encoding/binary. Pour le port 1080, les octets hexadécimaux obtenus sont 04 38. Pour le port 4, ce sont 00 04 ; le zéro de tête fait partie du champ à largeur fixe.

Si l'entrée commence comme un entier plus grand ou une chaîne, validez sa plage numérique avant de la convertir en uint16. La conversion peut écarter les bits de poids fort au lieu de signaler une valeur hors plage.

Dans une réponse SOCKS5, sérialisez BND.PORT, le champ de port lié du serveur. Ne recopiez pas le port de destination demandé dans ce champ simplement parce que les deux occupent deux octets. Placez le champ encodé après l'adresse de la réponse, dont la longueur dépend de l'ATYP.

Articles similaires