{"id":13618041,"url":"https://github.com/Berrysoft/tunet-rust","last_synced_at":"2025-04-14T10:30:56.798Z","repository":{"id":39905045,"uuid":"187877306","full_name":"Berrysoft/tunet-rust","owner":"Berrysoft","description":"清华大学校园网 Rust 库与客户端","archived":false,"fork":false,"pushed_at":"2025-04-05T14:01:36.000Z","size":4272,"stargazers_count":134,"open_issues_count":2,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T14:30:49.511Z","etag":null,"topics":["android","campus-network","dart","flutter","ios","linux","macos","rust","rust-lang","slint","tsinghua-university","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Berrysoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-21T16:41:27.000Z","updated_at":"2025-04-05T13:57:00.000Z","dependencies_parsed_at":"2024-01-09T07:25:53.792Z","dependency_job_id":"a44ec858-8552-4835-8ec4-5db6f197e578","html_url":"https://github.com/Berrysoft/tunet-rust","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Berrysoft%2Ftunet-rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Berrysoft%2Ftunet-rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Berrysoft%2Ftunet-rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Berrysoft%2Ftunet-rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Berrysoft","download_url":"https://codeload.github.com/Berrysoft/tunet-rust/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248862572,"owners_count":21173831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","campus-network","dart","flutter","ios","linux","macos","rust","rust-lang","slint","tsinghua-university","windows"],"created_at":"2024-08-01T20:01:53.190Z","updated_at":"2025-04-14T10:30:56.098Z","avatar_url":"https://github.com/Berrysoft.png","language":"Rust","readme":"# tunet-rust\r\n清华大学校园网 Rust 库与客户端。\r\n\r\n[![Azure DevOps builds](https://strawberry-vs.visualstudio.com/tunet-rust/_apis/build/status/Berrysoft.tunet-rust?branch=master)](https://strawberry-vs.visualstudio.com/tunet-rust/_build)\r\n\r\n## GUI（桌面端）\r\n基于 [Slint](https://slint-ui.com/) 开发。使用如下命令启动：\r\n\r\n``` bash\r\n$ tunet-gui\r\n```\r\n\r\n| 平台    | 亮                                   | 暗                                  |\r\n| ------- | ------------------------------------ | ----------------------------------- |\r\n| Windows | ![Windows](assets/windows.light.png) | ![Windows](assets/windows.dark.png) |\r\n| Linux   | ![Linux](assets/linux.light.png)     | （暂无图片）                        |\r\n| macOS   | ![macOS](assets/mac.light.png)       | ![macOS](assets/mac.dark.png)       |\r\n\r\n## GUI（移动端）\r\n基于 [Flutter](https://flutter.dev/) 开发。会尽量保证 iOS 版本能用，但是没钱发布。\r\n\r\n| 平台    | 亮                                   | 暗                                  |\r\n| ------- | ------------------------------------ | ----------------------------------- |\r\n| Android | ![Android](assets/android.light.png) | ![Android](assets/android.dark.png) |\r\n\r\n## CUI（命令行图形界面）\r\n使用如下命令启动：\r\n\r\n``` bash\r\n# 使用默认（自动判断）方式登录/注销\r\n$ tunet-cui\r\n# 使用 auth4 方式登录/注销\r\n$ tunet-cui -s auth4\r\n```\r\n\r\n![Console](assets/console.png)\r\n\r\n## 命令行\r\n### 登录/注销\r\n``` bash\r\n# 使用默认（自动判断）方式登录\r\n$ tunet login\r\n# 使用默认（自动判断）方式注销\r\n$ tunet logout\r\n# 使用 auth4 方式登录\r\n$ tunet login -s auth4\r\n# 使用 auth4 方式注销\r\n$ tunet logout -s auth4\r\n```\r\n### 在线状态\r\n``` bash\r\n# 使用默认（自动判断）方式\r\n$ tunet status\r\n# 使用 auth4 方式\r\n$ tunet status -s auth4\r\n```\r\n### 查询/强制下线在线 IP\r\n``` bash\r\n# 查询\r\n$ tunet online\r\n# IP 上线\r\n$ tunet connect -a IP地址\r\n# IP 下线\r\n$ tunet drop -a IP地址\r\n```\r\n### 流量明细\r\n``` bash\r\n# 使用默认排序（注销时间，升序）查询明细\r\n$ tunet detail\r\n# 使用登录时间（升序）查询明细\r\n$ tunet detail -o login\r\n# 使用流量降序查询明细\r\n$ tunet detail -o flux -d\r\n# 使用流量降序查询明细，并按注销日期组合\r\n$ tunet detail -o flux -dg\r\n```\r\n### Nushell 集成\r\n`status`、`online`、`detail` 子命令支持 `--nuon` 参数，可以配合 Nushell 得到结构化的数据：\r\n``` bash\r\n# 在线状态表格\r\n\u003e tunet status --nuon | from nuon\r\n# 查询在线 IP 表格\r\n\u003e tunet online --nuon | from nuon\r\n# 明细表格\r\n\u003e tunet detail --nuon | from nuon\r\n# 使用流量降序查询明细，并按注销日期组合\r\n\u003e tunet detail -g --nuon | from nuon | sort-by flux -r\r\n```\r\n\r\n### Windows 服务/macOS launchd\r\n``` bash\r\n# 注册服务\r\n$ tunet-service register\r\n# 注册服务，并定时5分钟连接一次\r\n$ tunet-service register -i \"5min\"\r\n# 注销服务\r\n$ tunet-service unregister\r\n```\r\n注意 `tunet-service.exe` 自身是服务程序，如需删除应先注销服务。\r\n\r\n### Systemd\r\n由于不同 Linux 发行版的服务机制不同，没有提供 `register` 和 `unregister` 命令。\r\nDebian 打包提供了 `tunet@.service` 文件。对于用户 `foo`，可以运行\r\n``` bash\r\n# 启用服务\r\n$ sudo systemctl enable tunet@foo\r\n# 启动服务\r\n$ sudo systemctl start tunet@foo\r\n```\r\n可以通过编辑该文件来调整重复登录的间隔。\r\n\r\n## 密码\r\n用户名和密码在第一次登录时根据提示输入。请不要在不信任的电脑上保存密码。可以在桌面端图形界面点击“删除并退出”，或在命令行使用如下命令删除：\r\n``` bash\r\n$ tunet deletecred\r\n```\r\n注意：由于 Linux 的限制，目前没有找到合适的持续化密码保存方法，因此会直接明文存储。\r\n\r\n## 网络状态\r\n针对不同平台使用平台特定的方式尝试获得当前的网络连接方式，如果是无线网连接还会获取 SSID。\r\n如果无法获取，则尝试连接特定的网址来判断。\r\n\r\n\u003ctable\u003e\r\n  \u003cthead\u003e\r\n    \u003ctr\u003e\r\n      \u003cth\u003e平台\u003c/th\u003e\r\n      \u003cth\u003e网络状态\u003c/th\u003e\r\n      \u003cth\u003eWIFI SSID\u003c/th\u003e\r\n      \u003cth\u003eMAC 地址\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n  \u003c/thead\u003e\r\n  \u003ctbody\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd\u003eWindows\u003c/td\u003e\r\n      \u003ctd colspan=\"2\"\u003eWindows::Networking::Connectivity\u003c/td\u003e\r\n      \u003ctd\u003eGetAdaptersAddresses\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd\u003eLinux\u003c/td\u003e\r\n      \u003ctd\u003e（无）\u003c/td\u003e\r\n      \u003ctd\u003eNetlink\u003c/td\u003e\r\n      \u003ctd rowspan=\"4\"\u003egetifaddrs\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd\u003eAndroid\u003c/td\u003e\r\n      \u003ctd\u003eConnectivityManager\u003c/td\u003e\r\n      \u003ctd\u003eWifiManager\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd\u003emacOS X\u003c/td\u003e\r\n      \u003ctd rowspan=\"2\"\u003eSystem Configuration\u003c/td\u003e\r\n      \u003ctd\u003eCore WLAN\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n      \u003ctd\u003eiOS\u003c/td\u003e\r\n      \u003ctd\u003eNEHotspotNetwork\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n  \u003c/tbody\u003e\r\n\u003c/table\u003e\r\n\r\n## 编译说明\r\n使用 `cargo` 直接编译：\r\n``` bash\r\n$ cargo build --release --workspace --exclude native\r\n```\r\n即可在 `target/release` 下找到编译好的程序。\r\n\r\n若要为 Android 编译 APK：\r\n``` bash\r\n$ cd tunet-flutter\r\n$ make apk\r\n```\r\n即可在 `tunet-flutter/build/app/outputs/flutter-apk/app-\u003c架构\u003e-release.apk` 找到打包。\r\n\r\n## 安装说明\r\n从 Releases 即可找到最新版分发。\r\n\r\n### Arch Linux\r\n有第三方打包的 AUR 和 [archlinuxcn](https://www.archlinuxcn.org/) 源可以安装。\r\n","funding_links":[],"categories":["Rust","GUI"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBerrysoft%2Ftunet-rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBerrysoft%2Ftunet-rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBerrysoft%2Ftunet-rust/lists"}