Asio proksiga ulangandan so'ng SOCKS5 almashinuvini talab qiladi
SOCKS5 ni Asio soketi ustidagi protokol holat mashinasi deb bilang: to'liq o'qish, tekshirilgan javoblar va manzil TLS faqat CONNECT muvaffaqiyatli bo'lgandan keyin.
Asio TCP sokeтini SOCKS5 tinglovchisiga ulash faqat bir qadamni tugatadi: o'sha tinglovchiga TCP ulanishini. U proksidan yakuniy serverga ulanishni so'ramaydi. Ruxsat etilgan ommaviy maqsad sinovi uchun SOCKS5 proksi ro'yxati o'sha birinchi TCP so'nggi nuqtasi uchun nomzodlarni taklif qiladi; ulagich baribir quyidagi almashinuvni bajarishi kerak.
So'ngra SOCKS5 ulagichi protokol almashinuvini bajarishi shart:
- Mijoz qo'llab-quvvatlaydigan autentifikatsiya usullarini sanab beruvchi 5-versiyali salom yuboring.
- Tanlangan usulni o'qing va kerak bo'lganda uning autentifikatsiya almashinuvini bajaring.
- CONNECT ni manzilning manzil turi, manzili va tarmoq bayt tartibidagi porti bilan yuboring.
- Javobni o'qing, versiyasini va natija kodini tekshiring, so'ngra o'zgaruvchan uzunlikdagi bog'langan manzil va portni to'liq ishlating.
- O'rnatilgan oqimni dastur protokoliga topshiring.
socks5::async_proxy_connect nomli yordamchi o'sha yordamchini taqdim etuvchi SOCKS amalga oshirilishiga tegishli. Uni boost::asio yonida nomlash Asio TCP soket interfeysining qismiga aylantirmaydi.
TCP o'qishlari javobning faqat bir qismini qaytarishi mumkin. Kerakli bayt sonlari uchun o'qishlarni birlashtiring, so'ngra qolgan uzunlikni manzil turi maydonidan tanlang. Har bir server javobida qat'iy IPv4 tartibi bor deb o'ylamang.
HTTPS uchun SOCKS CONNECT muvaffaqiyatli bo'lgandan keyin manzilning TLS qo'l siqishini bajaring, manzilning SNI va xost nomi tekshiruvini saqlab. Faqat muvaffaqiyatli proksi javobi veb-saytni autentifikatsiya qilmaydi.
Butun sozlash ketma-ketligi davomida bekor qilish va muddatlarni saqlang. Agar TCP ulanishini o'rnatish vaqti tugasa, keyingi salom, autentifikatsiya va CONNECT almashinuvlari cheksiz qoladi.