@chenpu17/tcpmapping 2.1.1 → 2.4.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.
- package/CHANGELOG.md +92 -0
- package/README.md +78 -8
- package/bin/tcpmapping.js +363 -173
- package/docs/API.md +532 -0
- package/docs/screenshots/dashboard-en-dark.webp +0 -0
- package/docs/screenshots/dashboard-mobile-zh.webp +0 -0
- package/docs/screenshots/dashboard-zh-light.webp +0 -0
- package/docs/screenshots/login-zh-light.webp +0 -0
- package/docs//345/212/237/350/203/275/346/200/273/347/273/223.md +200 -0
- package/docs//345/256/211/345/205/250/351/205/215/347/275/256/350/257/264/346/230/216.md +154 -0
- package/package.json +6 -4
- package/public/common.js +411 -0
- package/public/dashboard.html +1624 -437
- package/public/login.html +430 -107
- package/server.js +1219 -464
- package/setup-password.js +137 -57
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v2.4.0
|
|
4
|
+
|
|
5
|
+
### 新增
|
|
6
|
+
|
|
7
|
+
- WebUI 新增「服务资源」面板,实时展示服务进程自身的资源占用:
|
|
8
|
+
- CPU 使用率(按核心数归一化为整机占比)与核心数;
|
|
9
|
+
- 进程内存占用(RSS)、占系统内存比例与 V8 堆用量;
|
|
10
|
+
- 实时上行 / 下行速率与进程启动以来的累计流量;
|
|
11
|
+
- 最近采样时间与顶部实时指示点。
|
|
12
|
+
- `GET /api/status` 新增 `resources` 字段,包含 `cpuPercent`、`cpuCount`、`memory`、`traffic` 与 `sampledAt`。
|
|
13
|
+
|
|
14
|
+
### 改进
|
|
15
|
+
|
|
16
|
+
- 进程累计流量独立于映射统计,删除映射后仍可看到服务整体流量。
|
|
17
|
+
- 资源面板随界面语言与主题切换,移动端自动堆叠为单列布局,进度条提供 `progressbar` 无障碍语义。
|
|
18
|
+
- 系统状态卡片的累计流量改为上行 / 下行整行换行,避免窄卡片中「B」单位单独折行。
|
|
19
|
+
|
|
20
|
+
## v2.3.0
|
|
21
|
+
|
|
22
|
+
### 新增
|
|
23
|
+
|
|
24
|
+
- WebUI 支持中文 / English 切换,语言偏好保存在浏览器本地,静态与动态文案同步切换。
|
|
25
|
+
- 深色 / 浅色主题切换,首次访问跟随系统偏好,之后记住用户选择。
|
|
26
|
+
- API 提示信息支持 `X-Language` / `Accept-Language`,英文界面下返回英文错误提示。
|
|
27
|
+
- 登录页新增密码显示/隐藏按钮。
|
|
28
|
+
- 标记连接的实际监听地址,IPv6 地址统一显示为 `[addr]:port`。
|
|
29
|
+
|
|
30
|
+
### 改进
|
|
31
|
+
|
|
32
|
+
- 重新设计 WebUI:统一颜色、圆角、阴影设计变量,半透明吸顶导航、图标化统计卡片。
|
|
33
|
+
- 表格、状态徽章、按钮、连接卡片、空状态与弹窗全面美化,支持深色模式。
|
|
34
|
+
- 操作反馈由 `alert` 改为轻量 Toast 提示。
|
|
35
|
+
- 移动端布局优化,表单与连接信息自适应换行。
|
|
36
|
+
- 最近连接记录支持按映射筛选,并随界面语言转换关闭原因。
|
|
37
|
+
- 辅助文字对比度提升至 WCAG AA,表头、空状态、占位符在明暗主题下更清晰。
|
|
38
|
+
- 表格中的地址与端口不再从中间折行;内联 favicon,消除 `/favicon.ico` 404。
|
|
39
|
+
- `Accept-Language` 按首选语言解析,语言切换后历史关闭原因立即重新获取。
|
|
40
|
+
|
|
41
|
+
## v2.2.0
|
|
42
|
+
|
|
43
|
+
### 新增
|
|
44
|
+
|
|
45
|
+
- WebUI 支持编辑已有映射(修改名称、监听地址/端口、目标地址/端口)。
|
|
46
|
+
- 每个映射展示累计连接数、累计上下行流量,以及当前活跃连接流量。
|
|
47
|
+
- 连接监控展示连接持续时间,并记录客户端实际连接的本地地址。
|
|
48
|
+
- 新增最近连接记录(`GET /api/connections/history`),保存已关闭连接的源地址、目的地址、起止时间、持续时长、流量和关闭原因,WebUI 可按映射筛选查看。
|
|
49
|
+
- 连接关闭日志包含持续时长与双向流量,便于审计。
|
|
50
|
+
- 映射列表、连接状态和系统状态每 5 秒自动刷新,页面隐藏时自动暂停。
|
|
51
|
+
- `timeouts.connect` / `timeouts.idle` 配置项,支持自定义连接与空闲超时(`idle: 0` 可禁用)。
|
|
52
|
+
- `WEBUI_PORT`、`WEBUI_HOST`、`SESSION_SECRET` 环境变量支持。
|
|
53
|
+
- `npm test` 冒烟测试,覆盖登录、映射增删改、TCP 转发与统计。
|
|
54
|
+
|
|
55
|
+
### 修复与改进
|
|
56
|
+
|
|
57
|
+
- **安全**:移除 `admin/admin123` 默认凭据,未配置密码时 WebUI 不再启动。
|
|
58
|
+
- **安全**:登录成功后重新生成会话 ID,防止会话固定攻击。
|
|
59
|
+
- **安全**:Cookie 增加 `HttpOnly`、`SameSite=Lax`,并支持自定义会话超时。
|
|
60
|
+
- **安全**:增加跨站请求来源校验与安全响应头(CSP、X-Frame-Options、nosniff)。
|
|
61
|
+
- **安全**:会话密钥迁移到 `~/.tcpmapping/.session-secret`,权限 0600。
|
|
62
|
+
- **安全**:`auth-config.json` 使用原子写入并设置为 0600。
|
|
63
|
+
- **安全**:WebUI 默认只监听 `127.0.0.1`(可在 config.json 中修改)。
|
|
64
|
+
- **稳定性**:配置写入改为原子操作,避免异常退出导致配置损坏。
|
|
65
|
+
- **稳定性**:映射启动失败(如端口被占用)时不再显示为"运行中"。
|
|
66
|
+
- **稳定性**:停止映射会主动断开该映射下的所有活跃连接。
|
|
67
|
+
- **稳定性**:优雅关闭会关闭 HTTP 服务与所有转发连接。
|
|
68
|
+
- **性能**:TCP 转发使用 `pipe` 处理背压,避免慢速对端导致内存无限增长。
|
|
69
|
+
- **性能**:启用 TCP_NODELAY 与 KeepAlive,降低转发延迟并检测死连接。
|
|
70
|
+
- **体验**:编辑映射名称或目标地址时无需重启监听,已有连接不会被中断。
|
|
71
|
+
- **协议**:支持 TCP 半关闭(half-close)。
|
|
72
|
+
- **兼容**:CLI 停止服务不再依赖 `sleep` 命令,日志跟踪兼容 Windows。
|
|
73
|
+
- **兼容**:CLI 使用当前 Node.js 可执行文件启动服务。
|
|
74
|
+
- **UI**:修复 XSS 风险(映射名称等字段统一转义)。
|
|
75
|
+
- **UI**:登录状态失效时自动跳转登录页;修复登录页回车可能重复提交的问题。
|
|
76
|
+
- **UI**:新增监听地址输入项,可配置映射只监听指定网卡。
|
|
77
|
+
|
|
78
|
+
## v2.1.1
|
|
79
|
+
|
|
80
|
+
- 修复 Windows 下密码输入显示问题。
|
|
81
|
+
|
|
82
|
+
## v2.1.0
|
|
83
|
+
|
|
84
|
+
- 配置持久化与双语 README。
|
|
85
|
+
|
|
86
|
+
## v2.0.0
|
|
87
|
+
|
|
88
|
+
- 支持 CLI 工具,发布 npm 包 `@chenpu17/tcpmapping`。
|
|
89
|
+
|
|
90
|
+
## v1.0.0
|
|
91
|
+
|
|
92
|
+
- TCP 端口转发服务器,支持 WebUI 管理与实时连接监控。
|
package/README.md
CHANGED
|
@@ -10,9 +10,12 @@ TCP端口转发服务器,支持WebUI管理界面和实时连接监控。
|
|
|
10
10
|
|
|
11
11
|
- **TCP Port Forwarding** - Forward TCP traffic to backend servers | TCP端口转发
|
|
12
12
|
- **Multiple Mappings** - Manage multiple forwarding rules simultaneously | 多端口映射
|
|
13
|
-
- **WebUI Management** -
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
13
|
+
- **WebUI Management** - Add, edit, start, stop and delete mappings in real time | WebUI管理界面
|
|
14
|
+
- **Bilingual & Themes** - Simplified Chinese / English UI, dark and light themes | 中英文界面与深色模式
|
|
15
|
+
- **Connection Monitoring** - Live connection details, per-mapping cumulative traffic and a searchable history of closed connections | 实时连接、累计流量与已关闭连接记录
|
|
16
|
+
- **Service Resources** - Live CPU, memory and traffic usage of the forwarding process itself | 服务进程自身的 CPU、内存与实时流量
|
|
17
|
+
- **Robust Forwarding** - Backpressure handling, TCP half-close support and idle timeouts | 背压控制、半关闭与空闲超时
|
|
18
|
+
- **Secure by Default** - bcrypt hashing, login lockout, session hardening, no default password | 默认安全
|
|
16
19
|
|
|
17
20
|
---
|
|
18
21
|
|
|
@@ -61,8 +64,29 @@ After starting, visit **http://localhost:9999**
|
|
|
61
64
|
|
|
62
65
|
启动后访问 **http://localhost:9999**
|
|
63
66
|
|
|
67
|
+
### Screenshots | 界面预览
|
|
68
|
+
|
|
69
|
+

