From d19e3470ce8fa157850f5e776c8ff0b4ef54d93a Mon Sep 17 00:00:00 2001 From: snltty <1069410172@qq.com> Date: Sat, 1 Mar 2025 00:13:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8ICS=E7=9A=84NAT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linker.sln | 2 +- {linker.app => src/linker.app}/App.xaml | 0 {linker.app => src/linker.app}/App.xaml.cs | 0 {linker.app => src/linker.app}/AppShell.xaml | 0 .../linker.app}/AppShell.xaml.cs | 0 {linker.app => src/linker.app}/MainPage.xaml | 0 .../linker.app}/MainPage.xaml.cs | 0 {linker.app => src/linker.app}/MauiProgram.cs | 0 .../Platforms/Android/AndroidManifest.xml | 0 .../Platforms/Android/MainActivity.cs | 0 .../Platforms/Android/MainApplication.cs | 0 .../Android/Resources/values/colors.xml | 0 .../Platforms/MacCatalyst/AppDelegate.cs | 0 .../Platforms/MacCatalyst/Entitlements.plist | 0 .../Platforms/MacCatalyst/Info.plist | 0 .../Platforms/MacCatalyst/Program.cs | 0 .../linker.app}/Platforms/Tizen/Main.cs | 0 .../Platforms/Tizen/tizen-manifest.xml | 0 .../linker.app}/Platforms/Windows/App.xaml | 0 .../linker.app}/Platforms/Windows/App.xaml.cs | 0 .../Platforms/Windows/Package.appxmanifest | 0 .../Platforms/Windows/app.manifest | 0 .../linker.app}/Platforms/iOS/AppDelegate.cs | 0 .../linker.app}/Platforms/iOS/Info.plist | 0 .../linker.app}/Platforms/iOS/Program.cs | 0 .../Properties/launchSettings.json | 0 .../linker.app}/Resources/AppIcon/appicon.svg | 0 .../Resources/AppIcon/appiconfg.svg | 0 .../Resources/Fonts/OpenSans-Regular.ttf | Bin .../Resources/Fonts/OpenSans-Semibold.ttf | Bin .../Resources/Images/dotnet_bot.png | Bin .../linker.app}/Resources/Raw/AboutAssets.txt | 0 .../linker.app}/Resources/Splash/splash.svg | 0 .../linker.app}/Resources/Styles/Colors.xaml | 0 .../linker.app}/Resources/Styles/Styles.xaml | 0 .../linker.app}/linker.app.csproj | 0 .../linker.app}/linker.app.csproj.user | 0 src/linker.doc.web/docs/1、首页.md | 2 + .../2、首次运行/2.3、安装方法(openwrt).md | 1 + .../4、通信功能/4.1、虚拟网卡/1.1.2、RRAS.md | 13 +- .../4、通信功能/4.1、虚拟网卡/1.1.3、ICS.md | 12 ++ .../4、通信功能/4.1、虚拟网卡/1.2、网对网.md | 2 +- .../4、通信功能/4.1、虚拟网卡/img/ics1.png | Bin 0 -> 46589 bytes src/linker.ics/Program.cs | 115 ++++++++++++++++++ src/linker.ics/Properties/AssemblyInfo.cs | 36 ++++++ src/linker.ics/linker.ics.csproj | 47 +++++++ .../TuntapPingTransfer.cs | 2 +- src/linker.tray.win/default.aproj | 2 +- version.txt | 2 +- 49 files changed, 220 insertions(+), 16 deletions(-) rename {linker.app => src/linker.app}/App.xaml (100%) rename {linker.app => src/linker.app}/App.xaml.cs (100%) rename {linker.app => src/linker.app}/AppShell.xaml (100%) rename {linker.app => src/linker.app}/AppShell.xaml.cs (100%) rename {linker.app => src/linker.app}/MainPage.xaml (100%) rename {linker.app => src/linker.app}/MainPage.xaml.cs (100%) rename {linker.app => src/linker.app}/MauiProgram.cs (100%) rename {linker.app => src/linker.app}/Platforms/Android/AndroidManifest.xml (100%) rename {linker.app => src/linker.app}/Platforms/Android/MainActivity.cs (100%) rename {linker.app => src/linker.app}/Platforms/Android/MainApplication.cs (100%) rename {linker.app => src/linker.app}/Platforms/Android/Resources/values/colors.xml (100%) rename {linker.app => src/linker.app}/Platforms/MacCatalyst/AppDelegate.cs (100%) rename {linker.app => src/linker.app}/Platforms/MacCatalyst/Entitlements.plist (100%) rename {linker.app => src/linker.app}/Platforms/MacCatalyst/Info.plist (100%) rename {linker.app => src/linker.app}/Platforms/MacCatalyst/Program.cs (100%) rename {linker.app => src/linker.app}/Platforms/Tizen/Main.cs (100%) rename {linker.app => src/linker.app}/Platforms/Tizen/tizen-manifest.xml (100%) rename {linker.app => src/linker.app}/Platforms/Windows/App.xaml (100%) rename {linker.app => src/linker.app}/Platforms/Windows/App.xaml.cs (100%) rename {linker.app => src/linker.app}/Platforms/Windows/Package.appxmanifest (100%) rename {linker.app => src/linker.app}/Platforms/Windows/app.manifest (100%) rename {linker.app => src/linker.app}/Platforms/iOS/AppDelegate.cs (100%) rename {linker.app => src/linker.app}/Platforms/iOS/Info.plist (100%) rename {linker.app => src/linker.app}/Platforms/iOS/Program.cs (100%) rename {linker.app => src/linker.app}/Properties/launchSettings.json (100%) rename {linker.app => src/linker.app}/Resources/AppIcon/appicon.svg (100%) rename {linker.app => src/linker.app}/Resources/AppIcon/appiconfg.svg (100%) rename {linker.app => src/linker.app}/Resources/Fonts/OpenSans-Regular.ttf (100%) rename {linker.app => src/linker.app}/Resources/Fonts/OpenSans-Semibold.ttf (100%) rename {linker.app => src/linker.app}/Resources/Images/dotnet_bot.png (100%) rename {linker.app => src/linker.app}/Resources/Raw/AboutAssets.txt (100%) rename {linker.app => src/linker.app}/Resources/Splash/splash.svg (100%) rename {linker.app => src/linker.app}/Resources/Styles/Colors.xaml (100%) rename {linker.app => src/linker.app}/Resources/Styles/Styles.xaml (100%) rename {linker.app => src/linker.app}/linker.app.csproj (100%) rename {linker.app => src/linker.app}/linker.app.csproj.user (100%) create mode 100644 src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.3、ICS.md create mode 100644 src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/img/ics1.png create mode 100644 src/linker.ics/Program.cs create mode 100644 src/linker.ics/Properties/AssemblyInfo.cs create mode 100644 src/linker.ics/linker.ics.csproj diff --git a/linker.sln b/linker.sln index 4fe945fa..ab353292 100644 --- a/linker.sln +++ b/linker.sln @@ -59,7 +59,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.tuntap", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.serializer.aot", "src\linker.messenger.serializer.aot\linker.messenger.serializer.aot.csproj", "{0538DDF8-346F-48DE-84DF-AEF3EEBE03EA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.app", "linker.app\linker.app.csproj", "{60FFFE21-C8F2-4B3A-BB49-7FA2AE31C2B0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.app", "src\linker.app\linker.app.csproj", "{60FFFE21-C8F2-4B3A-BB49-7FA2AE31C2B0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/linker.app/App.xaml b/src/linker.app/App.xaml similarity index 100% rename from linker.app/App.xaml rename to src/linker.app/App.xaml diff --git a/linker.app/App.xaml.cs b/src/linker.app/App.xaml.cs similarity index 100% rename from linker.app/App.xaml.cs rename to src/linker.app/App.xaml.cs diff --git a/linker.app/AppShell.xaml b/src/linker.app/AppShell.xaml similarity index 100% rename from linker.app/AppShell.xaml rename to src/linker.app/AppShell.xaml diff --git a/linker.app/AppShell.xaml.cs b/src/linker.app/AppShell.xaml.cs similarity index 100% rename from linker.app/AppShell.xaml.cs rename to src/linker.app/AppShell.xaml.cs diff --git a/linker.app/MainPage.xaml b/src/linker.app/MainPage.xaml similarity index 100% rename from linker.app/MainPage.xaml rename to src/linker.app/MainPage.xaml diff --git a/linker.app/MainPage.xaml.cs b/src/linker.app/MainPage.xaml.cs similarity index 100% rename from linker.app/MainPage.xaml.cs rename to src/linker.app/MainPage.xaml.cs diff --git a/linker.app/MauiProgram.cs b/src/linker.app/MauiProgram.cs similarity index 100% rename from linker.app/MauiProgram.cs rename to src/linker.app/MauiProgram.cs diff --git a/linker.app/Platforms/Android/AndroidManifest.xml b/src/linker.app/Platforms/Android/AndroidManifest.xml similarity index 100% rename from linker.app/Platforms/Android/AndroidManifest.xml rename to src/linker.app/Platforms/Android/AndroidManifest.xml diff --git a/linker.app/Platforms/Android/MainActivity.cs b/src/linker.app/Platforms/Android/MainActivity.cs similarity index 100% rename from linker.app/Platforms/Android/MainActivity.cs rename to src/linker.app/Platforms/Android/MainActivity.cs diff --git a/linker.app/Platforms/Android/MainApplication.cs b/src/linker.app/Platforms/Android/MainApplication.cs similarity index 100% rename from linker.app/Platforms/Android/MainApplication.cs rename to src/linker.app/Platforms/Android/MainApplication.cs diff --git a/linker.app/Platforms/Android/Resources/values/colors.xml b/src/linker.app/Platforms/Android/Resources/values/colors.xml similarity index 100% rename from linker.app/Platforms/Android/Resources/values/colors.xml rename to src/linker.app/Platforms/Android/Resources/values/colors.xml diff --git a/linker.app/Platforms/MacCatalyst/AppDelegate.cs b/src/linker.app/Platforms/MacCatalyst/AppDelegate.cs similarity index 100% rename from linker.app/Platforms/MacCatalyst/AppDelegate.cs rename to src/linker.app/Platforms/MacCatalyst/AppDelegate.cs diff --git a/linker.app/Platforms/MacCatalyst/Entitlements.plist b/src/linker.app/Platforms/MacCatalyst/Entitlements.plist similarity index 100% rename from linker.app/Platforms/MacCatalyst/Entitlements.plist rename to src/linker.app/Platforms/MacCatalyst/Entitlements.plist diff --git a/linker.app/Platforms/MacCatalyst/Info.plist b/src/linker.app/Platforms/MacCatalyst/Info.plist similarity index 100% rename from linker.app/Platforms/MacCatalyst/Info.plist rename to src/linker.app/Platforms/MacCatalyst/Info.plist diff --git a/linker.app/Platforms/MacCatalyst/Program.cs b/src/linker.app/Platforms/MacCatalyst/Program.cs similarity index 100% rename from linker.app/Platforms/MacCatalyst/Program.cs rename to src/linker.app/Platforms/MacCatalyst/Program.cs diff --git a/linker.app/Platforms/Tizen/Main.cs b/src/linker.app/Platforms/Tizen/Main.cs similarity index 100% rename from linker.app/Platforms/Tizen/Main.cs rename to src/linker.app/Platforms/Tizen/Main.cs diff --git a/linker.app/Platforms/Tizen/tizen-manifest.xml b/src/linker.app/Platforms/Tizen/tizen-manifest.xml similarity index 100% rename from linker.app/Platforms/Tizen/tizen-manifest.xml rename to src/linker.app/Platforms/Tizen/tizen-manifest.xml diff --git a/linker.app/Platforms/Windows/App.xaml b/src/linker.app/Platforms/Windows/App.xaml similarity index 100% rename from linker.app/Platforms/Windows/App.xaml rename to src/linker.app/Platforms/Windows/App.xaml diff --git a/linker.app/Platforms/Windows/App.xaml.cs b/src/linker.app/Platforms/Windows/App.xaml.cs similarity index 100% rename from linker.app/Platforms/Windows/App.xaml.cs rename to src/linker.app/Platforms/Windows/App.xaml.cs diff --git a/linker.app/Platforms/Windows/Package.appxmanifest b/src/linker.app/Platforms/Windows/Package.appxmanifest similarity index 100% rename from linker.app/Platforms/Windows/Package.appxmanifest rename to src/linker.app/Platforms/Windows/Package.appxmanifest diff --git a/linker.app/Platforms/Windows/app.manifest b/src/linker.app/Platforms/Windows/app.manifest similarity index 100% rename from linker.app/Platforms/Windows/app.manifest rename to src/linker.app/Platforms/Windows/app.manifest diff --git a/linker.app/Platforms/iOS/AppDelegate.cs b/src/linker.app/Platforms/iOS/AppDelegate.cs similarity index 100% rename from linker.app/Platforms/iOS/AppDelegate.cs rename to src/linker.app/Platforms/iOS/AppDelegate.cs diff --git a/linker.app/Platforms/iOS/Info.plist b/src/linker.app/Platforms/iOS/Info.plist similarity index 100% rename from linker.app/Platforms/iOS/Info.plist rename to src/linker.app/Platforms/iOS/Info.plist diff --git a/linker.app/Platforms/iOS/Program.cs b/src/linker.app/Platforms/iOS/Program.cs similarity index 100% rename from linker.app/Platforms/iOS/Program.cs rename to src/linker.app/Platforms/iOS/Program.cs diff --git a/linker.app/Properties/launchSettings.json b/src/linker.app/Properties/launchSettings.json similarity index 100% rename from linker.app/Properties/launchSettings.json rename to src/linker.app/Properties/launchSettings.json diff --git a/linker.app/Resources/AppIcon/appicon.svg b/src/linker.app/Resources/AppIcon/appicon.svg similarity index 100% rename from linker.app/Resources/AppIcon/appicon.svg rename to src/linker.app/Resources/AppIcon/appicon.svg diff --git a/linker.app/Resources/AppIcon/appiconfg.svg b/src/linker.app/Resources/AppIcon/appiconfg.svg similarity index 100% rename from linker.app/Resources/AppIcon/appiconfg.svg rename to src/linker.app/Resources/AppIcon/appiconfg.svg diff --git a/linker.app/Resources/Fonts/OpenSans-Regular.ttf b/src/linker.app/Resources/Fonts/OpenSans-Regular.ttf similarity index 100% rename from linker.app/Resources/Fonts/OpenSans-Regular.ttf rename to src/linker.app/Resources/Fonts/OpenSans-Regular.ttf diff --git a/linker.app/Resources/Fonts/OpenSans-Semibold.ttf b/src/linker.app/Resources/Fonts/OpenSans-Semibold.ttf similarity index 100% rename from linker.app/Resources/Fonts/OpenSans-Semibold.ttf rename to src/linker.app/Resources/Fonts/OpenSans-Semibold.ttf diff --git a/linker.app/Resources/Images/dotnet_bot.png b/src/linker.app/Resources/Images/dotnet_bot.png similarity index 100% rename from linker.app/Resources/Images/dotnet_bot.png rename to src/linker.app/Resources/Images/dotnet_bot.png diff --git a/linker.app/Resources/Raw/AboutAssets.txt b/src/linker.app/Resources/Raw/AboutAssets.txt similarity index 100% rename from linker.app/Resources/Raw/AboutAssets.txt rename to src/linker.app/Resources/Raw/AboutAssets.txt diff --git a/linker.app/Resources/Splash/splash.svg b/src/linker.app/Resources/Splash/splash.svg similarity index 100% rename from linker.app/Resources/Splash/splash.svg rename to src/linker.app/Resources/Splash/splash.svg diff --git a/linker.app/Resources/Styles/Colors.xaml b/src/linker.app/Resources/Styles/Colors.xaml similarity index 100% rename from linker.app/Resources/Styles/Colors.xaml rename to src/linker.app/Resources/Styles/Colors.xaml diff --git a/linker.app/Resources/Styles/Styles.xaml b/src/linker.app/Resources/Styles/Styles.xaml similarity index 100% rename from linker.app/Resources/Styles/Styles.xaml rename to src/linker.app/Resources/Styles/Styles.xaml diff --git a/linker.app/linker.app.csproj b/src/linker.app/linker.app.csproj similarity index 100% rename from linker.app/linker.app.csproj rename to src/linker.app/linker.app.csproj diff --git a/linker.app/linker.app.csproj.user b/src/linker.app/linker.app.csproj.user similarity index 100% rename from linker.app/linker.app.csproj.user rename to src/linker.app/linker.app.csproj.user diff --git a/src/linker.doc.web/docs/1、首页.md b/src/linker.doc.web/docs/1、首页.md index e7100d3d..878c64ad 100644 --- a/src/linker.doc.web/docs/1、首页.md +++ b/src/linker.doc.web/docs/1、首页.md @@ -60,5 +60,7 @@ sidebar_position: 1 1. win7 或 win8 可能需要安装一些环境,才能运行 2. Microsoft Visual C++ 2015-2019 Redistributable 3. KB3063858 +4. KB3033929 + ::: diff --git a/src/linker.doc.web/docs/2、首次运行/2.3、安装方法(openwrt).md b/src/linker.doc.web/docs/2、首次运行/2.3、安装方法(openwrt).md index 2c3d649e..40102afb 100644 --- a/src/linker.doc.web/docs/2、首次运行/2.3、安装方法(openwrt).md +++ b/src/linker.doc.web/docs/2、首次运行/2.3、安装方法(openwrt).md @@ -7,4 +7,5 @@ sidebar_position: 2 1. 在 `System(系统)`、`Software(软件包)`、`Update Package(更新列表)`先更新一下 2. 下载对应架构的ipk文件,在`System(系统)`、`Software(软件包)`、`Upload Package(上传软件包)`上传ipk文件安装 3. 如果ui无法安装,或者安装失败,可以尝试使用命令安装,`opkg install --force-overwrite linker-xxx.ipk` 强制安装 +4. 需要 `zlib`,`bash`,`iptables`,`kmod-tun`,`ip-full`,`kmod-ipt-nat`,`libstdcpp`,`libopenssl`,`libopenssl-legacy` ::: \ No newline at end of file diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、RRAS.md b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、RRAS.md index da39e2c3..6012aeff 100644 --- a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、RRAS.md +++ b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.2、RRAS.md @@ -4,15 +4,9 @@ sidebar_position: 4 # 1.1.2、RRAS -:::danger[说明] -1. 操作不当可能会导致网络无法访问,请谨慎操作,最好先创建还原点 -2. 有局限性,创建虚拟网卡后,需要重新`“配置并启用路由和远程访问”` -::: - :::tip[说明] - -1. 在windows server中,你可以选择使用RRAS(Routing and Remote Access Service) 来启用NAT,从而实现点对网 -::: +1. 操作不当可能会导致网络无法访问,请谨慎操作 +2. 有局限性,创建虚拟网卡后,需要重新`“配置并启用路由和远程访问”` ![](./img/rras1.png) ![](./img/rras2.png) @@ -27,7 +21,4 @@ sidebar_position: 4 ![](./img/rras11.png) ![](./img/rras12.png) ![](./img/rras13.png) - -:::danger[说明] -所有步骤已经结束了,没有其它操作 ::: \ No newline at end of file diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.3、ICS.md b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.3、ICS.md new file mode 100644 index 00000000..ae140ed8 --- /dev/null +++ b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.1.3、ICS.md @@ -0,0 +1,12 @@ +--- +sidebar_position: 5 +--- + +# 1.1.3、ICS + +:::tip[说明] +1. 操作不当可能会导致网络无法访问,请谨慎操作 + +![](./img/ics1.png) + +::: \ No newline at end of file diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.2、网对网.md b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.2、网对网.md index bbd982cd..1058b477 100644 --- a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.2、网对网.md +++ b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/1.2、网对网.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 6 --- # 1.2、网对网 diff --git a/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/img/ics1.png b/src/linker.doc.web/docs/4、通信功能/4.1、虚拟网卡/img/ics1.png new file mode 100644 index 0000000000000000000000000000000000000000..fe684f21795ff78fc19897794d9b56538d3eef2a GIT binary patch literal 46589 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 literal 0 HcmV?d00001 diff --git a/src/linker.ics/Program.cs b/src/linker.ics/Program.cs new file mode 100644 index 00000000..cad114ee --- /dev/null +++ b/src/linker.ics/Program.cs @@ -0,0 +1,115 @@ +using NETCONLib; +using System; +using System.Text; + +namespace linker.ics +{ + internal class Program + { + static void Main(string[] args) + { + string pulicName = args[0]; + string privateName = args[1]; + string type = args[2]; + StringBuilder sb = new StringBuilder(); + + GetConnections(pulicName, privateName, out INetSharingConfiguration publicCon, out INetSharingConfiguration privateCon); + if (publicCon == null) + { + sb.Append($"{pulicName} public device not found!"); + return; + } + else if (privateCon == null) + { + sb.Append($"{privateName} private device not found!"); + return; + } + else if (type == "enable") + { + try + { + publicCon.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PUBLIC); + } + catch (Exception ex) + { + sb.Append($"{ex.Message},may need to be reboot system"); + } + try + { + privateCon.EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PRIVATE); + } + catch (Exception ex) + { + sb.Append($"{ex.Message},may need to be reboot system"); + } + } + else if (type == "disable") + { + try + { + publicCon.DisableSharing(); + } + catch (Exception ex) + { + sb.Append($"{ex.Message},may need to be reboot system"); + } + try + { + privateCon.DisableSharing(); + } + catch (Exception ex) + { + sb.Append($"{ex.Message},may need to be reboot system"); + } + } + else + { + sb.Append($"{type} command invalid"); + } + + string result = sb.ToString(); + if (string.IsNullOrEmpty(result)) + { + Console.WriteLine($"{type} success"); + } + else + { + Console.WriteLine(result); + } + } + + static void GetConnections(string publicName, string privateName, out INetSharingConfiguration publicCon, out INetSharingConfiguration privateCon) + { + publicCon = null; + privateCon = null; + + try + { + INetSharingManager netSharingManager = new NetSharingManager(); + + foreach (INetConnection connection in netSharingManager.EnumEveryConnection) + { + INetConnectionProps props = netSharingManager.NetConnectionProps[connection]; + INetSharingConfiguration sharingConfig = netSharingManager.INetSharingConfigurationForINetConnection[connection]; + try + { + if (props.Name == publicName) + { + publicCon = sharingConfig; + } + if (props.Name == privateName) + { + privateCon = sharingConfig; + } + } + catch (Exception) + { + } + } + } + catch (Exception) + { + } + } + } +} diff --git a/src/linker.ics/Properties/AssemblyInfo.cs b/src/linker.ics/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..9e8a443a --- /dev/null +++ b/src/linker.ics/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("linker.ics")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("linker.ics")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("bbe91688-7734-4bef-b957-54f8c17f47ce")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/linker.ics/linker.ics.csproj b/src/linker.ics/linker.ics.csproj new file mode 100644 index 00000000..f4e6aea1 --- /dev/null +++ b/src/linker.ics/linker.ics.csproj @@ -0,0 +1,47 @@ + + + + + Debug + AnyCPU + {BBE91688-7734-4BEF-B957-54F8C17F47CE} + Exe + linker.ics + linker.ics + v3.5 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/linker.messenger.tuntap/TuntapPingTransfer.cs b/src/linker.messenger.tuntap/TuntapPingTransfer.cs index 0f959d9e..e57786c5 100644 --- a/src/linker.messenger.tuntap/TuntapPingTransfer.cs +++ b/src/linker.messenger.tuntap/TuntapPingTransfer.cs @@ -37,7 +37,7 @@ namespace linker.messenger.tuntap { TimerHelper.SetInterval(async () => { - if (tuntapTransfer.Status == TuntapStatus.Running && lastTicksManager.DiffLessEqual(5000)) + if (tuntapTransfer.Status == TuntapStatus.Running) { await Ping(); } diff --git a/src/linker.tray.win/default.aproj b/src/linker.tray.win/default.aproj index 4fde1c84..3836ce3f 100644 --- a/src/linker.tray.win/default.aproj +++ b/src/linker.tray.win/default.aproj @@ -1,5 +1,5 @@  - + diff --git a/version.txt b/version.txt index dc62c793..a3af0361 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ v1.6.9 -2025-02-27 15:04:12 +2025-03-01 00:13:17 1. 修复litedb抢锁超时导致客户端登录失败问题 2. 同步信标服务器 3. 其它一些修复优化 \ No newline at end of file