SOCKS5 pieprasījuma pārvēršana HTTP tunelī
Pabeidziet CONNECT apmaiņu ar vecāku, nosūtiet klientam SOCKS atbildi un tikai pēc tam pārsūtiet lietotnes baitus.
SOCKS5 priekšgals var izmantot HTTP starpniekserveri kā savu tālāko transportu. Tas darbojas kā SOCKS serveris pret klientu un kā HTTP CONNECT klients pret vecāku. Abas vadības apmaiņas beidzas pirms lietotnes plūsmas sākuma.
SOCKS CONNECT pieprasījums jau sniedz mērķa resursdatoru vai adresi un portu. Ilustratīvai HTTP/1.1 apmaiņai ar vecāku:
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
Pārtulkot rezultātu uz robežas
Adapteris veic jebkuru vecāka prasīto autentifikāciju un gaida CONNECT rezultātu. Veiksmīga 2xx atbilde izveido vecāka tuneli. Tikai pēc tam tas drīkst nosūtīt atbilstošo SOCKS veiksmes atbildi lejupējam klientam.
Ja vecāks noraida darbību, nosūtiet noteiktu SOCKS kļūmes atbildi un pēc tam nekavējoties pārtrauciet klienta savienojumu. SOCKS5 prasa šo aizvēršanu desmit sekunžu laikā pēc kļūmes konstatēšanas. Saglabājiet vecāka HTTP statusu kā diagnostikas informāciju adapterim. Šīs statusa rindas pārsūtīšana kā lietotnes dati ievietotu HTTP vadības ziņojumu plūsmā, kuras klients gaida SOCKS ietvaru.
Pirms veiksmīga CONNECT rezultāta vecāks joprojām runā HTTP, tostarp jebkuras izaicinājuma vai kļūdas atbildes ietvaru. Pēc veiksmīga rezultāta galveņu atdalītāja savienojums kļūst par tuneli; vispirms nav jāpatērē nekāds HTTP atbildes pamatteksts.
Saglabājiet baitus pēc galveņu joslas
Viena lasīšana var saturēt vecāka galveņu beigas un baitus no mērķa kopā. Saglabājiet šos papildu baitus lejupējai lietotnei. Protokoli, kuros serveris runā pirmais, var sveicināt uzreiz pēc savienojuma atvēršanas.
Pēc SOCKS veiksmes atbildes nosūtīšanas pārsūtiet lietotnes plūsmu abos virzienos. Adapterim nav jāmaina viena klienta ziņa ar vienu servera ziņu, un tam nav jāsaprot TLS ieraksti, lai tos pārsūtītu. Viņa protokola darbs bija izveidot un pārtulkot abas tuneļa sarunas.