SOCKS5-portfält är två teckenlösa byte i nätverksbyteordning: den mest signifikanta byten kommer först. I Go kodar du en redan validerad uint16 direkt:

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

Importera encoding/binary. För port 1080 är de resulterande hexadecimala byten 04 38. För port 4 är de 00 04; en inledande nolla är en del av fältet med fast bredd.

Om indata börjar som ett större heltal eller en sträng, validera dess numeriska intervall innan du konverterar till uint16. Konverteringen kan kasta bort höga bitar i stället för att rapportera ett värde utanför intervallet.

I ett SOCKS5-svar serialiserar du BND.PORT, serverns bundna portfält. Kopiera inte den begärda målporten till det fältet bara för att båda upptar två byte. Placera det kodade fältet efter svarets adress, vars längd beror på ATYP.

Relaterade artiklar