Compare commits

..
4 Commits
14 changed files with 154 additions and 18 deletions
+3 -3
View File
@@ -1,12 +1,12 @@
pnpm run build
@REM rustup default nightly
rustup default nightly
@REM rem 使用rust nightly构建支持win7的版本,请先将根目录的windows.0.48.5 放入以下目录
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x64
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\lib\x86
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x64
@REM rem C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\你自己的版本\atlmfc\lib\x86
@REM pnpm tauri build -- -Z build-std --target x86_64-win7-windows-msvc
pnpm tauri build -- -Z build-std --target x86_64-win7-windows-msvc
rustup default stable
pnpm tauri build
pnpm run release
@REM pnpm run release-win7
pnpm run release-win7
+3
View File
@@ -20,5 +20,8 @@ export const getServerArgs = () => {
if (!whiteList && mainStore.serverConfig.enableWhiteList) {
args.push("--relay-network-whitelist");
}
if (mainStore.serverConfig.privateMode) {
args.push("--private-mode", "true");
}
return args;
};
+1 -1
View File
@@ -3,7 +3,7 @@
"private": true,
"author": "leizi97",
"description": "A simple network initiator based on Easytier",
"version": "1.4.5",
"version": "1.4.6",
"scripts": {
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
"build": "nuxt generate --dotenv env/.env.prod",
+7
View File
@@ -66,6 +66,13 @@
</ElTooltip>
<CoreVersionWarning version="2.3.0" />
</div>
<div class="flex flex-nowrap items-center gap-[5px]">
<ElCheckbox v-model="mainStore.config.privateMode">启用私有模式</ElCheckbox>
<ElTooltip content="启用后,不允许使用了与本网络不同的房间名和密码的节点通过本节点进行握手或中转">
<ElIcon><QuestionFilled /></ElIcon>
</ElTooltip>
<CoreVersionWarning version="2.3.1" />
</div>
<ElDivider />
<div class="flex items-center gap-[10px]">
<ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口只连接到对等节点</ElCheckbox>
+21 -8
View File
@@ -1412,7 +1412,7 @@
args.push("--proxy-forward-by-system");
}
if (mainStore.config.acceptDNS) {
args.push("--accept-dns");
args.push("--accept-dns", "true");
}
if (mainStore.config.enablePortForward) {
let formatPortForward = mainStore.config.portForwardData.trim().split("\n");
@@ -1423,6 +1423,9 @@
});
}
}
if(mainStore.config.privateMode) {
args.push("--private-mode", "true");
}
return args;
};
@@ -1531,7 +1534,8 @@
compression,
enablePreventSleep,
enableKcpProxy,
disableKcpInput
disableKcpInput,
privateMode
} = mainStore.config;
const WT = btoa(
encodeURIComponent(
@@ -1564,7 +1568,8 @@
compression,
enablePreventSleep,
enableKcpProxy,
disableKcpInput
disableKcpInput,
privateMode
}
})
)
@@ -1923,14 +1928,22 @@
const storageDialog = async () => {
await etWindows("storage-listener", {
title: "自建服务器",
minWidth: 1,
minHeight: 1,
width: 1,
height: 1,
minWidth: 0,
minHeight: 0,
width: 0,
height: 0,
x: 9999,
y: 9999,
resizable: false,
transparent: true,
hiddenTitle: true,
alwaysOnBottom: true,
url: "#/storage-listener"
});
},
(dialog) => {
dialog.hide();
},
);
};
</script>
+101
View File
@@ -48,6 +48,8 @@
width="120"
prop="ipv4"
label="虚拟网IP"
:sort-method="sortIpv4"
:sort-orders="['ascending', 'descending', null]"
></ElTableColumn>
<ElTableColumn
sortable
@@ -98,11 +100,15 @@
width="90"
prop="rx_bytes"
label="接收"
:sort-method="sortBytes"
:sort-orders="['ascending', 'descending', null]"
></ElTableColumn>
<ElTableColumn
sortable
prop="tx_bytes"
label="传输"
:sort-method="(a, b) => sortBytes(a, b, 'tx_bytes')"
:sort-orders="['ascending', 'descending', null]"
></ElTableColumn>
</ElTable>
</div>
@@ -173,6 +179,101 @@
return valueA - valueB;
};
// IP地址排序函数
const sortIpv4 = (a: any, b: any): number => {
const ipToNumber = (ip: string): number => {
if (!ip || ip === "-" || ip === "") {
return 0;
}
// 处理可能包含端口号或子网掩码的情况
const cleanIp = ip.split("/")[0].split(":")[0];
const parts = cleanIp.split(".");
if (parts.length !== 4) {
return 0;
}
try {
const nums = parts.map(part => {
const num = parseInt(part, 10);
return isNaN(num) || num < 0 || num > 255 ? 0 : num;
});
// 将IP地址转换为32位数字进行比较
return (nums[0] << 24) + (nums[1] << 16) + (nums[2] << 8) + nums[3];
} catch {
return 0;
}
};
const numA = ipToNumber(a.ipv4);
const numB = ipToNumber(b.ipv4);
return numA - numB;
};
// 字节数据排序函数
const sortBytes = (a: any, b: any, field: string = 'rx_bytes'): number => {
const parseBytes = (bytesStr: string): number => {
if (!bytesStr || bytesStr === "-" || bytesStr === "") {
return 0;
}
// 统一转换为小写并去除空格
const cleanStr = bytesStr.toLowerCase().trim();
// 使用正则表达式匹配数字和单位
const match = cleanStr.match(/^(\d+(?:\.\d+)?)\s*([a-z]*)$/);
if (!match) {
return 0;
}
const value = parseFloat(match[1]);
const unit = match[2];
if (isNaN(value)) {
return 0;
}
// 根据单位转换为字节数
switch (unit) {
case 'b':
case 'byte':
case 'bytes':
case '':
return value;
case 'k':
case 'kb':
case 'kib':
return value * 1024;
case 'm':
case 'mb':
case 'mib':
return value * 1024 * 1024;
case 'g':
case 'gb':
case 'gib':
return value * 1024 * 1024 * 1024;
case 't':
case 'tb':
case 'tib':
return value * 1024 * 1024 * 1024 * 1024;
case 'p':
case 'pb':
case 'pib':
return value * 1024 * 1024 * 1024 * 1024 * 1024;
default:
return value; // 未知单位当作字节处理
}
};
const bytesA = parseBytes(a[field]);
const bytesB = parseBytes(b[field]);
return bytesA - bytesB;
};
// 格式化延迟显示
const formatLatency = (latMs: any): string => {
if (latMs === null || latMs === undefined || latMs === "") {
+6
View File
@@ -27,6 +27,12 @@
>
<ElCheckbox v-model="mainStore.serverConfig.autoStart">自动启动</ElCheckbox>
</ElTooltip>
<ElTooltip
placement="top"
content="启用后,不允许使用了与本网络不同的房间名和密码的节点通过本节点进行握手或中转"
>
<ElCheckbox v-model="mainStore.serverConfig.privateMode">私有模式</ElCheckbox>
</ElTooltip>
<ElTooltip
placement="top"
content="帮助其他虚拟网建立P2P链接"
+1 -1
View File
@@ -1253,7 +1253,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "easytier-game"
version = "1.4.5"
version = "1.4.6"
dependencies = [
"hashbrown 0.15.2",
"log",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "easytier-game"
version = "1.4.5"
version = "1.4.6"
homepage = "https://github.com/EasyTier/EasyTier"
repository = "https://github.com/EasyTier/EasytierGame"
description = "A simple network initiator based on Easytier"
+2 -1
View File
@@ -36,5 +36,6 @@
"enablePreventSleep": false, // 启用防止睡眠
"compression": "none", // 压缩算法
"enableKcpProxy": true, // 启用kcp代理
"disableKcpInput": false // 禁用kcp输入
"disableKcpInput": false, // 禁用kcp输入
"privateMode": false // 启用私有模式
}
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "easytier-game",
"version": "1.4.5",
"version": "1.4.6",
"identifier": "com.tauri.easytier-game",
"build": {
@@ -12,7 +12,7 @@
"app": {
"windows": [
{
"title": "easytier-game 1.4.5",
"title": "easytier-game 1.4.6",
"label": "main",
"minWidth": 340,
"width": 340,
+6 -1
View File
@@ -46,6 +46,7 @@ const store = defineStore("main", {
disableKcpInput: false, //禁用kcp输入
bindDeviceEnable: false, //是否绑定设备
acceptDNS: false, //魔法dns
privateMode: false, //是否启用私有模式
enablePortForward: false, //是否启用端口转发
portForwardData: "", //端口转发数据
@@ -56,7 +57,8 @@ const store = defineStore("main", {
serverWhiteList: "", // 服务器流量转发白名单
// enableListener: true, // 是否启用监听
autoStart: false, //随软件自启
port: "11010" // 服务器端口
port: "11010", // 服务器端口
privateMode: false, //是否启用私有模式
},
cidrEnable: false,
proxyForwardBySystem: false, // 是否通过系统内核转发子网代理数据包,禁用内置NAT
@@ -133,12 +135,15 @@ const store = defineStore("main", {
"config.acceptDNS",
"config.privateMode",
"serverConfig.autoStart",
// 'serverConfig.enableListener',
"serverConfig.enableWhiteList",
"serverConfig.relayAllPeerrpc",
"serverConfig.serverWhiteList",
"serverConfig.port",
"serverConfig.privateMode",
"cidrEnable",
"proxyForwardBySystem",