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 կարգավիճակը որպես ադապտորի ախտորոշիչ տեղեկություն։ Այդ կարգավիճակի տողը որպես հավելվածի տվյալ փոխանցելը HTTP կառավարման հաղորդագրություն կմտցնի հոսքի մեջ, որի հաճախորդը սպասում է SOCKS շրջանակավորման։
Մինչև հաջող CONNECT արդյունքը ծնողը դեռ խոսում է HTTP-ով, ներառյալ ցանկացած մարտահրավերի կամ սխալի պատասխանի շրջանակավորումը։ Հաջող արդյունքի վերնագրերի բաժանիչից հետո կապը դառնում է թունելը, նախ սպառելու HTTP պատասխանի մարմին չկա։
Պահպանեք վերնագրերից հետո եկող բայթերը
Մեկ ընթերցումը կարող է պարունակել ծնողի վերնագրերի վերջը և նպատակակետից եկած բայթերը միասին։ Պահեք այդ լրացուցիչ բայթերը ներքևի հավելվածի համար։ Սպասարկիչն առաջինը խոսող արձանագրությունները կարող են ողջունել իրենց կապի բացվելուց անմիջապես հետո։
SOCKS հաջողության պատասխանն ուղարկելուց հետո փոխանցեք հավելվածի հոսքը երկու ուղղություններով։ Ադապտորը պետք չէ մեկ հաճախորդի հաղորդագրությունը հերթով փոխարինել մեկ սպասարկիչի հաղորդագրությամբ, և պետք չէ հասկանալ TLS գրառումները՝ դրանք փոխանցելու համար։ Նրա արձանագրային աշխատանքը երկու թունելային բանակցությունների հաստատումն ու թարգմանությունն էր։