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

175 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 代理通信协议设计文档
## 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秒 |