یک پیشانی 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 نیازی به فهم آن‌ها ندارد. کار پروتکلی‌اش برپا کردن و ترجمهٔ دو مذاکرهٔ تونل بود.

مقالات مرتبط