Asio يحتاج إلى تبادل SOCKS5 بعد الاتصال بالوكيل
تعامل مع SOCKS5 كآلة حالة بروتوكول فوق مقبس Asio، مع قراءات كاملة وردود متحقق منها وTLS للوجهة فقط بعد نجاح CONNECT.
إن توصيل مقبس TCP في Asio بمستمع SOCKS5 يكمل خطوة واحدة: اتصال TCP بذلك المستمع. وهو لا يطلب من الوكيل الاتصال بالخادم النهائي. ولاختبار مسموح به على هدف عام، تقدم قائمة وكلاء SOCKS5 مرشحين لنقطة TCP الأولى تلك؛ ولا يزال الموصل مطالبًا بإتمام التبادل أدناه.
يجب على موصل SOCKS5 بعد ذلك تنفيذ تبادل البروتوكول:
- أرسل تحية بالإصدار 5 تسرد طرق المصادقة التي يدعمها العميل.
- اقرأ الطريقة المختارة ونفّذ تبادل المصادقة الخاص بها عند الحاجة.
- أرسل CONNECT بنوع عنوان الوجهة والعنوان والمنفذ بترتيب بايتات الشبكة.
- اقرأ الرد، وتحقق من إصداره ورمز النتيجة، واستهلك العنوان والمنفذ المرتبطين كاملين ومتغيري الطول.
- سلّم التدفق المنشأ إلى بروتوكول التطبيق.
المساعد المسمى socks5::async_proxy_connect ينتمي إلى تنفيذ SOCKS الذي يوفّر ذلك المساعد. وتسميته إلى جانب boost::asio لا تجعله جزءًا من واجهة مقبس TCP في Asio.
قد ترجع قراءات TCP جزءًا من الرد فقط. اجمع القراءات للأعداد المطلوبة من البايتات، ثم اختر الطول المتبقي من حقل نوع العنوان. لا تفترض أن كل رد من الخادم يتبع تخطيط IPv4 الثابت.
بالنسبة إلى HTTPS، نفّذ مصافحة TLS للوجهة بعد نجاح SOCKS CONNECT، مع الحفاظ على SNI للوجهة والتحقق من اسم المضيف. ولا يوثّق رد الوكيل الناجح وحده الموقع.
احتفظ بالإلغاء والمهل عبر تسلسل الإعداد كله. فانتهاء مهلة إنشاء اتصال TCP يترك تبادلات التحية والمصادقة وCONNECT اللاحقة بلا حد.