@feng3d/ctc 0.0.19 → 0.1.0

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.
Files changed (40) hide show
  1. package/README.md +82 -106
  2. package/dist/cli.d.ts +13 -11
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +188 -1067
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +18 -55
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +42 -188
  9. package/dist/config.js.map +1 -1
  10. package/dist/controller.d.ts +47 -5
  11. package/dist/controller.d.ts.map +1 -1
  12. package/dist/controller.js +10 -15
  13. package/dist/controller.js.map +1 -1
  14. package/dist/handlers/unified-handler.d.ts.map +1 -1
  15. package/dist/handlers/unified-handler.js +3 -1
  16. package/dist/handlers/unified-handler.js.map +1 -1
  17. package/dist/index.d.ts +20 -16
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +17 -328
  20. package/dist/index.js.map +1 -1
  21. package/dist/proxy-manager.d.ts +32 -32
  22. package/dist/proxy-manager.d.ts.map +1 -1
  23. package/dist/proxy-manager.js +81 -66
  24. package/dist/proxy-manager.js.map +1 -1
  25. package/package.json +5 -6
  26. package/admin-ui/dist/app.js +0 -29
  27. package/admin-ui/dist/index.html +0 -222
  28. package/admin-ui/dist/style.css +0 -1
  29. package/dist/admin-server.d.ts +0 -143
  30. package/dist/admin-server.d.ts.map +0 -1
  31. package/dist/admin-server.js +0 -407
  32. package/dist/admin-server.js.map +0 -1
  33. package/dist/forward-proxy.d.ts +0 -100
  34. package/dist/forward-proxy.d.ts.map +0 -1
  35. package/dist/forward-proxy.js +0 -407
  36. package/dist/forward-proxy.js.map +0 -1
  37. package/dist/ipc-handler.d.ts +0 -52
  38. package/dist/ipc-handler.d.ts.map +0 -1
  39. package/dist/ipc-handler.js +0 -110
  40. package/dist/ipc-handler.js.map +0 -1
package/README.md CHANGED
@@ -6,173 +6,149 @@
6
6
 
7
7
  ## 特性
8
8
 
9
+ - 极简设计,仅两步:`set` 配置服务端 → `-p <端口>` 映射
10
+ - 远程端口由服务端自动分配,无需手动指定
9
11
  - **每个代理端口同时支持 HTTP/WebSocket/TCP/UDP 四种协议**
10
12
  - 三通道架构:WebSocket 控制通道 + TCP 二进制数据通道 + UDP 数据通道
11
13
  - 自动重连机制
12
- - 多代理支持
13
- - 单实例模式:通过 IPC 机制支持动态添加代理映射
14
14
 
15
15
  ## 快速开始
16
16
 
17
- 推荐使用 `npx` 直接运行,无需全局安装:
17
+ 推荐使用 `npx` 直接运行,无需全局安装。两步即可完成映射:
18
18
 
19
- ```bash
20
- # 启动客户端(连接本地服务器测试)
21
- npx @feng3d/ctc start -s ws://localhost:9000 -t "my-token" -p "8080:3000:localhost"
19
+ ### 1. 配置服务端访问信息
22
20
 
23
- # 查询状态与代理列表
24
- npx @feng3d/ctc status
21
+ 从服务端启动时打印的命令中复制(服务端 `start` 会自动给出):
25
22
 
26
- # 停止客户端
27
- npx @feng3d/ctc stop
23
+ ```bash
24
+ npx @feng3d/ctc set -ip 203.0.113.10 -p 9000 -t a1b2c3d4-e5f6-7890-abcd-ef1234567890
28
25
  ```
29
26
 
30
- ## 命令说明
27
+ 服务端启用 TLS 时追加 `--tls`。配置保存在 `~/.chuantou/config.json`。
31
28
 
32
- ### `start` - 启动客户端(别名:`ks`)
29
+ ### 2. 映射本地端口
33
30
 
34
31
  ```bash
35
- npx @feng3d/ctc start [选项]
32
+ npx @feng3d/ctc -p 3000
36
33
  ```
37
34
 
38
- **单实例模式**:只允许一个客户端实例运行。如果客户端已运行,后续的 `start` 命令会向已运行的进程添加新的代理映射。
35
+ 服务端自动分配远程端口,映射成功后打印访问地址:
39
36
 
40
- **常用示例:**
37
+ ```
38
+ 端口映射成功
39
+ ───────────────────────────────────
40
+ 本地端口: 3000
41
+ 服务端映射端口: 9123
42
+ 访问地址: http://203.0.113.10:9123
43
+ ───────────────────────────────────
44
+ ```
41
45
 
42
- ```bash
43
- # 指定服务器地址和认证令牌
44
- npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token"
46
+ 访问 `http://<服务端IP>:<映射端口>` 即可访问本地的 3000 端口服务。
45
47
 
46
- # 添加单个代理映射:远程8080端口代理到本地3000端口
47
- npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost"
48
+ ## 命令说明
48
49
 
49
- # 添加多个代理映射
50
- npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost,8081:3001,8082:8080"
50
+ ### `set` - 配置服务端访问信息
51
51
 