|
|
70
|
+
|
|
71
|
+
| English · Dark | Mobile · 中文 |
|
|
72
|
+
|:---:|:---:|
|
|
73
|
+
|  |  |
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary>Login page | 登录页</summary>
|
|
77
|
+
|
|
78
|
+

|
|
79
|
+
|
|
80
|
+
</details>
|
|
81
|
+
|
|
82
|
+
> Screenshots use demo data from an isolated instance | 截图使用独立演示实例的数据
|
|
83
|
+
|
|
64
84
|
Default username | 默认用户名: `admin`
|
|
65
85
|
|
|
86
|
+
> For security, the WebUI listens on `127.0.0.1` by default. To access it from another machine, set `webui.host` to `0.0.0.0` in `config.json` and restrict access with a firewall.
|
|
87
|
+
>
|
|
88
|
+
> 出于安全考虑,WebUI 默认只监听 `127.0.0.1`。如需远程访问,请将 `config.json` 中的 `webui.host` 改为 `0.0.0.0`,并通过防火墙限制访问来源。
|
|
89
|
+
|
|
66
90
|
---
|
|
67
91
|
|
|
68
92
|
## Configuration | 配置
|
|
@@ -87,11 +111,16 @@ Config file location (priority order) | 配置文件位置(优先级):
|
|
|
87
111
|
"target": { "host": "db.example.com", "port": 3306 }
|
|
88
112
|
}
|
|
89
113
|
],
|
|
90
|
-
"webui": { "port": 9999 },
|
|
91
|
-
"logging": { "level": "info" }
|
|
114
|
+
"webui": { "enabled": true, "host": "127.0.0.1", "port": 9999 },
|
|
115
|
+
"logging": { "enabled": true, "level": "info" },
|
|
116
|
+
"timeouts": { "connect": 30000, "idle": 300000 }
|
|
92
117
|
}
|
|
93
118
|
```
|
|
94
119
|
|
|
120
|
+
For remote WebUI access, set `webui.host` to `"0.0.0.0"` and protect the port with a firewall.
|
|
121
|
+
|
|
122
|
+
如需远程访问 WebUI,请将 `webui.host` 设为 `"0.0.0.0"`,并使用防火墙保护该端口。
|
|
123
|
+
|
|
95
124
|
### Config Options | 配置项
|
|
96
125
|
|
|
97
126
|
| Option | Description |
|
|
@@ -101,8 +130,22 @@ Config file location (priority order) | 配置文件位置(优先级):
|
|
|
101
130
|
| `mappings[].listen.port` | Listen port | 监听端口 |
|
|
102
131
|
| `mappings[].target.host` | Target host IP or domain | 目标主机 |
|
|
103
132
|
| `mappings[].target.port` | Target port | 目标端口 |
|
|
133
|
+
| `webui.enabled` | Enable the WebUI (default: true) | 是否启用 WebUI |
|
|
134
|
+
| `webui.host` | WebUI bind address (default: 127.0.0.1) | WebUI监听地址 |
|
|
104
135
|
| `webui.port` | WebUI port (default: 9999) | WebUI端口 |
|
|
136
|
+
| `logging.enabled` | Enable logging (default: true) | 是否输出日志 |
|
|
105
137
|
| `logging.level` | Log level: debug/info/warn/error | 日志级别 |
|
|
138
|
+
| `timeouts.connect` | Target connect timeout in ms (default: 30000) | 连接超时(毫秒) |
|
|
139
|
+
| `timeouts.idle` | Idle timeout in ms, 0 disables (default: 300000) | 空闲超时(毫秒,0为禁用) |
|
|
140
|
+
|
|
141
|
+
### Environment Variables | 环境变量
|
|
142
|
+
|
|
143
|
+
| Variable | Description |
|
|
144
|
+
|----------|-------------|
|
|
145
|
+
| `TCPMAPPING_DATA_DIR` | Override the data directory | 覆盖数据目录 |
|
|
146
|
+
| `WEBUI_PORT` | Override the WebUI port | 覆盖WebUI端口 |
|
|
147
|
+
| `WEBUI_HOST` | Override the WebUI bind address | 覆盖WebUI监听地址 |
|
|
148
|
+
| `SESSION_SECRET` | Override the session secret | 覆盖会话密钥 |
|
|
106
149
|
|
|
107
150
|
---
|
|
108
151
|
|
|
@@ -114,6 +157,7 @@ User configuration is stored in `~/.tcpmapping/`:
|
|
|
114
157
|
|
|
115
158
|
- `config.json` - Port mapping configuration | 端口映射配置
|
|
116
159
|
- `auth-config.json` - Authentication configuration | 认证配置
|
|
160
|
+
- `.session-secret` - Session signing secret (0600) | 会话签名密钥(0600)
|
|
117
161
|
- `tcpmapping.log` - Log file | 日志文件
|
|
118
162
|
- `tcpmapping.pid` - PID file | PID文件
|
|
119
163
|
|
|
@@ -125,10 +169,15 @@ User configuration is stored in `~/.tcpmapping/`:
|
|
|
125
169
|
|
|
126
170
|
## Security | 安全特性
|
|
127
171
|
|
|
128
|
-
- **
|
|
172
|
+
- **No Default Password** - The WebUI will not start until `setup-password` is run | 无默认密码
|
|
173
|
+
- **Strong Password Policy** - Length, character classes and expiry are configurable | 可配置的强密码策略
|
|
129
174
|
- **Login Protection** - Lock after 5 failed attempts for 30 minutes | 登录保护
|
|
130
|
-
- **Session
|
|
131
|
-
- **
|
|
175
|
+
- **Session Hardening** - Session ID regeneration on login, HttpOnly + SameSite cookies | 会话加固
|
|
176
|
+
- **CSRF Protection** - Cross-origin state-changing requests are rejected | 跨站请求防护
|
|
177
|
+
- **Security Headers** - CSP, X-Frame-Options, nosniff and no-store API responses | 安全响应头
|
|
178
|
+
- **Localhost by Default** - The WebUI listens on 127.0.0.1 unless configured otherwise | 默认仅本机访问
|
|
179
|
+
- **Atomic Config Writes** - Configuration files are written atomically | 配置原子写入
|
|
180
|
+
- **Password Encryption** - bcrypt hashing | bcrypt加密
|
|
132
181
|
|
|
133
182
|
---
|
|
134
183
|
|
|
@@ -180,6 +229,27 @@ Edit `webui.port` or `mappings[].listen.port` in config.json.
|
|
|
180
229
|
|
|
181
230
|
---
|
|
182
231
|
|
|
232
|
+
## Development | 开发
|
|
233
|
+
|
|
234
|
+
Run the smoke test (starts an isolated server, verifies login, CRUD, TCP forwarding and statistics):
|
|
235
|
+
|
|
236
|
+
运行冒烟测试(启动独立实例,验证登录、映射增删改、TCP 转发与统计):
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
npm install
|
|
240
|
+
npm test
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Changelog | 更新日志
|
|
246
|
+
|
|
247
|
+
See [CHANGELOG.md](CHANGELOG.md) for details.
|
|
248
|
+
|
|
249
|
+
详见 [CHANGELOG.md](CHANGELOG.md)。
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
183
253
|
## License | 许可证
|
|
184
254
|
|
|
185
255
|
MIT License
|