Go میں SOCKS5 پورٹس کو دو بگ اینڈین بائٹس کے طور پر انکوڈ کریں
متغیر لمبائی کی بائنری سٹرنگ کاٹنے کے بجائے SOCKS5 پورٹ فیلڈز کے لیے Go کے binary.BigEndian مددگار استعمال کریں۔
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 پر منحصر ہے۔