52
- # 完整参数示例:指定服务器、令牌、代理和重连配置
53
- npx @feng3d/ctc start -s ws://your-server.com:9000 -t "my-token" -p "8080:3000:localhost" --reconnect-interval 5000 --max-reconnect 10
52
+ ```bash
53
+ npx @feng3d/ctc set [选项]
54
54
  ```
55
55
 
56
56
  **参数说明:**
57
57
 
58
- | 参数 | 说明 | 示例 | 默认值 |
59
- |------|------|------|--------|
60
- | `-s, --server <url>` | 服务器地址(必填) | `ws://your-server.com:9000` | - |
61
- | `-t, --token <token>` | 认证令牌(必填) | `my-token` | - |
62
- | `-p, --proxies <proxies>` | 代理配置(逗号分隔),格式:`远程端口:本地端口:本地地址` | `8080:3000:localhost` | - |
63
- | `--reconnect-interval <ms>` | 重连间隔(毫秒) | `5000` | `5000` |
64
- | `--max-reconnect <number>` | 最大重连次数 | `10` | `10` |
65
- | `--no-daemon` | 前台运行(不作为后台守护进程) | - | - |
66
- | `--no-autostart` | 不注册开机启动 | - | - |
67
- | `-o, --open` | 启动后在浏览器中打开管理页面 | - | - |
58
+ | 参数 | 说明 | 默认值 |
59
+ |------|------|--------|
60
+ | `-ip <ip>` | 服务端 IP 或域名(简写,标准形式 `--ip`) | (必填) |
61
+ | `-p, --server-port <port>` | 服务端控制端口 | (必填) |
62
+ | `-t, --token <token>` | 认证 token(与服务端一致) | (必填) |
63
+ | `--tls` | 服务端启用 TLS(使用 wss/https) | `false` |
68
64
 
69
- ### `status` - 查询客户端状态与代理列表(别名:`zt`)
65
+ **示例:**
70
66
 
71
67
  ```bash
72
- npx @feng3d/ctc status
73
- ```
68
+ # 标准用法(推荐直接复制服务端打印的命令)
69
+ npx @feng3d/ctc set -ip 203.0.113.10 -p 9000 -t my-token
74
70
 
75
- **输出示例:**
76
-
77
- ```
78
- 穿透客户端状态
79
- PID: 12345
80
- 服务器: ws://your-server.com:9000
81
- 管理页面: http://127.0.0.1:9001/
82
- 开机启动: 已启用
83
- 连接状态: 已认证
84
- 运行时长: 5分30秒
85
- 代理映射: 2 个
86
- :8080 -> localhost:3000
87
- :8081 -> localhost:3001
71
+ # 使用域名 + TLS
72
+ npx @feng3d/ctc set -ip your.domain.com -p 9000 -t my-token --tls
88
73
  ```
89
74
 
90
- ### `stop` - 停止客户端(别名:`tz`)
75
+ > 说明:`-ip` 是用户习惯的简写(commander 短选项本是单字符,内部会自动重写为 `--ip`)。`set` 上下文中的 `-p` 指服务端控制端口,与映射命令的 `-p`(本地端口)含义不同。
76
+
77
+ ### 映射本地端口(默认动作)
91
78
 
92
79
  ```bash
93
- npx @feng3d/ctc stop
80
+ npx @feng3d/ctc -p <本地端口> [选项]
94
81
  ```
95
82
 
96
- 停止客户端并清理所有代理映射。
97
-
98
- ## Web 管理页面
99
-
100
- 客户端启动后,可以通过浏览器访问本地管理页面:
101
-
102
- ```
103
- http://127.0.0.1:9001/
104
- ```
83
+ **参数说明:**
105
84
 
106
- 管理页面提供以下功能:
107
- - 查看客户端连接状态(服务器地址、连接状态、认证状态)
108
- - 查看运行时长和重连次数
109
- - 查看所有已注册的代理映射
110
- - 动态添加新的代理映射
111
- - 删除现有代理映射
112
- - 每 3 秒自动刷新状态
85
+ | 参数 | 说明 | 默认值 |
86
+ |------|------|--------|
87
+ | `-p, --port <localPort>` | 要映射的本地端口 | (必填) |
88
+ | `-d, --detach` | 后台运行(终端关闭不停止) | 前台运行 |
113
89
 
114
- 使用 `--open` 参数启动时可自动打开浏览器:
90
+ **示例:**
115
91
 
116
92
  ```bash
117
- npx @feng3d/ctc start --open
118
- ```
93
+ # 前台运行,映射本地 3000 端口
94
+ npx @feng3d/ctc -p 3000
119
95
 
