.NET lizdui reikia SOCKS rankos paspaudimo
Paaiškina, ką neapdorotas .NET TCP lizdas turi atlikti, kol programos baitai gali keliauti per SOCKS tarpinį serverį.
Nukreipus Socket.Connect() į SOCKS serverį, atidaroma TCP jungtis su tuo serveriu. Kiti baitai vis tiek turi kalbėti SOCKS. Iš karto siunčiant programos protokolą, serveris lieka laukti kito pokalbio.
Naudojant SOCKS5, jungties užmezgimas apima metodo derinimą, pasirinktą autentifikavimo mainus ir užklausą, nurodančią paskirties vietą. Tik sėkmingas atsakymas atveria kelią programos baitams. Šie etapai apibrėžti RFC 1928.
Laikykite derinimą jungties sluoksnyje
Programa, turinti savo TCP protokolą, gali naudoti tarpinį serverį suprantantį jungiklį, kuris grąžina užmegztą srautą. Likusi programos dalis tada skaito ir rašo per tą srautą. Jungiklis turi atsižvelgti į dalinius skaitymus, kintamo ilgio adresus, autentifikavimo klaidas ir derinimo terminą.
Rankiniu būdu parašyta realizacija, kuri nuskaito vieną fiksuoto dydžio buferį ir daro prielaidą apie sėkmę, yra trapi. TCP neišsaugo SOCKS pranešimų ribų. Perskaitykite visą atsakymą, aprašytą jo adreso tipo, prieš pradėdami programos protokolą. .NET 7+ CONNECT atsakymo skaitytuvas iliustruoja tą žingsnį.
Jei prižiūrima biblioteka jau teikia šį jungties sluoksnį, patikrinkite jos palaikomas SOCKS versijas, autentifikavimo metodus ir tikslinę platformą. Dešimtmetį senas forumo ryšys yra tyrimo atspirties taškas, o ne dabartinio suderinamumo įrodymas.
HTTP kliento konfigūracija turi atskirą sritį
HTTP kliento tarpinio serverio nustatymas konfigūruoja tą HTTP klientą. Jis nekeičia kiekvieno neapdoroto lizdo procese. Socket API priima tinklo galinį tašką ir palieka aukštesnio lygio derinimą kviečiančiajam.
Užšifruotam programos protokolui atlikite jo TLS rankos paspaudimą po to, kai tarpinio serverio tunelis užmegztas. Tame etape patikrinkite numatytą paskirties tapatybę. Tarpinio serverio autentifikavimas ir paskirties autentifikavimas išlieka atskiri, nors jie naudoja tą patį pagrindinį srautą.