.NET socket-ке SOCKS қол алысу қажет
Қолданба байттары SOCKS проксиі арқылы өтпес бұрын шикі .NET TCP socket не істеуі керектігін түсіндіріңіз.
Socket.Connect()-ті SOCKS серверіне бағыттау сол серверге TCP қосылымын ашады. Келесі байттар әлі де SOCKS тілінде сөйлеуі керек. Қолданба протоколын бірден жіберу серверді басқа әңгімені күтіп қалдырады.
SOCKS5 кезінде қосылым орнату әдісті келісу, таңдалған аутентификация алмасуы және мақсатты атайтын сұранысты қамтиды. Тек сәтті жауап қана қолданба байттарына жол ашады. Бұл кезеңдер RFC 1928 құжатында анықталған.
Келіссөзді қосылым қабатында ұстаңыз
Өз TCP протоколы бар қолданба орнатылған ағынды қайтаратын проксиді танитын коннекторды пайдалана алады. Содан кейін қолданбаның қалғаны сол ағын арқылы оқып, жазады. Коннектор ішінара оқуларды, айнымалы ұзындықтағы мекенжайларды, аутентификация сәтсіздіктерін және келіссөзге арналған мерзімді ескеруі керек.
Бір белгіленген өлшемді буферді оқып, сәттілікті болжайтын қолмен жазылған іске асыру нәзік. TCP SOCKS хабарламаларының шекараларын сақтамайды. Қолданба протоколын бастамас бұрын оның мекенжай түрімен сипатталған толық жауапты оқыңыз. .NET 7+ үшін CONNECT жауабын оқу құралы осы қадамды көрсетеді.
Егер қолдау көрсетілетін кітапхана бұл қосылым қабатын әлдеқашан ұсынса, оның қолдайтын SOCKS нұсқаларын, аутентификация әдістерін және мақсатты framework-ін тексеріңіз. Он жылдық форум сілтемесі — зерттеудің бастапқы нүктесі, қазіргі үйлесімділіктің дәлелі емес.
HTTP клиентінің конфигурациясының бөлек ауқымы бар
HTTP клиентінің прокси параметрі сол HTTP клиентін конфигурациялайды. Ол процестегі әрбір шикі socket-ті өзгертпейді. Socket API желілік соңғы нүктені қабылдап, жоғары деңгейлі келіссөзді шақырушыға қалдырады.
Шифрланған қолданба протоколы үшін прокси туннелі орнатылғаннан кейін оның TLS қол алысуын орындаңыз. Сол кезеңде көзделген мақсаттың сәйкестігін тексеріңіз. Прокси аутентификациясы мен мақсат аутентификациясы бір негізгі ағынды пайдаланса да бөлек қалады.