120
- ## 单实例模式
96
+ # 后台运行
97
+ npx @feng3d/ctc -p 3000 -d
98
+ ```
121
99
 
122
- 客户端采用单实例模式设计:
100
+ 不带任何参数运行会显示帮助。
123
101
 
124
- 1. **首次启动**:启动后台守护进程,建立与服务器的连接
125
- 2. **再次启动**:如果客户端已运行,则向已运行进程添加新的代理映射
126
- 3. **不同服务器**:如果尝试连接到不同的服务器,会提示错误
102
+ ## 运行模式
127
103
 
128
- 这种设计简化了多代理的管理,无需为每组代理配置单独启动客户端。
104
+ 默认前台运行,Ctrl+C 或关闭终端即停止。
129
105
 
130
- ## 代理配置格式
106
+ 追加 `-d` 后台运行(脱离终端),日志写入 `~/.chuantou/client.log`:
131
107
 
108
+ ```bash
109
+ npx @feng3d/ctc -p 3000 -d
132
110
  ```
133
- remotePort:localPort[:localHost]
134
- ```
135
-
136
- - `remotePort` - 公网端口
137
- - `localPort` - 本地端口
138
- - `localHost` - 本地地址(可选,默认:localhost)
139
111
 
140
- **推荐**:本地地址为 localhost 时推荐省略,使用 `8080:3000` 而非 `8080:3000:localhost`。
112
+ 后台进程停止用 `kill <pid>`(Linux)或 `taskkill /F /PID <pid>`(Windows),PID 在启动时打印。
141
113
 
142
- 每个代理端口同时支持 HTTP/WebSocket/TCP/UDP 协议。
114
+ ## 配置文件
143
115
 
144
- **示例:**
116
+ `set` 命令将服务端访问信息写入 `~/.chuantou/config.json`:
145
117
 
118
+ ```json
119
+ {
120
+ "serverIp": "203.0.113.10",
121
+ "serverPort": 9000,
122
+ "token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
123
+ "tls": false
124
+ }
146
125
  ```
147
- # 单个代理(同时支持 HTTP/WebSocket/TCP/UDP)
148
- 8080:3000:localhost
149
126
 
150
- # 完整格式
151
- 8082:8080:192.168.1.100
152
-
153
- # 多个代理(逗号分隔)
154
- 8080:3000:localhost,8081:3001,8082:8080
155
- ```
127
+ 映射命令(`-p`)启动时读取该配置连接服务端。如需切换服务端,重新执行 `set` 即可覆盖。
156
128
 
157
129
  ## 作为库使用
158
130
 
159
131
  ```typescript
160
132
  import { Controller, ProxyManager } from '@feng3d/ctc';
161
- import type { Config } from '@feng3d/chuantou-shared';
162
133
 
163
- const config: Config = {
164
- serverUrl: 'ws://your-server.com:9000',
134
+ const controller = new Controller({
135
+ serverUrl: 'ws://203.0.113.10:9000/control',
165
136
  token: 'my-token',
166
137
  reconnectInterval: 5000,
167
- maxReconnectAttempts: 10,
168
- proxies: [
169
- { remotePort: 8080, localPort: 3000, localHost: 'localhost' },
170
- { remotePort: 8081, localPort: 3001, localHost: 'localhost' }
171
- ]
172
- };
173
-
174
- const controller = new Controller(config);
138
+ maxReconnectAttempts: Infinity,
139
+ });
140
+
141
+ const proxyManager = new ProxyManager(controller);
142
+
175
143
  await controller.connect();
144
+ // 认证成功后注册代理,服务端自动分配远程端口
145
+ controller.on('authenticated', async () => {
146
+ await proxyManager.registerProxy({ localPort: 3000 });
147
+ });
148
+
149
+ proxyManager.on('registered', (assignedPort: number) => {
150
+ console.log(`已映射,访问地址: http://203.0.113.10:${assignedPort}`);
151
+ });
176
152
  ```
177
153
 
178
154
  ## 许可证
package/dist/cli.d.ts CHANGED
@@ -1,18 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * @module cli
4
- * @description 穿透客户端 CLI - 简洁的命令行工具
5
4
  *
6
- * 使用方法:
7
- * npx @feng3d/cts start # 启动客户端(后台守护进程)
8
- * npx @feng3d/cts stop # 停止客户端
9
- * npx @feng3d/cts restart # 重启客户端
10
- * npx @feng3d/cts status # 查看状态
11
- * npx @feng3d/cts proxies # 管理代理映射
12
- * npx @feng3d/cts config # 管理配置
13
- * npx @feng3d/cts boot # 管理开机自启动
14
- * npx @feng3d/cts logs # 查看日志
15
- * npx @feng3d/cts open # 打开管理页面
5
+ * 穿透客户端命令行入口。
6
+ *
7
+ * 提供两条命令:
8
+ *
9
+ * 1. 设置服务端访问信息(写入配置文件):
10
+ * npx @feng3d/ctc set -ip <serverip> -p <serverport> -t <token> [--tls]
11
+ *
12
+ * 2. 映射本地端口到服务端(服务端自动分配端口并返回):
13
+ * npx @feng3d/ctc -p <localPort> [-d]
14
+ *
15
+ * 运行模式:
16
+ * - 默认前台:进程依附终端,终端关闭即停止
17
+ * - -d / --detach:后台运行,脱离终端;停止用系统 kill <pid>
16
18
  */
17
19
  export {};
18
20
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}