Pola portu SOCKS5 to dwa bajty bez znaku w sieciowej kolejności bajtów: najbardziej znaczący bajt jest pierwszy. W Go koduj już zweryfikowany uint16 bezpośrednio:

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

Zaimportuj encoding/binary. Dla portu 1080 wynikowe bajty szesnastkowe to 04 38. Dla portu 4 to 00 04; wiodące zero jest częścią pola o stałej szerokości.

Jeśli dane wejściowe zaczynają się jako większa liczba całkowita lub łańcuch, zweryfikuj ich zakres liczbowy przed konwersją na uint16. Konwersja może odrzucić wysokie bity zamiast zgłosić wartość spoza zakresu.

W odpowiedzi SOCKS5 serializuj BND.PORT, pole związanego portu serwera. Nie kopiuj żądanego portu docelowego do tego pola tylko dlatego, że oba zajmują dwa bajty. Umieść zakodowane pole po adresie odpowiedzi, którego długość zależy od ATYP.

Powiązane artykuły