diff --git a/linker.libs/NetworkHelper.cs b/linker.libs/NetworkHelper.cs index 563a9d69..c3174f73 100644 --- a/linker.libs/NetworkHelper.cs +++ b/linker.libs/NetworkHelper.cs @@ -8,7 +8,6 @@ using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; -using System.Threading.Tasks; namespace linker.libs { diff --git a/linker.tunnel/adapter/ITunnelAdapter.cs b/linker.tunnel/adapter/ITunnelAdapter.cs index 6ec7ef94..54526770 100644 --- a/linker.tunnel/adapter/ITunnelAdapter.cs +++ b/linker.tunnel/adapter/ITunnelAdapter.cs @@ -15,7 +15,7 @@ namespace linker.tunnel.adapter /// /// 服务器地址 /// - public string ServerHost { get; } + public IPEndPoint ServerHost { get; } /// /// ssl加密证书,没有证书则无法加密通信 diff --git a/linker.tunnel/wanport/TunnelWanPortTransfer.cs b/linker.tunnel/wanport/TunnelWanPortTransfer.cs index d04b6c4e..5e6a734b 100644 --- a/linker.tunnel/wanport/TunnelWanPortTransfer.cs +++ b/linker.tunnel/wanport/TunnelWanPortTransfer.cs @@ -43,13 +43,8 @@ namespace linker.tunnel.wanport if (tunnelWanPort == null) return null; try { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Debug($"get domain ip {tunnelAdapter.ServerHost}"); - IPEndPoint server = NetworkHelper.GetEndPoint(tunnelAdapter.ServerHost, 3478); - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Debug($"got domain ip {tunnelAdapter.ServerHost}->{server}"); - if (server == null) return null; - TunnelWanPortEndPoint wanPort = await tunnelWanPort.GetAsync(localIP, server).ConfigureAwait(false); + if (tunnelAdapter.ServerHost == null) return null; + TunnelWanPortEndPoint wanPort = await tunnelWanPort.GetAsync(localIP, tunnelAdapter.ServerHost).ConfigureAwait(false); if (wanPort != null) { wanPort.Local.Address = localIP; diff --git a/linker/plugins/relay/RelayTestTransfer.cs b/linker/plugins/relay/RelayTestTransfer.cs index 53cb7336..f8b5f8f9 100644 --- a/linker/plugins/relay/RelayTestTransfer.cs +++ b/linker/plugins/relay/RelayTestTransfer.cs @@ -1,7 +1,6 @@ using linker.config; using linker.plugins.relay.transport; using linker.libs; -using System.Net; namespace linker.plugins.relay { @@ -35,12 +34,10 @@ namespace linker.plugins.relay ITransport transport = relayTransfer.Transports.FirstOrDefault(d => d.Type == server.RelayType); if (transport == null) continue; - IPEndPoint serverEP = NetworkHelper.GetEndPoint(fileConfig.Data.Client.ServerInfo.Host, 3478); server.Delay = await transport.RelayTestAsync(new RelayTestInfo { MachineId = fileConfig.Data.Client.Id, - SecretKey = server.SecretKey, - Server = serverEP, + SecretKey = server.SecretKey }); } } diff --git a/linker/plugins/relay/RelayTransfer.cs b/linker/plugins/relay/RelayTransfer.cs index 31939fcd..05356a5a 100644 --- a/linker/plugins/relay/RelayTransfer.cs +++ b/linker/plugins/relay/RelayTransfer.cs @@ -4,7 +4,6 @@ using linker.tunnel.connection; using linker.libs; using linker.libs.extends; using System.Collections.Concurrent; -using System.Net; namespace linker.plugins.relay { @@ -24,7 +23,6 @@ namespace linker.plugins.relay public RelayTransfer(FileConfig fileConfig) { this.fileConfig = fileConfig; - TestTask(); } public void LoadTransports(List list) @@ -192,45 +190,5 @@ namespace linker.plugins.relay } - - private readonly LastTicksManager lastTicksManager = new LastTicksManager(); - public void SubscribeDelayTest() - { - lastTicksManager.Update(); - } - private async Task TaskRelay() - { - try - { - foreach (var server in fileConfig.Data.Client.Relay.Servers) - { - ITransport transport = Transports.FirstOrDefault(d => d.Type == server.RelayType); - if (transport == null) continue; - - IPEndPoint serverEP = NetworkHelper.GetEndPoint(fileConfig.Data.Client.ServerInfo.Host, 3478); - server.Delay = await transport.RelayTestAsync(new RelayTestInfo - { - MachineId = fileConfig.Data.Client.Id, - SecretKey = server.SecretKey, - Server = serverEP, - }); - } - } - catch (Exception) - { - } - } - private void TestTask() - { - TimerHelper.SetInterval(async () => - { - if (lastTicksManager.DiffLessEqual(3000)) - { - await TaskRelay(); - } - return true; - }, () => lastTicksManager.DiffLessEqual(3000) ? 3000 : 30000); - } - } } \ No newline at end of file diff --git a/linker/plugins/relay/messenger/RelayMessenger.cs b/linker/plugins/relay/messenger/RelayMessenger.cs index 6a707257..5e21bc45 100644 --- a/linker/plugins/relay/messenger/RelayMessenger.cs +++ b/linker/plugins/relay/messenger/RelayMessenger.cs @@ -5,6 +5,7 @@ using linker.libs; using MemoryPack; using linker.plugins.messenger; using linker.plugins.relay.validator; +using System.Net; namespace linker.plugins.relay.messenger { @@ -97,6 +98,7 @@ namespace linker.plugins.relay.messenger if (signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) == false || signCaching.TryGet(info.RemoteMachineId, out SignCacheInfo cacheTo) == false || cacheFrom.GroupId != cacheTo.GroupId) { connection.Write(ulong.MinValue); + //connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = ulong.MinValue, Server = null })); return; } @@ -109,11 +111,13 @@ namespace linker.plugins.relay.messenger if (string.IsNullOrWhiteSpace(result) == false) { connection.Write(ulong.MinValue); + //connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = ulong.MinValue, Server = null })); return; } ulong flowingId = relayResolver.NewRelay(cacheFrom.MachineId, cacheFrom.MachineName, cacheTo.MachineId, cacheTo.MachineName); connection.Write(flowingId); + // connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = flowingId, Server = null })); } /// @@ -147,6 +151,8 @@ namespace linker.plugins.relay.messenger info.FromMachineId = cacheTo.MachineId; info.RemoteMachineName = cacheFrom.MachineName; info.FromMachineName = cacheTo.MachineName; + + info.Server = null; try { MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap @@ -170,5 +176,13 @@ namespace linker.plugins.relay.messenger } + [MemoryPackable] + public sealed partial class RelayAskResultInfo + { + public ulong FlowingId { get; set; } + + [MemoryPackAllowSerialize] + public IPEndPoint Server { get; set; } + } } diff --git a/linker/plugins/relay/transport/TransportSelfHost.cs b/linker/plugins/relay/transport/TransportSelfHost.cs index a4f36b35..f77a0107 100644 --- a/linker/plugins/relay/transport/TransportSelfHost.cs +++ b/linker/plugins/relay/transport/TransportSelfHost.cs @@ -55,12 +55,18 @@ namespace linker.plugins.relay.transport return null; } relayInfo.FlowingId = resp.Data.Span.ToUInt64(); + //RelayAskResultInfo relayAskResultInfo = MemoryPackSerializer.Deserialize(resp.Data.Span); + // relayInfo.FlowingId = relayAskResultInfo.FlowingId; + // relayInfo.Server = relayAskResultInfo.Server; if (relayInfo.FlowingId == 0) { return null; } + // if (relayInfo.Server == null) + { + relayInfo.Server = clientSignInState.Connection.Address; + } - relayInfo.Server = clientSignInState.Connection.Address; //连接中继服务器 Socket socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); socket.KeepAlive(); @@ -126,6 +132,7 @@ namespace linker.plugins.relay.transport { try { + //if (relayInfo.Server == null) relayInfo.Server = clientSignInState.Connection.Address; Socket socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); socket.KeepAlive(); diff --git a/linker/plugins/tunnel/TunnelAdapter.cs b/linker/plugins/tunnel/TunnelAdapter.cs index 0e892fbd..46329a14 100644 --- a/linker/plugins/tunnel/TunnelAdapter.cs +++ b/linker/plugins/tunnel/TunnelAdapter.cs @@ -16,12 +16,10 @@ namespace linker.plugins.tunnel public sealed class TunnelAdapter : ITunnelAdapter { public IPAddress LocalIP => clientSignInState.Connection?.LocalAddress.Address ?? IPAddress.Any; - public string ServerHost => config.Data.Client.ServerInfo.Host; + public IPEndPoint ServerHost => clientSignInState.Connection?.Address ?? null; public X509Certificate2 Certificate { get; private set; } - - private readonly ClientSignInState clientSignInState; private readonly IMessengerSender messengerSender; private readonly FileConfig config; diff --git a/version.txt b/version.txt index 75128564..88c408d5 100644 --- a/version.txt +++ b/version.txt @@ -1,5 +1,5 @@ v1.5.1 -2024-10-29 15:14:10 +2024-10-29 15:56:45 1. 优化点对网和网对网的局域网IP,包括禁用IP,和冲突检测 2. 一些UI优化 3. 新增socks5代理