geely-kaipiao/proxy/PROTOCOL.md
2026-05-25 11:13:40 +08:00

3.3 KiB
Raw Blame History

代理通信协议设计文档

1. 架构概述

1.1 设备角色

设备 角色 能力 限制
电脑A 代理客户端 可访问内网网站 无法监听端口
电脑B 代理服务器 可监听端口 无法直接访问内网

1.2 网络拓扑

浏览器 <--(端口8081)--> 电脑B <--(端口8080)--> 电脑A <--(内网)--> 目标网站

2. 端口分配

端口号 用途 连接方向
8080 设备A连接端口 电脑A → 电脑B
8081 浏览器访问端口 浏览器 → 电脑B

3. 通信协议

3.1 协议类型

采用 HTTP CONNECT 代理协议这是标准的HTTP隧道协议。

3.2 协议流程

阶段1设备A连接到设备B

电脑A → 电脑B: TCP连接建立
电脑B → 电脑A: 连接接受无额外协议仅TCP握手

阶段2浏览器发起请求

浏览器 → 电脑B: HTTP CONNECT请求
CONNECT zentao.sunyard.com.cn:9788 HTTP/1.1
Host: zentao.sunyard.com.cn:9788
[其他请求头...]

阶段3电脑B转发请求

电脑B → 电脑A: 透传完整HTTP CONNECT请求

阶段4电脑A建立隧道

电脑A → 内网目标: TCP连接建立
内网目标 → 电脑A: 连接接受
电脑A → 电脑B: HTTP 200响应
HTTP/1.1 200 Connection Established

阶段5数据隧道

浏览器 ↔ 电脑B ↔ 电脑A ↔ 内网目标: 双向数据流透传

阶段6连接关闭

任意一端断开连接,整条链路关闭。


4. 数据格式

4.1 HTTP CONNECT 请求格式

CONNECT {目标地址}:{目标端口} HTTP/1.1\r\n
Host: {目标地址}:{目标端口}\r\n
[可选请求头]\r\n
\r\n

4.2 HTTP 200 响应格式

HTTP/1.1 200 Connection Established\r\n
\r\n

5. 日志规范

5.1 日志格式

字段 格式 示例
时间戳 YYYY-MM-DD HH:MM:SS 2024-01-15 10:30:45
级别 [INFO] / [ERROR] / [DEBUG] [INFO]
来源 [Browser] / [DeviceA] / [System] [Browser]
内容 描述信息 请求详情

5.2 HTTP请求日志电脑B

[时间戳] [INFO] [Browser] {客户端IP}:{端口} - {方法} {URL} - Body: {字节数} bytes

5.3 HTTP响应日志电脑B

[时间戳] [INFO] [Browser] {客户端IP}:{端口} - {方法} {URL} - Status: {状态码} - Time: {耗时}ms

5.4 连接状态日志

[时间戳] [INFO] [DeviceA] Connected: {IP}:{端口}
[时间戳] [INFO] [DeviceA] Disconnected
[时间戳] [INFO] [Browser] Connected from: {IP}:{端口}
[时间戳] [INFO] [Browser] Disconnected: {IP}:{端口}

6. 错误处理

6.1 设备A未连接

当浏览器请求时设备A未连接

HTTP/1.1 503 Service Unavailable
Content-Type: text/plain

Device A not connected

6.2 目标不可达

当电脑A无法连接目标网站

HTTP/1.1 502 Bad Gateway
Content-Type: text/plain

Cannot connect to target

6.3 重复连接

当已有设备A连接时拒绝新连接

ERROR: Another A device is already connected

7. 超时设置

操作 超时时间
设备A连接超时 10秒
目标网站连接超时 30秒
连接空闲超时 120秒