@feng3d/ctc 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +195 -0
- package/dist/admin-server.d.ts +90 -0
- package/dist/admin-server.d.ts.map +1 -0
- package/dist/admin-server.js +680 -0
- package/dist/admin-server.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +433 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +62 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +209 -0
- package/dist/config.js.map +1 -0
- package/dist/controller.d.ts +173 -0
- package/dist/controller.d.ts.map +1 -0
- package/dist/controller.js +340 -0
- package/dist/controller.js.map +1 -0
- package/dist/handlers/unified-handler.d.ts +110 -0
- package/dist/handlers/unified-handler.d.ts.map +1 -0
- package/dist/handlers/unified-handler.js +373 -0
- package/dist/handlers/unified-handler.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/proxy-manager.d.ts +75 -0
- package/dist/proxy-manager.d.ts.map +1 -0
- package/dist/proxy-manager.js +124 -0
- package/dist/proxy-manager.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# @feng3d/ctc
|
|
2
|
+
|
|
3
|
+
**ctc** 是 **穿透客户端**(Chuantou Client)的缩写。
|
|
4
|
+
|
|
5
|
+
内网穿透转发系统的客户端,运行在内网机器上,将本地服务暴露到公网。
|
|
6
|
+
|
|
7
|
+
## 特性
|
|
8
|
+
|
|
9
|
+
- WebSocket 控制通道
|
|
10
|
+
- 自动重连机制
|
|
11
|
+
- **每个端口同时支持 HTTP 和 WebSocket 代理**
|
|
12
|
+
- 多代理支持
|
|
13
|
+
- 单实例模式:支持动态添加代理映射
|
|
14
|
+
|
|
15
|
+
## 快速开始
|
|
16
|
+
|
|
17
|
+
推荐使用 `npx` 直接运行,无需全局安装:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 启动客户端(连接本地服务器测试)
|
|
21
|
+
npx @feng3d/ctc start -s ws://localhost:9000 -t "my-token" -p "8080:3000:localhost"
|
|
22
|
+
|
|
23
|
+
# 查询状态
|
|
24
|
+
npx @feng3d/ctc status
|
|
25
|
+
|
|
26
|
+
# 列出代理映射
|
|
27
|
+
npx @feng3d/ctc list
|
|
28
|
+
|
|
29
|
+
# 停止客户端
|
|
30
|
+
npx @feng3d/ctc stop
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 命令说明
|
|
34
|
+
|
|
35
|
+
### `start` - 启动客户端
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npx @feng3d/ctc start [选项]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**单实例模式**:只允许一个客户端实例运行。如果客户端已运行,后续的 `start` 命令会向已运行的进程添加新的代理映射。
|
|
42
|
+
|
|
43
|
+
**常用示例:**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 指定服务器地址和认证令牌
|
|
47
|
+
npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token"
|
|
48
|
+
|
|
49
|
+
# 添加单个代理映射:远程8080端口代理到本地3000端口
|
|
50
|
+
npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost"
|
|
51
|
+
|
|
52
|
+
# 添加多个代理映射
|
|
53
|
+
npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost,8081:3001,8082:8080"
|
|
54
|
+
|
|
55
|
+
# 完整参数示例:指定服务器、令牌、代理和重连配置
|
|
56
|
+
npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost" --reconnect-interval 5000 --max-reconnect 10
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**参数说明:**
|
|
60
|
+
|
|
61
|
+
| 参数 | 说明 | 示例 | 默认值 |
|
|
62
|
+
|------|------|------|--------|
|
|
63
|
+
| `-s, --server <url>` | 服务器地址(必填) | `ws://your-server.com:9000` | - |
|
|
64
|
+
| `-t, --token <token>` | 认证令牌(必填) | `my-token` | - |
|
|
65
|
+
| `-p, --proxies <proxies>` | 代理配置(逗号分隔),格式:`远程端口:本地端口:本地地址` | `8080:3000:localhost` | - |
|
|
66
|
+
| `--reconnect-interval <ms>` | 重连间隔(毫秒) | `5000` | `5000` |
|
|
67
|
+
| `--max-reconnect <number>` | 最大重连次数 | `10` | `10` |
|
|
68
|
+
| `--no-daemon` | 前台运行(不作为后台守护进程) | - | - |
|
|
69
|
+
| `-o, --open` | 启动后在浏览器中打开管理页面 | - | - |
|
|
70
|
+
|
|
71
|
+
### `status` - 查询客户端状态
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx @feng3d/ctc status
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**输出示例:**
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
穿透客户端状态
|
|
81
|
+
运行中: 是
|
|
82
|
+
服务器: ws://your-server.com:9000
|
|
83
|
+
PID: 12345
|
|
84
|
+
运行时长: 5分30秒
|
|
85
|
+
代理数量: 2
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### `list` - 列出代理映射
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx @feng3d/ctc list
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**输出示例:**
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
当前代理映射:
|
|
98
|
+
:8080 -> localhost:3000
|
|
99
|
+
:8081 -> localhost:3001
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `stop` - 停止客户端
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npx @feng3d/ctc stop
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
停止客户端并清理所有代理映射。
|
|
109
|
+
|
|
110
|
+
## Web 管理页面
|
|
111
|
+
|
|
112
|
+
客户端启动后,可以通过浏览器访问本地管理页面:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
http://127.0.0.1:9001/
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
管理页面提供以下功能:
|
|
119
|
+
- 查看客户端连接状态(服务器地址、连接状态、认证状态)
|
|
120
|
+
- 查看运行时长和重连次数
|
|
121
|
+
- 查看所有已注册的代理映射
|
|
122
|
+
- 动态添加新的代理映射
|
|
123
|
+
- 删除现有代理映射
|
|
124
|
+
- 每 3 秒自动刷新状态
|
|
125
|
+
|
|
126
|
+
使用 `--open` 参数启动时可自动打开浏览器:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
npx @feng3d/ctc start --open
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 单实例模式
|
|
133
|
+
|
|
134
|
+
客户端采用单实例模式设计:
|
|
135
|
+
|
|
136
|
+
1. **首次启动**:启动后台守护进程,建立与服务器的连接
|
|
137
|
+
2. **再次启动**:如果客户端已运行,则向已运行进程添加新的代理映射
|
|
138
|
+
3. **不同服务器**:如果尝试连接到不同的服务器,会提示错误
|
|
139
|
+
|
|
140
|
+
这种设计简化了多代理的管理,无需为每组代理配置单独启动客户端。
|
|
141
|
+
|
|
142
|
+
## 代理配置格式
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
remotePort:localPort[:localHost]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- `remotePort` - 公网端口
|
|
149
|
+
- `localPort` - 本地端口
|
|
150
|
+
- `localHost` - 本地地址(可选,默认:localhost)
|
|
151
|
+
|
|
152
|
+
**推荐**:本地地址为 localhost 时推荐省略,使用 `8080:3000` 而非 `8080:3000:localhost`。
|
|
153
|
+
|
|
154
|
+
每个代理端口同时支持 HTTP 和 WebSocket 协议。
|
|
155
|
+
|
|
156
|
+
**示例:**
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
# HTTP 代理
|
|
160
|
+
8080:3000:localhost
|
|
161
|
+
|
|
162
|
+
# WebSocket 代理(同一端口)
|
|
163
|
+
8080:3000:localhost
|
|
164
|
+
|
|
165
|
+
# 完整格式
|
|
166
|
+
8082:8080:192.168.1.100
|
|
167
|
+
|
|
168
|
+
# 多个代理(逗号分隔)
|
|
169
|
+
8080:3000:localhost,8081:3001,8082:8080
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 作为库使用
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { Controller, ProxyManager } from '@feng3d/ctc';
|
|
176
|
+
import type { Config } from '@feng3d/chuantou-shared';
|
|
177
|
+
|
|
178
|
+
const config: Config = {
|
|
179
|
+
serverUrl: 'ws://your-server.com:9000',
|
|
180
|
+
token: 'my-token',
|
|
181
|
+
reconnectInterval: 5000,
|
|
182
|
+
maxReconnectAttempts: 10,
|
|
183
|
+
proxies: [
|
|
184
|
+
{ remotePort: 8080, localPort: 3000, localHost: 'localhost' },
|
|
185
|
+
{ remotePort: 8081, localPort: 3001, localHost: 'localhost' }
|
|
186
|
+
]
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const controller = new Controller(config);
|
|
190
|
+
await controller.connect();
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## 许可证
|
|
194
|
+
|
|
195
|
+
ISC
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module admin-server
|
|
3
|
+
* @description 客户端管理页面 HTTP 服务器模块。
|
|
4
|
+
* 提供一个本地 HTTP 服务,用于查看客户端状态和管理代理映射。
|
|
5
|
+
*/
|
|
6
|
+
import { ProxyConfig } from '@feng3d/chuantou-shared';
|
|
7
|
+
/**
|
|
8
|
+
* 客户端状态信息接口
|
|
9
|
+
*/
|
|
10
|
+
export interface ClientStatus {
|
|
11
|
+
/** 是否正在运行 */
|
|
12
|
+
running: boolean;
|
|
13
|
+
/** 服务器地址 */
|
|
14
|
+
serverUrl: string;
|
|
15
|
+
/** 是否已连接 */
|
|
16
|
+
connected: boolean;
|
|
17
|
+
/** 是否已认证 */
|
|
18
|
+
authenticated: boolean;
|
|
19
|
+
/** 运行时长(毫秒) */
|
|
20
|
+
uptime: number;
|
|
21
|
+
/** 已注册的代理列表 */
|
|
22
|
+
proxies: ProxyConfig[];
|
|
23
|
+
/** 重连次数 */
|
|
24
|
+
reconnectAttempts: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 管理页面服务器配置接口
|
|
28
|
+
*/
|
|
29
|
+
export interface AdminServerConfig {
|
|
30
|
+
/** 监听端口 */
|
|
31
|
+
port: number;
|
|
32
|
+
/** 监听地址 */
|
|
33
|
+
host: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 管理页面服务器类
|
|
37
|
+
*
|
|
38
|
+
* 在本地启动一个 HTTP 服务器,提供状态查询和代理管理的 API 接口,
|
|
39
|
+
* 以及一个可视化的 Web 管理界面。
|
|
40
|
+
*/
|
|
41
|
+
export declare class AdminServer {
|
|
42
|
+
/** HTTP 服务器实例 */
|
|
43
|
+
private server;
|
|
44
|
+
/** 监听端口 */
|
|
45
|
+
private port;
|
|
46
|
+
/** 监听地址 */
|
|
47
|
+
private host;
|
|
48
|
+
/** 启动时间 */
|
|
49
|
+
private startedAt;
|
|
50
|
+
/** 获取状态回调函数 */
|
|
51
|
+
private getStatusCallback;
|
|
52
|
+
/** 添加代理回调函数 */
|
|
53
|
+
private addProxyCallback;
|
|
54
|
+
/** 删除代理回调函数 */
|
|
55
|
+
private removeProxyCallback;
|
|
56
|
+
/**
|
|
57
|
+
* 状态页面 HTML 模板
|
|
58
|
+
*/
|
|
59
|
+
private static readonly STATUS_HTML;
|
|
60
|
+
/**
|
|
61
|
+
* 创建管理服务器实例
|
|
62
|
+
*
|
|
63
|
+
* @param config - 服务器配置
|
|
64
|
+
* @param getStatus - 获取状态的回调函数
|
|
65
|
+
* @param addProxy - 添加代理的回调函数
|
|
66
|
+
* @param removeProxy - 删除代理的回调函数
|
|
67
|
+
*/
|
|
68
|
+
constructor(config: AdminServerConfig, getStatus: () => ClientStatus, addProxy: (proxy: ProxyConfig) => Promise<void>, removeProxy: (remotePort: number) => Promise<void>);
|
|
69
|
+
/**
|
|
70
|
+
* 启动服务器
|
|
71
|
+
*
|
|
72
|
+
* @returns 启动完成的 Promise
|
|
73
|
+
*/
|
|
74
|
+
start(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* 处理 HTTP 请求
|
|
77
|
+
*
|
|
78
|
+
* 提供以下端点:
|
|
79
|
+
* - `GET /` - 管理页面
|
|
80
|
+
* - `GET /_ctc/status` - 获取状态
|
|
81
|
+
* - `POST /_ctc/proxies` - 添加代理
|
|
82
|
+
* - `DELETE /_ctc/proxies/:port` - 删除代理
|
|
83
|
+
*/
|
|
84
|
+
private handleRequest;
|
|
85
|
+
/**
|
|
86
|
+
* 停止服务器
|
|
87
|
+
*/
|
|
88
|
+
stop(): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=admin-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-server.d.ts","sourceRoot":"","sources":["../src/admin-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY;IACZ,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW;IACX,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,iBAAiB;IACjB,OAAO,CAAC,MAAM,CAAkC;IAChD,WAAW;IACX,OAAO,CAAC,IAAI,CAAS;IACrB,WAAW;IACX,OAAO,CAAC,IAAI,CAAS;IACrB,WAAW;IACX,OAAO,CAAC,SAAS,CAAS;IAC1B,eAAe;IACf,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,eAAe;IACf,OAAO,CAAC,gBAAgB,CAAwC;IAChE,eAAe;IACf,OAAO,CAAC,mBAAmB,CAAwC;IAEnE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAqiBnC;IAEA;;;;;;;OAOG;gBAED,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,YAAY,EAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,EAC/C,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAYpD;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAgErB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ5B"}
|