trzsz/trzsz.js
GitHub: trzsz/trzsz.js
trzsz.js是trzsz的JavaScript实现,让基于Electron和Web的终端应用支持trz/tsz文件传输,完美兼容tmux。
Stars: 201 | Forks: 16
# trzsz.js ( trz / tsz ) - trzsz 的 js 版本
[](https://choosealicense.com/licenses/mit/)
[](https://www.npmjs.com/package/trzsz)
[](https://trzsz.github.io/js)
[](https://trzsz.github.io/cn/js)
`trzsz.js` 使使用 electron 和 webshell 构建的终端支持 [trzsz](https://trzsz.github.io/) ( trz / tsz ),类似于 ( rz / sz ),且兼容 tmux。
_关于 `trzsz ( trz / tsz )` 的更多信息,请查看 [https://trzsz.github.io](https://trzsz.github.io)。_
## 入门指南
- 安装模块
npm install trzsz
或
yarn add trzsz
- 在 Node.js 中使用
import { TrzszFilter } from "trzsz";
或
const { TrzszFilter } = require("trzsz");
- 在浏览器中使用
- 为每个连接创建 `TrzszFilter` 对象。
const trzszFilter = new TrzszFilter({
// trzsz 选项,见下文
});
- 通常,服务器的输出会被转发到终端。将输出传递给 `TrzszFilter` 处理。
const trzszFilter = new TrzszFilter({
// 除非用户在服务器上运行 ( trz / tsz ),否则输出会被 TrzszFilter 转发回来。
writeToTerminal: (data) => terminal.write(typeof data === "string" ? data : new Uint8Array(data)),
});
// 将输出转发给 TrzszFilter
webSocket.addEventListener("message", (ev) => trzszFilter.processServerOutput(ev.data));
- 通常,用户输入会被转发到服务器。将用户输入传递给 `TrzszFilter` 处理。
const trzszFilter = new TrzszFilter({
// 除非正在传输文件,否则用户输入会被 TrzszFilter 转发回来。
sendToServer: (data) => webSocket.send(data),
});
// 将用户输入转发给 TrzszFilter
terminal.onData((data) => trzszFilter.processTerminalInput(data));
// 将二进制输入转发给 TrzszFilter
terminal.onBinary((data) => trzszFilter.processBinaryInput(data));
- 让 `TrzszFilter` 知道终端列数以渲染进度条。
const trzszFilter = new TrzszFilter({
// 初始化终端列数
terminalColumns: terminal.cols,
});
// 重置终端列数
terminal.onResize((size) => trzszFilter.setTerminalColumns(size.cols));
- 如果远程服务器是 Windows shell,例如 `cmd` 和 `PowerShell`。
const trzszFilter = new TrzszFilter({
// 这是一个 windows shell
isWindowsShell: true,
});
- 如果在 `Node.js` 中运行且 `TrzszFilter` 可以 `require('fs')`,则需要 `chooseSendFiles` 和 `chooseSaveDirectory`。如果在 Web 浏览器中运行,它们将被忽略。注意它们是 `async` 函数。
const trzszFilter = new TrzszFilter({
// 当用户在服务器上运行 trz(上传文件)且 require('fs') 无报错时调用。
chooseSendFiles: async (directory) => {
// 如果 `directory` 为 `true`,允许选择多个目录和文件。
// 否则,只允许选择多个文件。
// 如果用户取消则返回 `undefined`。
// 返回用户选择的文件路径数组。
return ["/path/to/file1", "/path/to/file2", "/path/to/directory3"];
},
// 当用户在服务器上运行 tsz(下载文件)且 require('fs') 无报错时调用。
chooseSaveDirectory: async () => {
// 如果用户取消则返回 `undefined`。
// 返回用户选择的目录路径。
return "/path/to/directory";
},
});
- 支持拖拽文件或目录上传。
terminalHtmlElement.addEventListener("dragover", (event) => event.preventDefault());
terminalHtmlElement.addEventListener("drop", (event) => {
event.preventDefault();
trzszFilter
.uploadFiles(event.dataTransfer.items)
.then(() => console.log("upload success"))
.catch((err) => console.log(err));
});
- `TrzszAddon` 是 `TrzszFilter` 的封装。如果你正在使用 [xterm-addon-attach](https://www.npmjs.com/package/xterm-addon-attach),只需用 `TrzszAddon` 替换 `AttachAddon` 即可。
import { Terminal } from "xterm";
import { TrzszAddon } from "trzsz";
const terminal = new Terminal();
const trzszAddon = new TrzszAddon(webSocket);
terminal.loadAddon(trzszAddon);
## 示例
- [Browser](https://github.com/trzsz/trzsz.js/blob/main/examples/browser) web shell 示例。
- [Electron](https://github.com/trzsz/trzsz.js/blob/main/examples/electron) 终端应用示例。
- [TrzszAddon](https://github.com/trzsz/trzsz.js/blob/main/examples/addon) xterm 插件示例。
## 截图
#### 在 Web 浏览器中上传和下载文件

#### 在 Electron 应用中上传和下载文件

## 联系方式
欢迎给作者发邮件 ,或创建一个 [issue](https://github.com/trzsz/trzsz.js/issues)。欢迎加入 QQ 群:318578930。
## 赞助
[❤️ 赞助 trzsz ❤️](https://github.com/trzsz),请作者喝杯饮料 🍺 ?感谢您的支持!
标签:CMS安全, Electron, GNU通用公共许可证, JavaScript, MITM代理, Node.js, PE 加载器, rz/sz, SSH客户端, Tmux兼容, trz, trzsz, tsz, TypeScript, WebShell, Xterm.js, ZModem替代, 前端组件, 威胁情报, 安全插件, 开发者工具, 开源库, 搜索引擎爬虫, 数据可视化, 文件上传, 文件下载, 文件传输, 终端工具, 自动化攻击