ترميز منافذ SOCKS5 في Go كبايتين كبيري النهاية
استخدم أدوات binary.BigEndian في Go لحقول منفذ SOCKS5 بدلًا من تقطيع سلسلة ثنائية متغيرة الطول.
حقول منفذ 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.