diff --git a/cmonitor.web.client/src/apis/relay.js b/cmonitor.web.client/src/apis/relay.js index 8fd24d2c..cea427bc 100644 --- a/cmonitor.web.client/src/apis/relay.js +++ b/cmonitor.web.client/src/apis/relay.js @@ -3,3 +3,10 @@ import { sendWebsocketMsg } from './request' export const updateRelayConnect = (machineName) => { return sendWebsocketMsg('relay/Connect', machineName); } + +export const getRelayTypes = () => { + return sendWebsocketMsg('relay/gettypes'); +} +export const updateRelaySetServers = (servers) => { + return sendWebsocketMsg('relay/SetServers', servers); +} \ No newline at end of file diff --git a/cmonitor.web.client/src/apis/tunnel.js b/cmonitor.web.client/src/apis/tunnel.js index 28fc0ef8..8ab58ce0 100644 --- a/cmonitor.web.client/src/apis/tunnel.js +++ b/cmonitor.web.client/src/apis/tunnel.js @@ -3,3 +3,10 @@ import { sendWebsocketMsg } from './request' export const updateTunnelConnect = (machineName) => { return sendWebsocketMsg('tunnel/Connect', machineName); } + +export const getTunnelTypes = () => { + return sendWebsocketMsg('tunnel/gettypes'); +} +export const updateTunnelSetServers = (servers) => { + return sendWebsocketMsg('tunnel/SetServers', servers); +} \ No newline at end of file diff --git a/cmonitor.web.client/src/assets/style.css b/cmonitor.web.client/src/assets/style.css index 5b4ba3d5..3921d752 100644 --- a/cmonitor.web.client/src/assets/style.css +++ b/cmonitor.web.client/src/assets/style.css @@ -84,6 +84,10 @@ a.a-line { padding-left: .6rem; } +.pdl-10 { + padding-left: 1rem; +} + .pdt-10 { padding-top: 1rem; } diff --git a/cmonitor.web.client/src/components/status/RelayServers.vue b/cmonitor.web.client/src/components/status/RelayServers.vue new file mode 100644 index 00000000..bb0ece35 --- /dev/null +++ b/cmonitor.web.client/src/components/status/RelayServers.vue @@ -0,0 +1,154 @@ + + + \ No newline at end of file diff --git a/cmonitor.web.client/src/components/status/Server.vue b/cmonitor.web.client/src/components/status/Server.vue index f9e7bc44..12e706e0 100644 --- a/cmonitor.web.client/src/components/status/Server.vue +++ b/cmonitor.web.client/src/components/status/Server.vue @@ -3,7 +3,7 @@ 服务器 {{state.server}} {{state.serverLength}} - +
@@ -18,16 +18,16 @@ - + - + - - + + @@ -49,8 +49,10 @@ import { injectGlobalData } from '@/provide'; import { ElMessage } from 'element-plus'; import { computed, reactive } from 'vue'; import Servers from './Servers.vue' +import RelayServers from './RelayServers.vue' +import TunnelServers from './TunnelServers.vue' export default { - components:{Servers}, + components:{Servers,RelayServers,TunnelServers}, setup(props) { const globalData = injectGlobalData(); diff --git a/cmonitor.web.client/src/components/status/Servers.vue b/cmonitor.web.client/src/components/status/Servers.vue index 6fa84f37..44ce911b 100644 --- a/cmonitor.web.client/src/components/status/Servers.vue +++ b/cmonitor.web.client/src/components/status/Servers.vue @@ -1,29 +1,55 @@ diff --git a/cmonitor.web.client/src/components/status/TunnelServers.vue b/cmonitor.web.client/src/components/status/TunnelServers.vue new file mode 100644 index 00000000..f65af983 --- /dev/null +++ b/cmonitor.web.client/src/components/status/TunnelServers.vue @@ -0,0 +1,145 @@ + + + \ No newline at end of file diff --git a/cmonitor.web.client/src/main.js b/cmonitor.web.client/src/main.js index 5c8eec5c..f62dc41d 100644 --- a/cmonitor.web.client/src/main.js +++ b/cmonitor.web.client/src/main.js @@ -15,9 +15,14 @@ import 'element-plus/theme-chalk/display.css' import 'element-plus/theme-chalk/dark/css-vars.css' import { - ArrowDown, + ArrowDown, Top, Bottom, Delete, Plus, Select } from '@element-plus/icons-vue' app.component(ArrowDown.name, ArrowDown); +app.component(Top.name, Top); +app.component(Bottom.name, Bottom); +app.component(Delete.name, Delete); +app.component(Plus.name, Plus); +app.component(Select.name, Select); app.use(ElementPlus, { size: 'default' }).use(router).mount('#app'); diff --git a/cmonitor.web.client/src/views/devices/Forward.vue b/cmonitor.web.client/src/views/devices/Forward.vue index 47959add..fe06d386 100644 --- a/cmonitor.web.client/src/views/devices/Forward.vue +++ b/cmonitor.web.client/src/views/devices/Forward.vue @@ -59,19 +59,18 @@ - + - - + diff --git a/cmonitor.web.client/src/views/devices/List.vue b/cmonitor.web.client/src/views/devices/List.vue index a784e9fd..7b9b2d52 100644 --- a/cmonitor.web.client/src/views/devices/List.vue +++ b/cmonitor.web.client/src/views/devices/List.vue @@ -50,7 +50,7 @@ @@ -153,6 +153,8 @@ export default { item.Version = res.List[j].Version; item.LastSignIn = res.List[j].LastSignIn; item.Args = res.List[j].Args; + item.showTunnel = machineName.value != res.List[j].MachineName; + item.showForward = machineName.value != res.List[j].MachineName; item.showDel = machineName.value != res.List[j].MachineName && res.List[j].Connected == false; } } diff --git a/cmonitor.web.client/src/views/devices/Tuntap.vue b/cmonitor.web.client/src/views/devices/Tuntap.vue index 013ed994..6df9cc35 100644 --- a/cmonitor.web.client/src/views/devices/Tuntap.vue +++ b/cmonitor.web.client/src/views/devices/Tuntap.vue @@ -30,9 +30,9 @@
-
- 删除 - 添加 +
+ +
diff --git a/cmonitor/client/config/Config.cs b/cmonitor/client/config/Config.cs index 44042a01..3a9e9db2 100644 --- a/cmonitor/client/config/Config.cs +++ b/cmonitor/client/config/Config.cs @@ -10,9 +10,17 @@ namespace cmonitor.config public sealed partial class ConfigClientInfo { - public ClientServerInfo[] Servers { get; set; } = new ClientServerInfo[] { + private ClientServerInfo[] servers = new ClientServerInfo[] { new ClientServerInfo{ Name="默认", Host=new IPEndPoint(IPAddress.Loopback, 1802).ToString() } }; + public ClientServerInfo[] Servers + { + get => servers; set + { + servers = value; + if (value.Length > 0) Server = value.FirstOrDefault().Host; + } + } private string name = Dns.GetHostName().SubStr(0, 12); @@ -36,7 +44,7 @@ namespace cmonitor.config public sealed class ClientServerInfo { - public string Name { get; set; } - public string Host { get; set; } + public string Name { get; set; } = string.Empty; + public string Host { get; set; } = string.Empty; } } diff --git a/cmonitor/plugins/relay/RelayApiController.cs b/cmonitor/plugins/relay/RelayApiController.cs index 499b979d..da97ecee 100644 --- a/cmonitor/plugins/relay/RelayApiController.cs +++ b/cmonitor/plugins/relay/RelayApiController.cs @@ -21,6 +21,11 @@ namespace cmonitor.plugins.relay RelayTest(); } + public List GetTypes(ApiControllerParamsInfo param) + { + return relayTransfer.GetTypes(); + } + public bool SetServers(ApiControllerParamsInfo param) { config.Data.Client.Relay.Servers = param.Content.DeJson(); diff --git a/cmonitor/plugins/relay/RelayTransfer.cs b/cmonitor/plugins/relay/RelayTransfer.cs index 0968b728..c954494f 100644 --- a/cmonitor/plugins/relay/RelayTransfer.cs +++ b/cmonitor/plugins/relay/RelayTransfer.cs @@ -32,6 +32,11 @@ namespace cmonitor.plugins.relay Logger.Instance.Warning($"load relay transport:{string.Join(",", transports.Select(c => c.Name))}"); } + public List GetTypes() + { + return transports.Select(c => new RelayCompactTypeInfo { Value = c.Type, Name = c.Type.ToString() }).Distinct(new RelayCompactTypeInfoEqualityComparer()).ToList(); + } + public void SetConnectedCallback(string transactionId, Action callback) { if (OnConnected.TryGetValue(transactionId, out List> callbacks) == false) @@ -52,7 +57,7 @@ namespace cmonitor.plugins.relay public async Task ConnectAsync(string remoteMachineName, string transactionId) { IEnumerable _transports = transports.OrderBy(c => c.Type); - foreach (RelayCompactInfo item in config.Data.Client.Relay.Servers.Where(c => c.Disabled == false)) + foreach (RelayCompactInfo item in config.Data.Client.Relay.Servers.Where(c => c.Disabled == false && string.IsNullOrWhiteSpace(c.Host) == false)) { ITransport transport = _transports.FirstOrDefault(c => c.Type == item.Type); if (transport == null) diff --git a/cmonitor/plugins/relay/config/Config.cs b/cmonitor/plugins/relay/config/Config.cs index 5ac84356..520e61a4 100644 --- a/cmonitor/plugins/relay/config/Config.cs +++ b/cmonitor/plugins/relay/config/Config.cs @@ -1,4 +1,7 @@ -namespace cmonitor.config +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace cmonitor.config { public partial class ConfigClientInfo { @@ -21,10 +24,10 @@ public sealed class RelayCompactInfo { - public string Name { get; set; } + public string Name { get; set; } = string.Empty; public RelayCompactType Type { get; set; } = RelayCompactType.Self; public string SecretKey { get; set; } = "snltty"; - public string Host { get; set; } + public string Host { get; set; } = string.Empty; public bool Disabled { get; set; } } @@ -32,4 +35,23 @@ { Self = 0, } + + public sealed class RelayCompactTypeInfo + { + public RelayCompactType Value { get; set; } + public string Name { get; set; } + } + + public sealed class RelayCompactTypeInfoEqualityComparer : IEqualityComparer + { + public bool Equals(RelayCompactTypeInfo x, RelayCompactTypeInfo y) + { + return x.Value == y.Value; + } + + public int GetHashCode([DisallowNull] RelayCompactTypeInfo obj) + { + return obj.Value.GetHashCode(); + } + } } diff --git a/cmonitor/plugins/relay/transport/TransportSelfHost.cs b/cmonitor/plugins/relay/transport/TransportSelfHost.cs index 9721557b..62656e1b 100644 --- a/cmonitor/plugins/relay/transport/TransportSelfHost.cs +++ b/cmonitor/plugins/relay/transport/TransportSelfHost.cs @@ -31,7 +31,7 @@ namespace cmonitor.plugins.relay.transport Socket socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); socket.Reuse(true); socket.IPv6Only(relayInfo.Server.AddressFamily, false); - await socket.ConnectAsync(relayInfo.Server).WaitAsync(TimeSpan.FromSeconds(2)); + await socket.ConnectAsync(relayInfo.Server).WaitAsync(TimeSpan.FromMilliseconds(500)); IConnection connection = tcpServer.BindReceive(socket); MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap @@ -65,7 +65,7 @@ namespace cmonitor.plugins.relay.transport Socket socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); socket.Reuse(true); socket.IPv6Only(relayInfo.Server.AddressFamily, false); - await socket.ConnectAsync(relayInfo.Server).WaitAsync(TimeSpan.FromSeconds(2)); + await socket.ConnectAsync(relayInfo.Server).WaitAsync(TimeSpan.FromMilliseconds(500)); IConnection connection = tcpServer.BindReceive(socket); MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap diff --git a/cmonitor/plugins/signIn/SignInApiController.cs b/cmonitor/plugins/signIn/SignInApiController.cs index df88968d..ed1a66a0 100644 --- a/cmonitor/plugins/signIn/SignInApiController.cs +++ b/cmonitor/plugins/signIn/SignInApiController.cs @@ -58,17 +58,33 @@ namespace cmonitor.plugins.signin } public void Set(ApiControllerParamsInfo param) { + string name = config.Data.Client.Name; + string gid = config.Data.Client.GroupId; + ConfigSetInfo info = param.Content.DeJson(); config.Data.Client.Name = info.Name; config.Data.Client.GroupId = info.GroupId; config.Save(); - clientSignInTransfer.SignOut(); - _ = clientSignInTransfer.SignIn(); + + if(name != config.Data.Client.Name || gid != config.Data.Client.GroupId) + { + clientSignInTransfer.SignOut(); + _ = clientSignInTransfer.SignIn(); + } } public bool SetServers(ApiControllerParamsInfo param) { + string server = config.Data.Client.Server; + config.Data.Client.Servers = param.Content.DeJson(); config.Save(); + + if(server != config.Data.Client.Server) + { + clientSignInTransfer.SignOut(); + _ = clientSignInTransfer.SignIn(); + } + return true; } diff --git a/cmonitor/plugins/tunnel/TunnelApiController.cs b/cmonitor/plugins/tunnel/TunnelApiController.cs index db7f5788..a0a106a3 100644 --- a/cmonitor/plugins/tunnel/TunnelApiController.cs +++ b/cmonitor/plugins/tunnel/TunnelApiController.cs @@ -1,6 +1,7 @@ using cmonitor.client.capi; using cmonitor.client.tunnel; using cmonitor.config; +using cmonitor.plugins.tunnel.compact; using common.libs; using common.libs.api; using common.libs.extends; @@ -12,13 +13,22 @@ namespace cmonitor.plugins.tunnel { private readonly TunnelTransfer tunnelTransfer; private readonly Config config; - public TunnelApiController(TunnelTransfer tunnelTransfer, Config config) + private readonly CompactTransfer compactTransfer; + + public TunnelApiController(TunnelTransfer tunnelTransfer, Config config, CompactTransfer compactTransfer) { this.tunnelTransfer = tunnelTransfer; this.config = config; + this.compactTransfer = compactTransfer; + TunnelTest(); } + public List GetTypes(ApiControllerParamsInfo param) + { + return compactTransfer.GetTypes(); + } + public bool SetServers(ApiControllerParamsInfo param) { config.Data.Client.Tunnel.Servers = param.Content.DeJson(); diff --git a/cmonitor/plugins/tunnel/TunnelTransfer.cs b/cmonitor/plugins/tunnel/TunnelTransfer.cs index 39c53332..6b88c3c8 100644 --- a/cmonitor/plugins/tunnel/TunnelTransfer.cs +++ b/cmonitor/plugins/tunnel/TunnelTransfer.cs @@ -49,6 +49,23 @@ namespace cmonitor.plugins.tunnel Logger.Instance.Warning($"load tunnel transport:{string.Join(",", transports.Select(c => c.Name))}"); } + public void SetConnectedCallback(string transactionId, Action callback) + { + if (OnConnected.TryGetValue(transactionId, out List> callbacks) == false) + { + callbacks = new List>(); + OnConnected[transactionId] = callbacks; + } + callbacks.Add(callback); + } + public void RemoveConnectedCallback(string transactionId, Action callback) + { + if (OnConnected.TryGetValue(transactionId, out List> callbacks)) + { + callbacks.Remove(callback); + } + } + public async Task ConnectAsync(string remoteMachineName, string transactionId) { IEnumerable _transports = transports.OrderBy(c => c.ProtocolType); @@ -187,22 +204,7 @@ namespace cmonitor.plugins.tunnel } - public void SetConnectedCallback(string transactionId, Action callback) - { - if (OnConnected.TryGetValue(transactionId, out List> callbacks) == false) - { - callbacks = new List>(); - OnConnected[transactionId] = callbacks; - } - callbacks.Add(callback); - } - public void RemoveConnectedCallback(string transactionId, Action callback) - { - if (OnConnected.TryGetValue(transactionId, out List> callbacks)) - { - callbacks.Remove(callback); - } - } + private void OnConnecting(TunnelTransportInfo tunnelTransportInfo) { diff --git a/cmonitor/plugins/tunnel/compact/CompactSelfHost.cs b/cmonitor/plugins/tunnel/compact/CompactSelfHost.cs index d64f7eef..87548e16 100644 --- a/cmonitor/plugins/tunnel/compact/CompactSelfHost.cs +++ b/cmonitor/plugins/tunnel/compact/CompactSelfHost.cs @@ -29,7 +29,7 @@ namespace cmonitor.plugins.tunnel.compact Socket socket = new Socket(server.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Reuse(true); socket.IPv6Only(server.AddressFamily, false); - await socket.ConnectAsync(server).WaitAsync(TimeSpan.FromSeconds(2)); + await socket.ConnectAsync(server).WaitAsync(TimeSpan.FromMilliseconds(500)); IConnection connection = tcpServer.BindReceive(socket); MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap { Connection = connection, MessengerId = (ushort)TunnelMessengerIds.ExternalIP }); @@ -53,7 +53,7 @@ namespace cmonitor.plugins.tunnel.compact try { await udpClient.SendAsync(new byte[1] { 0 }, server); - UdpReceiveResult result = await udpClient.ReceiveAsync().WaitAsync(TimeSpan.FromSeconds(500)); + UdpReceiveResult result = await udpClient.ReceiveAsync().WaitAsync(TimeSpan.FromMilliseconds(500)); if (result.Buffer.Length == 0) { return null; diff --git a/cmonitor/plugins/tunnel/compact/CompactTransfer.cs b/cmonitor/plugins/tunnel/compact/CompactTransfer.cs index c58086be..f3d9fda2 100644 --- a/cmonitor/plugins/tunnel/compact/CompactTransfer.cs +++ b/cmonitor/plugins/tunnel/compact/CompactTransfer.cs @@ -28,6 +28,12 @@ namespace cmonitor.plugins.tunnel.compact Logger.Instance.Warning($"load tunnel compacts:{string.Join(",", compacts.Select(c => c.Name))}"); } + public List GetTypes() + { + return compacts.Select(c => new TunnelCompactTypeInfo { Value = c.Type, Name = c.Type.ToString() }).Distinct(new TunnelCompactTypeInfoEqualityComparer()).ToList(); + } + + public async Task GetExternalIPAsync(TunnelProtocolType protocolType) { TunnelCompactIPEndPoint[] endpoints = new TunnelCompactIPEndPoint[config.Data.Client.Tunnel.Servers.Length]; @@ -35,7 +41,7 @@ namespace cmonitor.plugins.tunnel.compact for (int i = 0; i < config.Data.Client.Tunnel.Servers.Length; i++) { TunnelCompactInfo item = config.Data.Client.Tunnel.Servers[i]; - if (item.Disabled) continue; + if (item.Disabled || string.IsNullOrWhiteSpace(item.Host)) continue; ICompact compact = compacts.FirstOrDefault(c => c.Type == item.Type); if (compact == null) continue; diff --git a/cmonitor/plugins/tunnel/config/Config.cs b/cmonitor/plugins/tunnel/config/Config.cs index ec9de472..f4067ba5 100644 --- a/cmonitor/plugins/tunnel/config/Config.cs +++ b/cmonitor/plugins/tunnel/config/Config.cs @@ -1,4 +1,5 @@ -using System.Net; +using System.Diagnostics.CodeAnalysis; +using System.Net; using System.Text.Json.Serialization; namespace cmonitor.config @@ -20,9 +21,9 @@ namespace cmonitor.config public sealed class TunnelCompactInfo { - public string Name { get; set; } + public string Name { get; set; } = string.Empty; public TunnelCompactType Type { get; set; } - public string Host { get; set; } + public string Host { get; set; } = string.Empty; public bool Disabled { get; set; } } @@ -30,4 +31,23 @@ namespace cmonitor.config { Self = 0 } + + public sealed class TunnelCompactTypeInfo + { + public TunnelCompactType Value { get; set; } + public string Name { get; set; } + } + + public sealed class TunnelCompactTypeInfoEqualityComparer : IEqualityComparer + { + public bool Equals(TunnelCompactTypeInfo x, TunnelCompactTypeInfo y) + { + return x.Value == y.Value; + } + + public int GetHashCode([DisallowNull] TunnelCompactTypeInfo obj) + { + return obj.Value.GetHashCode(); + } + } } diff --git a/cmonitor/plugins/tuntap/TuntapTransfer.cs b/cmonitor/plugins/tuntap/TuntapTransfer.cs index d7257d27..5207602a 100644 --- a/cmonitor/plugins/tuntap/TuntapTransfer.cs +++ b/cmonitor/plugins/tuntap/TuntapTransfer.cs @@ -6,7 +6,6 @@ using cmonitor.plugins.tuntap.vea; using cmonitor.server; using common.libs; using MemoryPack; -using SharpDX; using System.Buffers.Binary; using System.Collections.Concurrent; using System.Net; @@ -64,11 +63,7 @@ namespace cmonitor.plugins.tuntap OnChange(); try { - bool result = await tuntapVea.Run(tuntapProxy.LocalEndpoint.Port); - if (result) - { - await tuntapVea.SetIp(config.Data.Client.Tuntap.IP); - } + bool result = await tuntapVea.Run(tuntapProxy.LocalEndpoint.Port, config.Data.Client.Tuntap.IP); config.Data.Client.Tuntap.Running = Status == TuntapStatus.Running; config.Save(); } diff --git a/cmonitor/plugins/tuntap/vea/ITuntapVea.cs b/cmonitor/plugins/tuntap/vea/ITuntapVea.cs index 96af87e2..4bdfa795 100644 --- a/cmonitor/plugins/tuntap/vea/ITuntapVea.cs +++ b/cmonitor/plugins/tuntap/vea/ITuntapVea.cs @@ -9,7 +9,7 @@ namespace cmonitor.plugins.tuntap.vea { public bool Running { get; } - public Task Run(int proxyPort); + public Task Run(int proxyPort,IPAddress ip); public Task SetIp(IPAddress ip); public void Kill(); diff --git a/cmonitor/plugins/tuntap/vea/TuntapVeaLinux.cs b/cmonitor/plugins/tuntap/vea/TuntapVeaLinux.cs index 358baee5..b8e2e4a9 100644 --- a/cmonitor/plugins/tuntap/vea/TuntapVeaLinux.cs +++ b/cmonitor/plugins/tuntap/vea/TuntapVeaLinux.cs @@ -19,10 +19,10 @@ namespace cmonitor.plugins.tuntap.vea { } - public async Task Run(int proxyPort) + public async Task Run(int proxyPort, IPAddress ip) { CommandHelper.Linux(string.Empty, new string[] { $"ip tuntap add mode tun dev {veaName}" }); - + await SetIp(ip); string str = CommandHelper.Linux(string.Empty, new string[] { $"ifconfig" }); if (str.Contains(veaName) == false) { diff --git a/cmonitor/plugins/tuntap/vea/TuntapVeaMacOs.cs b/cmonitor/plugins/tuntap/vea/TuntapVeaMacOs.cs index aa7de1af..9bdb24d4 100644 --- a/cmonitor/plugins/tuntap/vea/TuntapVeaMacOs.cs +++ b/cmonitor/plugins/tuntap/vea/TuntapVeaMacOs.cs @@ -19,7 +19,7 @@ namespace cmonitor.plugins.tuntap.vea { } - public async Task Run(int proxyPort) + public async Task Run(int proxyPort, IPAddress ip) { interfaceOsx = GetOsxInterfaceNum(); try @@ -42,6 +42,8 @@ namespace cmonitor.plugins.tuntap.vea await Task.Delay(1000); } + await SetIp(ip); + return string.IsNullOrWhiteSpace(interfaceOsx) == false; } public async Task SetIp(IPAddress ip) diff --git a/cmonitor/plugins/tuntap/vea/TuntapVeaWindows.cs b/cmonitor/plugins/tuntap/vea/TuntapVeaWindows.cs index 2b379ce4..52e7b917 100644 --- a/cmonitor/plugins/tuntap/vea/TuntapVeaWindows.cs +++ b/cmonitor/plugins/tuntap/vea/TuntapVeaWindows.cs @@ -18,7 +18,7 @@ namespace cmonitor.plugins.tuntap.vea { } - public async Task Run(int proxyPort) + public async Task Run(int proxyPort, IPAddress ip) { string command = $" -device {veaName} -proxy socks5://127.0.0.1:{proxyPort} -loglevel silent"; if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) @@ -52,7 +52,7 @@ namespace cmonitor.plugins.tuntap.vea } continue; } - + await SetIp(ip); return true; } }