SOCKS5-Ports in Go als zwei Big-Endian-Bytes kodieren
Verwenden Sie die binary.BigEndian-Hilfsfunktionen von Go für SOCKS5-Portfelder, statt einen binären String variabler Länge zu zerschneiden.
SOCKS5-Portfelder sind zwei vorzeichenlose Bytes in Netzwerk-Byte-Reihenfolge: Das höchstwertige Byte steht zuerst. In Go kodiert man ein bereits validiertes uint16 direkt:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)Importieren Sie encoding/binary. Für Port 1080 sind die resultierenden Hexadezimalbytes 04 38. Für Port 4 sind es 00 04; eine führende Null gehört zum Feld fester Breite.
Beginnt die Eingabe als größere Ganzzahl oder als String, validieren Sie ihren numerischen Bereich, bevor Sie sie in uint16 umwandeln. Die Umwandlung kann hohe Bits verwerfen, anstatt einen Wert außerhalb des Bereichs zu melden.
In einer SOCKS5-Antwort serialisieren Sie BND.PORT, das gebundene Portfeld des Servers. Kopieren Sie den angefragten Zielport nicht in dieses Feld, nur weil beide zwei Bytes belegen. Setzen Sie das kodierte Feld hinter die Adresse der Antwort, deren Länge von ATYP abhängt.