Τα πεδία θύρας SOCKS5 είναι δύο byte χωρίς πρόσημο σε σειρά byte δικτύου: το πιο σημαντικό byte έρχεται πρώτο. Στη Go, κωδικοποιήστε απευθείας ένα ήδη επικυρωμένο uint16:

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

Εισαγάγετε το encoding/binary. Για τη θύρα 1080, τα δεκαεξαδικά byte που προκύπτουν είναι 04 38. Για τη θύρα 4, είναι 00 04· το αρχικό μηδέν αποτελεί μέρος του πεδίου σταθερού πλάτους.

Αν η είσοδος ξεκινά ως μεγαλύτερος ακέραιος ή string, επικυρώστε το αριθμητικό της εύρος πριν τη μετατροπή σε uint16. Η μετατροπή μπορεί να απορρίψει τα υψηλά bit αντί να αναφέρει τιμή εκτός εύρους.

Σε μια απάντηση SOCKS5, σειριοποιήστε το BND.PORT, το πεδίο δεσμευμένης θύρας του διακομιστή. Μην αντιγράφετε τη ζητούμενη θύρα προορισμού σε αυτό το πεδίο μόνο και μόνο επειδή και τα δύο καταλαμβάνουν δύο byte. Τοποθετήστε το κωδικοποιημένο πεδίο μετά τη διεύθυνση της απάντησης, το μήκος της οποίας εξαρτάται από το ATYP.

Σχετικά άρθρα