Compare commits

..
Author SHA1 Message Date
黑先森 41f58f1df6 重大结构更新
+ 升级rust为1.8版本
+ 升级tauri为最新版,以及其他包升级
+ 现在构建分为window7和window7以上两种版本
+ 优化分享配置弹窗遮盖问题
+ 增加uninstall.exe(不会删除日志)
+ 增加windows.0.48.5.lib
+ 增加build.bat 内含windows7构建之前的操作
2025-01-16 16:53:51 +08:00
黑先森 0a17c269ea 这是一个测试分支,用于rust最新包更新与适配 2025-01-10 18:42:02 +08:00
黑先森 6fd3b999d7 修复安全漏洞 2025-01-09 10:33:42 +08:00
黑先森 3773e11b24 去除房间信息tooltip 2025-01-09 09:53:35 +08:00
黑先森 987541ab52 Merge branch 'dev_1.3.6_package_upgrade' 2025-01-08 15:04:57 +08:00
黑先森 d800a414c0 升级package,增强工具 防火墙类别,新增自定义防火墙策略界面开启按钮 2025-01-08 12:12:00 +08:00
黑先森 922ba3f1ea 优化主界面文字说明,高级选项排版和文字说明 2025-01-06 20:00:47 +08:00
黑先森 a5954744a1 更新readme 2025-01-03 17:28:15 +08:00
22 changed files with 1774 additions and 997 deletions
+1 -1
View File
@@ -1 +1 @@
18.18.2
20.18.1
+3
View File
@@ -56,6 +56,9 @@ Releases [https://github.com/EasyTier/EasytierGame/releases](https://github.c
- 1.2.6重写 自建服务器功能,可以自行搭建服务器,但是需要一些网络知识,具体可以查看文档[自建服务器](https://www.easytier.top/guide/network/host-public-server.html),也可查看帮助.txt
![game-step13](/assets/game-step13.png)
- 1.3.5 增强工具 新增了forceBindIP
![game-step14](/assets/game-step14.png)
## 特性
- 基于easytier组网工具开发,界面清晰简单
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+11
View File
@@ -0,0 +1,11 @@
rustup default nightly
@echo 使用rust nightly构建支持win7的版本,请先将根目录的windows.0.48.5 放入以下目录
@echo C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x64
@echo C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x86
@echo C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x64
@echo C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x86
pnpm tauri build -- -Z build-std --target x86_64-win7-windows-msvc
rustup default stable
pnpm tauri build
pnpm run release
pnpm run release-win7
+14 -15
View File
@@ -3,41 +3,40 @@
"private": true,
"author": "leizi97",
"description": "A simple network initiator based on Easytier",
"version": "1.3.5",
"version": "1.3.7",
"scripts": {
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
"build": "nuxt generate --dotenv env/.env.prod",
"release": "node zip.js"
"release": "node zip.js",
"release-win7": "node zip.js win7"
},
"devDependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@element-plus/nuxt": "^1.1.1",
"@nuxtjs/tailwindcss": "^6.12.2",
"@nuxtjs/tailwindcss": "6.13.1",
"@pinia/nuxt": "0.9.0",
"@tauri-apps/api": "^2.1.1",
"@tauri-apps/cli": "^2.1.0",
"@tauri-apps/api": "^2.2.0",
"@tauri-apps/cli": "2.2.4",
"@tauri-apps/plugin-cli": "^2.2.0",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
"@tauri-apps/plugin-clipboard-manager": "2.2.0",
"@tauri-apps/plugin-fs": "^2.2.0",
"@tauri-apps/plugin-log": "^2.2.0",
"@tauri-apps/plugin-shell": "^2.2.0",
"@tauri-apps/plugin-window-state": "^2.2.0",
"@tauri-apps/plugin-dialog": "2.2.0",
"@types/lodash-es": "^4.17.12",
"@vitejs/plugin-vue-jsx": "^4.1.1",
"@vueuse/core": "12.2.0",
"@vueuse/core": "12.4.0",
"archiver": "^7.0.1",
"element-plus": "^2.9.1",
"less": "^4.2.0",
"element-plus": "2.9.3",
"less": "4.2.1",
"lodash-es": "^4.17.21",
"nuxt": "3.15.0",
"nuxt": "3.15.2",
"pinia": "^2.3.0",
"pinia-plugin-persistedstate": "^4.2.0",
"postcss": "^8.4.38",
"prettier": "^3.4.1",
"prettier-plugin-tailwindcss": "^0.6.9",
"prettier": "3.4.2",
"prettier-plugin-tailwindcss": "0.6.10",
"vue-clipboard3": "^2.0.0"
},
"dependencies": {
"@tauri-apps/plugin-dialog": "~2"
}
}
+33 -28
View File
@@ -1,9 +1,8 @@
<template>
<div class="flex h-full flex-col items-start overflow-auto px-[25px]">
<div><ElCheckbox v-model="mainStore.config.disableIpv6">不使用IPv6</ElCheckbox></div>
<div class="flex flex-nowrap items-center gap-[15px]">
<div class="flex flex-nowrap items-center gap-[5px]">
<ElCheckbox v-model="mainStore.config.enableCustomProtocol">自定义联机时使用的默认协议</ElCheckbox>
<ElCheckbox v-model="mainStore.config.enableCustomProtocol">默认直连(p2p)使用的协议</ElCheckbox>
<ElTooltip content="如果没有支持该协议的节点地址,程序会自动处理,请放心使用">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
@@ -24,29 +23,8 @@
</ElSelect>
</div>
</div>
<div class="flex flex-nowrap items-center gap-[15px]">
<ElCheckbox v-model="mainStore.config.saveErrorLog">输出日志到本地</ElCheckbox>
<div class="w-[140px]">
<ElSelect
size="small"
v-model="mainStore.config.logLevel"
placeholder="请选择日志等级"
class="ml-[5px]"
>
<ElOption
v-for="item in data"
:key="item"
:label="`level - ${item}`"
:value="item"
></ElOption>
</ElSelect>
</div>
<ElButton
@click="openLogDir"
size="small"
>
打开日志目录
</ElButton>
<div>
<ElCheckbox v-model="mainStore.config.relayAllPeerrpc">帮助对等节点建立直连(p2p)通信</ElCheckbox>
</div>
<div><ElCheckbox v-model="mainStore.config.connectAfterStart">软件启动后自动"启动联机"(搭配开机自启无感联机)</ElCheckbox></div>
<div class="flex flex-nowrap items-center gap-[15px]">
@@ -59,6 +37,13 @@
</ElButton>
</div>
<div><ElCheckbox v-model="mainStore.config.enablePreventSleep">防止系统休眠(比如:屏幕会一直亮着)</ElCheckbox></div>
<div class="flex flex-nowrap items-center gap-[5px]">
<ElCheckbox v-model="mainStore.config.latencyfirst">延迟优先模式将尝试使用最低延迟路径转发流量</ElCheckbox>
<ElTooltip content="视网络质量进行选择,可能会出现中转与直连(p2p)来回切换的情况">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
</div>
<div><ElCheckbox v-model="mainStore.config.disableIpv6">不使用IPv6</ElCheckbox></div>
<ElDivider />
<div class="flex items-center gap-[10px]">
<ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口只连接到对等节点</ElCheckbox>
@@ -210,10 +195,30 @@
<ElDivider />
<div><ElCheckbox v-model="mainStore.config.useSmoltcp">为子网代理启用smoltcp堆栈</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.latencyfirst">延迟优先模式,将尝试使用最低延迟路径转发流量</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.disableUdpHolePunching">禁用UDP打洞功能</ElCheckbox></div>
<div>
<ElCheckbox v-model="mainStore.config.relayAllPeerrpc">转发所有对等节点的RPC数据包,即使对等节点不在转发网络白名单内</ElCheckbox>
<div class="flex flex-nowrap items-center gap-[15px]">
<ElCheckbox v-model="mainStore.config.saveErrorLog">输出日志到本地</ElCheckbox>
<div class="w-[140px]">
<ElSelect
size="small"
v-model="mainStore.config.logLevel"
placeholder="请选择日志等级"
class="ml-[5px]"
>
<ElOption
v-for="item in data"
:key="item"
:label="`level - ${item}`"
:value="item"
></ElOption>
</ElSelect>
</div>
<ElButton
@click="openLogDir"
size="small"
>
打开日志目录
</ElButton>
</div>
</div>
</template>
+33 -24
View File
@@ -11,7 +11,12 @@
>
<template #label>
<div class="flex flex-nowrap items-center gap-[0_5px]">
<div>服务器</div>
<div class="flex flex-nowrap items-center gap-[5px]">
<div>服务器</div>
<ElTooltip content="服务器是什么协议,中转就是什么协议">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
</div>
<span>-</span>
<ElTag
effect="dark"
@@ -29,7 +34,7 @@
v-else
class="flex-1 truncate"
>
<ElTooltip :content="data.coreVersion">
<ElTooltip :content="`内核版本:${data.coreVersion}(不是软件的版本)`">
<ElTag type="info">
{{ data.coreVersion }}
</ElTag>
@@ -121,10 +126,10 @@
</ElFormItem>
<div class="flex flex-wrap items-center gap-[0_10px]">
<div class="flex-1">
<ElFormItem label="网络名">
<ElFormItem label="房间名">
<template #label>
<div class="flex items-center">
网络
房间
<ElTooltip content="对应命令行参数 --network-name">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
@@ -132,16 +137,16 @@
</template>
<ElInput
maxlength="100"
placeholder="请输入网络名"
placeholder="请输入房间名"
v-model="config.networkName"
></ElInput>
</ElFormItem>
</div>
<div class="flex-1">
<ElFormItem label="网络密码">
<ElFormItem label="房间密码">
<template #label>
<div class="flex items-center">
网络密码
房间密码
<ElTooltip content="对应命令行参数 --network-secret">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
@@ -150,7 +155,7 @@
<ElInput
show-password
maxlength="100"
placeholder="请输入网络密码"
placeholder="请输入房间密码"
v-model="config.networkPassword"
type="password"
></ElInput>
@@ -158,10 +163,10 @@
</div>
</div>
<div class="flex gap-[0_10px]">
<ElFormItem label="主机名">
<ElFormItem label="成员名">
<template #label>
<div class="flex items-center">
主机
成员
<ElTooltip content="对应命令行参数 --hostname">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
@@ -269,18 +274,18 @@
plain
></ElButton>
</ElTooltip>
<ElTooltip
<!-- <ElTooltip
placement="left"
content="成员"
>
content="房间信息"
> -->
<ElButton
class="!ml-[7px]"
@click="handleShowMemberDialog"
:icon="UserFilled"
plain
type="success"
size="small"
></ElButton>
</ElTooltip>
>房间信息</ElButton>
<!-- </ElTooltip> -->
</div>
</div>
<div class="ml-auto">
@@ -548,7 +553,7 @@
import { getMatches } from "@tauri-apps/plugin-cli";
import { initStartWinIpBroadcast } from "~/composables/netcard";
import useMainStore from "@/stores/index";
import { ElMessage, ElMessageBox } from "element-plus";
import { ElMessage, ElMessageBox, ElTooltip } from "element-plus";
import { getCurrentWindow, type Window } from "@tauri-apps/api/window";
import { getAllWebviewWindows, WebviewWindow } from "@tauri-apps/api/webviewWindow";
import etWindows from "@/composables/windows";
@@ -1049,7 +1054,6 @@
mountedShow(); // 不需要await
closePrevent();
data.hasNewVersion = await checkNewVersion();
});
onBeforeUnmount(() => {
@@ -1290,7 +1294,7 @@
disableUdpHolePunching,
relayAllPeerrpc,
compression,
enablePreventSleep,
enablePreventSleep
} = mainStore.config;
const WT = btoa(
encodeURIComponent(
@@ -1327,16 +1331,21 @@
)
);
await writeText(WT);
await ElConfirmPrimary(
`{action} 虚拟网IP,主机名,子网代理,为子网代理启用smoltcp堆栈,开机自启,软件启动自动联机,出口节点,不生成Tun网卡,错误日志相关配置`,
"提示",
{
confirmButtonText: "知道了",
showCancelButton: false,
action: "不会分享"
}
);
ElMessage.success("配置已复制");
} catch (err) {
console.error(err);
ElMessage.error("分享失败");
}
ElConfirmPrimary(`{action} 虚拟网IP,主机名,子网代理,为子网代理启用smoltcp堆栈,开机自启,软件启动自动联机,出口节点,不生成Tun网卡,错误日志相关配置`, "提示", {
confirmButtonText: "知道了",
showCancelButton: false,
action: "不会分享"
});
}
if (command === "import_config") {
importConfigData.data = "";
+1 -1
View File
@@ -16,7 +16,7 @@
<ElTableColumn
sortable
width="140"
label="主机名"
label="成员名"
prop="hostname"
>
<template #default="{ row }">
+11
View File
@@ -201,6 +201,13 @@
>
一键关闭防火墙
</ElButton>
<ElButton
@click="handleCustomFireWall"
type="danger"
size="small"
>
自定义防火墙策略
</ElButton>
</div>
<div class="mb-[10px]">
<ElText class="!mx-[10px]">域防火墙</ElText>
@@ -298,6 +305,10 @@
forceBindStart: false
});
const handleCustomFireWall = async () => {
await open("wf.msc");
}
const handleTabsChange = async (tabPaneName: TabPaneName) => {
if (tabPaneName === "netcard") {
// await initNetCardInfo();
+668 -415
View File
File diff suppressed because it is too large Load Diff
+954 -477
View File
File diff suppressed because it is too large Load Diff
+16 -15
View File
@@ -1,6 +1,6 @@
[package]
name = "easytier-game"
version = "1.3.5"
version = "1.3.7"
homepage = "https://github.com/EasyTier/EasyTier"
repository = "https://github.com/EasyTier/EasytierGame"
description = "A simple network initiator based on Easytier"
@@ -8,7 +8,7 @@ authors = ["leizi97"]
license = "LICENSE"
edition = "2021"
rust-version = "1.77.2"
# rust-version = "1.77.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -18,34 +18,35 @@ name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2.0.3", features = [] }
tauri-build = { version = "2.0.5", features = [] }
# prost-build = "0.13.2"
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
log = "0.4"
tauri = { version = "2.1.1", features = [
serde_json = "1.0.135"
serde = { version = "1.0.217", features = ["derive"] }
log = "0.4.25"
tauri = { version = "2.2.2", features = [
"tray-icon",
"image-png",
"image-ico",
"devtools"
] }
tauri-plugin-log = "2.2.0"
tauri-plugin-shell = "2.2.0"
reqwest = { version = "0.12", features = ["json"] }
zip = "2.2"
sysinfo = '0.32.0'
reqwest = { version = "0.12.12", features = ["json"] }
zip = "2.2.2"
sysinfo = '0.33.1'
planif = { git = "https://github.com/mattrobineau/planif", tag = "1.0.1" }
whoami = "1.5.2"
tauri-plugin-fs = "2.2.0"
tauri-plugin-clipboard-manager = "2.0.2"
tauri-plugin-clipboard-manager = "2.2.0"
rand = "0.8.5"
tokio = { version = "1.41.1", features = ["process"] }
tauri-plugin-dialog = "2"
tokio = { version = "1.43.0", features = ["process"] }
tauri-plugin-dialog = "2.2.0"
# prost = "0.13"
# prost-types = "0.13"
hashbrown = "0.15.2"
[dependencies.windows]
version = "0.58.0"
@@ -53,5 +54,5 @@ features = ["Win32_System_TaskScheduler", "Win32_System_Power", "Win32_NetworkMa
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-cli = "2.2.0"
tauri-plugin-single-instance = "2.2.0"
tauri-plugin-single-instance = "2.2.1"
tauri-plugin-window-state = "2.2.0"
+5
View File
@@ -74,6 +74,11 @@
"cmd": "explorer",
"name": "explorer"
},
{
"args": true,
"cmd": "wf.msc",
"name": "wf.msc"
},
{
"args": true,
"cmd": "netsh",
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -754,7 +754,7 @@ pub fn run() {
// }
#[cfg(not(target_os = "android"))]
let _tray_menu = TrayIconBuilder::with_id("main")
.menu_on_left_click(false)
.show_menu_on_left_click(false)
.on_tray_icon_event(|tray, event| {
if let TrayIconEvent::Click {
button: MouseButton::Left,
+4 -3
View File
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "easytier-game",
"version": "1.3.5",
"version": "1.3.7",
"identifier": "com.tauri.easytier-game",
"build": {
@@ -13,7 +13,7 @@
"app": {
"windows": [
{
"title": "easytier-game 1.3.5",
"title": "easytier-game 1.3.7",
"label": "main",
"minWidth": 340,
"width": 340,
@@ -63,7 +63,8 @@
"easytier/Packet.dll",
"easytier/wintun.dll",
"easytier/clear_local_data.bat",
"帮助.txt"
"帮助.txt",
"uninstall.exe"
],
"windows": {
"webviewInstallMode": {
Binary file not shown.
+10 -10
View File
@@ -14,28 +14,28 @@ const store = defineStore("main", {
connectAfterStart: false, //软件打开后,是否自动连接
disableIpv6: false, // 是否禁用IPv6
port: "11010", // 监听端口号
enableCustomListener: false, // 是否自定义监听
customListenerV6Data: "", //自定义ipv6监听
enableCustomListenerV6: false, // 是否自定义监听
customListenerData: "", // 自定义监听地址
enableCustomListener: true, // 是否自定义监听
customListenerV6Data: "udp://[::]:11010", //自定义ipv6监听
enableCustomListenerV6: true, // 是否自定义监听
customListenerData: "tcp://0.0.0.0:11010\nudp://0.0.0.0:11010\ntcp://[::]:11010", // 自定义监听地址
disbleListenner: false, // 是否禁用监听
disableEncryption: true, // 是否禁用加密
disableEncryption: false, // 是否禁用加密
multiThread: false, //使用多线程
enablExitNode: false, // 是否启用退出节点
noTun: false, // 是否使用TUN
latencyfirst: false, // 是否优先延迟
useSmoltcp: false, // 是否为子网代理启用smoltcp堆栈
disableUdpHolePunching: false, // 是否禁用UDP打洞
relayAllPeerrpc: false, // 是否启用所有对等RPC
relayAllPeerrpc: true, // 是否启用所有对等RPC
disbleP2p: false, // 是否使用P2P
dhcp: true, // 是否使用DHCP
saveErrorLog: true, // 是否保存错误日志
logLevel: "error", //日志等级
devName: false, //自定义网卡名
devNameValue: "", //自定义网卡名
enableCustomProtocol: false, //自定义默认协议
devName: true, //自定义网卡名
devNameValue: "etgame", //自定义网卡名
enableCustomProtocol: true, //自定义默认协议
customProtocol: "tcp", //自定义默认协议
enableNetCardMetric: false, //启用网卡自定义跃点
enableNetCardMetric: true, //启用网卡自定义跃点
netCardMetricValue: 1, //自定义网卡跃点值
enablePreventSleep: false, //组织系统休眠
compression: "none", //加密算法
+3 -3
View File
@@ -1,8 +1,8 @@
/** @type {import('tailwindcss').Config} */
/** @type {import('tailwindcss/plugin')} */
const plugin = require("tailwindcss/plugin");
module.exports = {
import plugin from "tailwindcss/plugin"
// const plugin = require("tailwindcss/plugin");
export default {
content: ["./components/**/*.{js,vue,ts}", "./layouts/**/*.vue", "./pages/**/*.vue", "./plugins/**/*.{js,ts}", "./app.vue", "./error.vue"],
theme: {
extend: {}
Binary file not shown.
+6 -4
View File
@@ -1,14 +1,15 @@
/**
* 生成 release 发布包 zip 文件
*/
const releaseDir = "./src-tauri/target/release";
const pkg = require("./package.json");
const isWin7 = process.argv[2] == 'win7';
const releaseDir = isWin7 ? "./src-tauri/target/x86_64-win7-windows-msvc/release" : "./src-tauri/target/release";
const fileName = isWin7 ? `easytier-game_windows7_fix_${pkg.version}.zip` : `easytier-game_windows_x86_64_${pkg.version}.zip`; // 发布包格式
const releaseDirEasytier = `${releaseDir}/easytier/`;
const releaseExe = `${releaseDir}/easytier-game.exe`;
const releaseHelp = `${releaseDir}/帮助.txt`;
const releaseUninstall = `${releaseDir}/uninstall.exe`;
const deleteEasytierFiles = ["logs/", "guiLogs/", "cache/"];
const pkg = require("./package.json");
const fileName = `easytier-game_windows_x86_64_${pkg.version}.zip`; // 发布包格式
const releaseZipDir = "./release";
const releaseZip = `${releaseZipDir}/${fileName}`;
@@ -62,5 +63,6 @@ archive.pipe(output);
archive
.append(fs.createReadStream(path.join(__dirname, releaseExe)), { name: "easytier-game.exe" })
.append(fs.createReadStream(path.join(__dirname, releaseHelp)), { name: "帮助.txt" })
.append(fs.createReadStream(path.join(__dirname, releaseUninstall)), { name: "uninstall.exe" })
.directory(path.join(__dirname, releaseDirEasytier), "easytier")
.finalize();