重写网卡

This commit is contained in:
snltty
2024-08-05 14:59:34 +08:00
parent 161ea8ca43
commit 9391569451
5 changed files with 51 additions and 7 deletions

View File

@@ -1,4 +1,5 @@
using System.Diagnostics;
using System;
using System.Diagnostics;
using System.IO;
namespace linker.libs
@@ -11,6 +12,7 @@ namespace linker.libs
}
public static string PowerShell(string arg, string[] commands, bool readResult = true)
{
if (IsPowerShellInstalled() == false) return string.Empty;
return Execute("powershell.exe", arg, commands, readResult);
}
@@ -79,5 +81,24 @@ namespace linker.libs
proc.Dispose();
return string.Empty;
}
public static bool IsPowerShellInstalled()
{
string[] powerShellPaths = {
Environment.ExpandEnvironmentVariables(@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"),
Environment.ExpandEnvironmentVariables(@"%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe")
};
foreach (string path in powerShellPaths)
{
if (File.Exists(path))
{
return true;
}
}
return false;
}
}
}

View File

@@ -120,9 +120,15 @@ namespace linker.tun
error = $"shutdown are operating";
return false;
}
try
{
cancellationTokenSource?.Cancel();
linkerTunDevice?.Shutdown();
linkerTunDevice?.RemoveNat(out error);
}
catch (Exception)
{
}
error = string.Empty;
Interlocked.Exchange(ref operating, 0);

View File

@@ -126,8 +126,15 @@ namespace linker.tun
public void RemoveNat(out string error)
{
error = string.Empty;
try
{
CommandHelper.PowerShell(string.Empty, new string[] { $"Remove-NetNat -Name {Name}" });
}
catch (Exception ex)
{
error = ex.Message;
}
}
public void AddRoute(LinkerTunDeviceRouteItem[] ips, IPAddress ip, bool gateway)
{

View File

@@ -44,13 +44,11 @@ namespace linker.plugins.tuntap
this.config = config;
this.tuntapProxy = tuntapProxy;
this.runningConfig = runningConfig;
linkerTunDeviceAdapter.Initialize(deviceName, tuntapProxy);
linkerTunDeviceAdapter.Shutdown();
linkerTunDeviceAdapter.Clear();
AppDomain.CurrentDomain.ProcessExit += (s, e) => linkerTunDeviceAdapter.Shutdown();
Console.CancelKeyPress += (s, e) => linkerTunDeviceAdapter.Shutdown();
clientSignInState.NetworkFirstEnabledHandle += Initialize;
}

View File

@@ -89,11 +89,17 @@ namespace linker.startup
foreach (var startup in startups)
{
if (config.Data.Common.Modes.Contains("client"))
{
LoggerHelper.Instance.Warning($"add startup {startup.Name} client");
startup.AddClient(serviceCollection, config, assemblies);
}
if (config.Data.Common.Modes.Contains("server"))
{
LoggerHelper.Instance.Warning($"add startup {startup.Name} server");
startup.AddServer(serviceCollection, config, assemblies);
}
}
}
/// <summary>
/// 启动
@@ -106,10 +112,16 @@ namespace linker.startup
foreach (var startup in startups)
{
if (config.Data.Common.Modes.Contains("client"))
{
LoggerHelper.Instance.Warning($"use startup {startup.Name} client");
startup.UseClient(serviceProvider, config, assemblies);
}
if (config.Data.Common.Modes.Contains("server"))
{
LoggerHelper.Instance.Warning($"use startup {startup.Name} server");
startup.UseServer(serviceProvider, config, assemblies);
}
}
}
}
}