You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
4.9 KiB
231 lines
4.9 KiB
2 weeks ago
|
# Wormhole SOCKS5 Client API
|
||
|
|
||
|
## 概述
|
||
|
|
||
|
Wormhole SOCKS5 Client 在HTTP代理模式下提供了内置的API端点,用于监控和管理代理服务。
|
||
|
|
||
|
## 端点
|
||
|
|
||
|
### 代理功能
|
||
|
|
||
|
所有非API请求都会通过SOCKS5代理转发:
|
||
|
|
||
|
- **HTTP 代理**: 处理普通HTTP请求
|
||
|
- **HTTPS 代理**: 处理CONNECT方法的HTTPS隧道
|
||
|
|
||
|
### 监控API
|
||
|
|
||
|
#### GET /stats
|
||
|
|
||
|
获取详细的代理统计信息。
|
||
|
|
||
|
**响应示例:**
|
||
|
```json
|
||
|
{
|
||
|
"start_time": "2024-01-01T12:00:00Z",
|
||
|
"uptime": "2h30m15s",
|
||
|
"total_connections": 150,
|
||
|
"active_connections": 5,
|
||
|
"successful_requests": 145,
|
||
|
"failed_requests": 5,
|
||
|
"bytes_sent": 1024000,
|
||
|
"bytes_received": 2048000,
|
||
|
"socks5_errors": {
|
||
|
"connection_failed": 3,
|
||
|
"auth_failed": 1,
|
||
|
"timeout": 1
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
**字段说明:**
|
||
|
- `start_time`: 代理启动时间
|
||
|
- `uptime`: 运行时间
|
||
|
- `total_connections`: 总连接数
|
||
|
- `active_connections`: 当前活跃连接数
|
||
|
- `successful_requests`: 成功请求数
|
||
|
- `failed_requests`: 失败请求数
|
||
|
- `bytes_sent`: 发送字节数
|
||
|
- `bytes_received`: 接收字节数
|
||
|
- `socks5_errors`: SOCKS5错误分类统计
|
||
|
|
||
|
#### GET /health
|
||
|
|
||
|
获取代理健康状态信息。
|
||
|
|
||
|
**响应示例:**
|
||
|
```json
|
||
|
{
|
||
|
"status": "healthy",
|
||
|
"uptime": "2h30m15s",
|
||
|
"active_connections": 5,
|
||
|
"success_rate": 96.67
|
||
|
}
|
||
|
```
|
||
|
|
||
|
**字段说明:**
|
||
|
- `status`: 健康状态 ("healthy")
|
||
|
- `uptime`: 运行时间
|
||
|
- `active_connections`: 当前活跃连接数
|
||
|
- `success_rate`: 成功率百分比
|
||
|
|
||
|
## 使用示例
|
||
|
|
||
|
### 基本用法
|
||
|
|
||
|
1. **启动HTTP代理模式:**
|
||
|
```bash
|
||
|
./bin/wormhole-client -mode http -config configs/client.yaml
|
||
|
```
|
||
|
|
||
|
2. **配置浏览器代理:**
|
||
|
- HTTP代理: `127.0.0.1:8080`
|
||
|
- HTTPS代理: `127.0.0.1:8080`
|
||
|
|
||
|
3. **访问统计信息:**
|
||
|
```bash
|
||
|
curl http://127.0.0.1:8080/stats
|
||
|
```
|
||
|
|
||
|
4. **检查健康状态:**
|
||
|
```bash
|
||
|
curl http://127.0.0.1:8080/health
|
||
|
```
|
||
|
|
||
|
### 监控脚本示例
|
||
|
|
||
|
#### Bash监控脚本
|
||
|
|
||
|
```bash
|
||
|
#!/bin/bash
|
||
|
|
||
|
PROXY_URL="http://127.0.0.1:8080"
|
||
|
|
||
|
echo "=== Wormhole SOCKS5 Client Status ==="
|
||
|
|
||
|
# 健康检查
|
||
|
health=$(curl -s "$PROXY_URL/health")
|
||
|
echo "Health: $health"
|
||
|
|
||
|
# 统计信息
|
||
|
stats=$(curl -s "$PROXY_URL/stats")
|
||
|
echo "Stats: $stats"
|
||
|
|
||
|
# 提取关键指标
|
||
|
success_rate=$(echo "$health" | jq -r '.success_rate')
|
||
|
active_conn=$(echo "$health" | jq -r '.active_connections')
|
||
|
|
||
|
echo "Success Rate: ${success_rate}%"
|
||
|
echo "Active Connections: $active_conn"
|
||
|
```
|
||
|
|
||
|
#### Python监控脚本
|
||
|
|
||
|
```python
|
||
|
import requests
|
||
|
import json
|
||
|
import time
|
||
|
|
||
|
def get_proxy_stats():
|
||
|
try:
|
||
|
response = requests.get('http://127.0.0.1:8080/stats')
|
||
|
return response.json()
|
||
|
except Exception as e:
|
||
|
print(f"Error getting stats: {e}")
|
||
|
return None
|
||
|
|
||
|
def get_proxy_health():
|
||
|
try:
|
||
|
response = requests.get('http://127.0.0.1:8080/health')
|
||
|
return response.json()
|
||
|
except Exception as e:
|
||
|
print(f"Error getting health: {e}")
|
||
|
return None
|
||
|
|
||
|
def monitor_proxy():
|
||
|
while True:
|
||
|
health = get_proxy_health()
|
||
|
if health:
|
||
|
print(f"Status: {health['status']}")
|
||
|
print(f"Success Rate: {health['success_rate']:.2f}%")
|
||
|
print(f"Active Connections: {health['active_connections']}")
|
||
|
print(f"Uptime: {health['uptime']}")
|
||
|
|
||
|
print("-" * 40)
|
||
|
time.sleep(30) # 每30秒检查一次
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
monitor_proxy()
|
||
|
```
|
||
|
|
||
|
## SOCKS5协议支持
|
||
|
|
||
|
### 地址类型支持
|
||
|
|
||
|
- ✅ **IPv4地址** (0x01): `192.168.1.1:80`
|
||
|
- ✅ **域名** (0x03): `example.com:80`
|
||
|
- ✅ **IPv6地址** (0x04): `[2001:db8::1]:80`
|
||
|
|
||
|
### 认证方法支持
|
||
|
|
||
|
- ✅ **无认证** (0x00)
|
||
|
- ✅ **用户名密码认证** (0x02)
|
||
|
|
||
|
### 错误处理
|
||
|
|
||
|
代理能够处理并报告以下SOCKS5错误:
|
||
|
|
||
|
| 错误码 | 含义 | 统计字段 |
|
||
|
|--------|------|----------|
|
||
|
| 0x01 | 一般SOCKS服务器故障 | `general_failure` |
|
||
|
| 0x02 | 连接不被规则集允许 | `not_allowed` |
|
||
|
| 0x03 | 网络不可达 | `network_unreachable` |
|
||
|
| 0x04 | 主机不可达 | `host_unreachable` |
|
||
|
| 0x05 | 连接被拒绝 | `connection_refused` |
|
||
|
| 0x06 | TTL过期 | `ttl_expired` |
|
||
|
| 0x07 | 不支持的命令 | `command_not_supported` |
|
||
|
| 0x08 | 不支持的地址类型 | `address_not_supported` |
|
||
|
|
||
|
## 性能特性
|
||
|
|
||
|
### 连接管理
|
||
|
- 异步处理多个并发连接
|
||
|
- 自动资源清理
|
||
|
- 超时管理
|
||
|
|
||
|
### 统计精度
|
||
|
- 原子操作保证并发安全
|
||
|
- 实时字节传输统计
|
||
|
- 详细的错误分类
|
||
|
|
||
|
### HTTP服务器配置
|
||
|
- 读取超时: 30秒
|
||
|
- 写入超时: 30秒
|
||
|
- 空闲超时: 120秒
|
||
|
- 最大头部大小: 1MB
|
||
|
|
||
|
## 故障排除
|
||
|
|
||
|
### 常见问题
|
||
|
|
||
|
1. **无法访问统计API**
|
||
|
- 确认代理运行在HTTP模式
|
||
|
- 检查端口是否正确
|
||
|
- 确认防火墙设置
|
||
|
|
||
|
2. **统计数据不准确**
|
||
|
- 重启代理服务
|
||
|
- 检查并发连接情况
|
||
|
|
||
|
3. **高错误率**
|
||
|
- 检查SOCKS5服务器状态
|
||
|
- 验证认证信息
|
||
|
- 查看网络连接质量
|
||
|
|
||
|
### 日志级别
|
||
|
|
||
|
设置 `logLevel: debug` 可以获得详细的调试信息:
|
||
|
|
||
|
```yaml
|
||
|
logLevel: debug # debug, info, warn, error
|
||
|
```
|