فیلدهای پورت SOCKS5 دو بایت بدون علامت به ترتیب بایت شبکه هستند: بایت باارزش‌تر اول می‌آید. در Go، یک uint16 که قبلاً اعتبارسنجی شده را مستقیم کدگذاری کنید:

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

بسته encoding/binary را وارد کنید. برای پورت 1080، بایت‌های هگزادسیمال حاصل 04 38 هستند. برای پورت 4، آن‌ها 00 04 هستند؛ صفر ابتدایی بخشی از فیلد با عرض ثابت است.

اگر ورودی به‌صورت یک عدد صحیح بزرگ‌تر یا یک رشته آغاز شود، پیش از تبدیل به uint16 محدوده عددی آن را اعتبارسنجی کنید. تبدیل ممکن است بیت‌های بالا را دور بریزد به‌جای آنکه مقدار خارج از محدوده را گزارش کند.

در پاسخ SOCKS5، BND.PORT را سریال کنید، یعنی فیلد پورت متصل‌شده سرور. پورت مقصد درخواستی را فقط به این دلیل که هر دو دو بایت اشغال می‌کنند در آن فیلد کپی نکنید. فیلد کدگذاری‌شده را پس از آدرس پاسخ قرار دهید، که طول آن به ATYP بستگی دارد.

مقالات مرتبط