SOCKS5 сұрауын HTTP туннеліне айналдыру
Аталық сервермен CONNECT алмасуын аяқтаңыз, клиентке SOCKS жауабын қайтарыңыз, содан кейін ғана қолданба байттарын жіберіңіз.
SOCKS5 алдыңғы бөлігі HTTP проксиін өзінің одан әрі тасымалы ретінде пайдалана алады. Ол клиентке қатысты SOCKS сервері, ал аталыққа қатысты HTTP CONNECT клиенті ретінде әрекет етеді. Екі басқару алмасуы қолданба ағыны басталмай тұрып аяқталады.
SOCKS CONNECT сұрауы мақсатты хостты немесе мекенжайды және портты әлдеқашан береді. Аталықпен үлгілі HTTP/1.1 алмасуы үшін:
client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
CONNECT service.example.net:443 HTTP/1.1
Host: service.example.net:443
parent → adapter: HTTP/1.1 200 Connection Established
[end of headers]
adapter → client: SOCKS5 success reply
client ↔ adapter ↔ parent ↔ service: application bytes
Нәтижені шекарада аударыңыз
Адаптер аталық талап ететін кез келген аутентификацияны орындап, CONNECT нәтижесін күтеді. Сәтті 2xx жауабы аталық туннелін орнатады. Содан кейін ғана ол төменгі клиентке сәйкес SOCKS сәттілік жауабын қайтаруы керек.
Егер аталық операцияны қабылдамаса, анықталған SOCKS сәтсіздік жауабын жіберіңіз, содан кейін клиент қосылымын дереу тоқтатыңыз. SOCKS5 ақаулық анықталғаннан кейін он секунд ішінде осы жабылуды талап етеді. Аталықтың HTTP мәртебесін адаптер үшін диагностикалық ақпарат ретінде сақтаңыз. Сол мәртебе жолын қолданба деректері ретінде жіберу клиенті SOCKS қаңқасын күтетін ағынға HTTP басқару хабарын кіргізер еді.
Сәтті CONNECT нәтижесіне дейін аталық әлі HTTP тілінде сөйлейді, оның ішінде кез келген шақыру немесе қате жауабының қаңқасы. Сәтті нәтиженің тақырып бөлгішінен кейін қосылым туннельге айналады; алдымен тұтынылатын HTTP жауап денесі жоқ.
Тақырыптардан кейінгі байттарды сақтаңыз
Бір оқу аталық тақырыптарының соңын және мақсаттан келген байттарды бірге қамтуы мүмкін. Осы қосымша байттарды төменгі қолданба үшін сақтаңыз. Сервер бірінші сөйлейтін хаттамалар қосылымы ашылғаннан кейін бірден сәлемдесе алады.
SOCKS сәттілік жауабы жіберілгеннен кейін қолданба ағынын екі бағытта да жіберіңіз. Адаптерге бір клиент хабарын бір сервер хабарымен алмастыру қажет емес, әрі TLS жазбаларын жіберу үшін оларды түсіну де қажет емес. Оның хаттамалық жұмысы екі туннель келіссөзін орнату және аудару болды.