Một giao diện SOCKS5 có thể dùng proxy HTTP làm phương tiện truyền tiếp của mình. Nó đóng vai trò máy chủ SOCKS với máy khách và vai trò máy khách HTTP CONNECT với máy chủ cha. Hai trao đổi điều khiển kết thúc trước khi luồng ứng dụng bắt đầu.

Yêu cầu SOCKS CONNECT đã cung cấp máy chủ hoặc địa chỉ đích cùng cổng. Với một trao đổi HTTP/1.1 minh họa cùng máy chủ cha:

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

Dịch kết quả tại ranh giới

Bộ chuyển đổi hoàn tất mọi xác thực mà máy chủ cha yêu cầu và chờ kết quả CONNECT. Một phản hồi 2xx thành công thiết lập đường hầm tới máy chủ cha. Chỉ sau đó nó mới nên trả phản hồi thành công SOCKS tương ứng về cho máy khách phía dưới.

Nếu máy chủ cha từ chối thao tác, hãy gửi một phản hồi thất bại SOCKS đã định nghĩa, rồi kết thúc kết nối của máy khách ngay lập tức. SOCKS5 yêu cầu việc đóng đó trong vòng mười giây kể từ khi phát hiện thất bại. Hãy giữ trạng thái HTTP của máy chủ cha làm thông tin chẩn đoán cho bộ chuyển đổi. Việc chuyển dòng trạng thái đó như dữ liệu ứng dụng sẽ đưa một thông điệp điều khiển HTTP vào luồng mà máy khách của nó mong đợi khung SOCKS.

Trước một kết quả CONNECT thành công, máy chủ cha vẫn nói HTTP, kể cả việc đóng khung của bất kỳ phản hồi thách thức hay lỗi nào. Sau dấu phân cách tiêu đề của một kết quả thành công, kết nối trở thành đường hầm; không có phần thân phản hồi HTTP nào phải tiêu thụ trước.

Giữ lại các byte sau tiêu đề

Một lần đọc có thể chứa phần cuối tiêu đề của máy chủ cha và các byte từ đích cùng lúc. Giữ lại các byte thừa đó cho ứng dụng phía dưới. Các giao thức mà máy chủ nói trước có thể chào ngay sau khi kết nối của chúng mở ra.

Sau khi phản hồi thành công SOCKS được gửi, chuyển tiếp luồng ứng dụng theo cả hai hướng. Bộ chuyển đổi không cần luân phiên một thông điệp máy khách với một thông điệp máy chủ, và cũng không cần hiểu các bản ghi TLS để chuyển tiếp chúng. Công việc giao thức của nó là thiết lập và dịch hai cuộc thương lượng đường hầm.

Bài viết liên quan