删除穿透异常

This commit is contained in:
snltty
2024-10-29 15:56:45 +08:00
parent f201b9531a
commit 6631f58d88
9 changed files with 28 additions and 60 deletions

View File

@@ -8,7 +8,6 @@ using System.Net.NetworkInformation;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace linker.libs namespace linker.libs
{ {

View File

@@ -15,7 +15,7 @@ namespace linker.tunnel.adapter
/// <summary> /// <summary>
/// 服务器地址 /// 服务器地址
/// </summary> /// </summary>
public string ServerHost { get; } public IPEndPoint ServerHost { get; }
/// <summary> /// <summary>
/// ssl加密证书没有证书则无法加密通信 /// ssl加密证书没有证书则无法加密通信

View File

@@ -43,13 +43,8 @@ namespace linker.tunnel.wanport
if (tunnelWanPort == null) return null; if (tunnelWanPort == null) return null;
try try
{ {
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (tunnelAdapter.ServerHost == null) return null;
LoggerHelper.Instance.Debug($"get domain ip {tunnelAdapter.ServerHost}"); TunnelWanPortEndPoint wanPort = await tunnelWanPort.GetAsync(localIP, tunnelAdapter.ServerHost).ConfigureAwait(false);
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 (wanPort != null) if (wanPort != null)
{ {
wanPort.Local.Address = localIP; wanPort.Local.Address = localIP;

View File

@@ -1,7 +1,6 @@
using linker.config; using linker.config;
using linker.plugins.relay.transport; using linker.plugins.relay.transport;
using linker.libs; using linker.libs;
using System.Net;
namespace linker.plugins.relay namespace linker.plugins.relay
{ {
@@ -35,12 +34,10 @@ namespace linker.plugins.relay
ITransport transport = relayTransfer.Transports.FirstOrDefault(d => d.Type == server.RelayType); ITransport transport = relayTransfer.Transports.FirstOrDefault(d => d.Type == server.RelayType);
if (transport == null) continue; if (transport == null) continue;
IPEndPoint serverEP = NetworkHelper.GetEndPoint(fileConfig.Data.Client.ServerInfo.Host, 3478);
server.Delay = await transport.RelayTestAsync(new RelayTestInfo server.Delay = await transport.RelayTestAsync(new RelayTestInfo
{ {
MachineId = fileConfig.Data.Client.Id, MachineId = fileConfig.Data.Client.Id,
SecretKey = server.SecretKey, SecretKey = server.SecretKey
Server = serverEP,
}); });
} }
} }

View File

@@ -4,7 +4,6 @@ using linker.tunnel.connection;
using linker.libs; using linker.libs;
using linker.libs.extends; using linker.libs.extends;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net;
namespace linker.plugins.relay namespace linker.plugins.relay
{ {
@@ -24,7 +23,6 @@ namespace linker.plugins.relay
public RelayTransfer(FileConfig fileConfig) public RelayTransfer(FileConfig fileConfig)
{ {
this.fileConfig = fileConfig; this.fileConfig = fileConfig;
TestTask();
} }
public void LoadTransports(List<ITransport> list) public void LoadTransports(List<ITransport> 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);
}
} }
} }

View File

@@ -5,6 +5,7 @@ using linker.libs;
using MemoryPack; using MemoryPack;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.relay.validator; using linker.plugins.relay.validator;
using System.Net;
namespace linker.plugins.relay.messenger 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) 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(ulong.MinValue);
//connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = ulong.MinValue, Server = null }));
return; return;
} }
@@ -109,11 +111,13 @@ namespace linker.plugins.relay.messenger
if (string.IsNullOrWhiteSpace(result) == false) if (string.IsNullOrWhiteSpace(result) == false)
{ {
connection.Write(ulong.MinValue); connection.Write(ulong.MinValue);
//connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = ulong.MinValue, Server = null }));
return; return;
} }
ulong flowingId = relayResolver.NewRelay(cacheFrom.MachineId, cacheFrom.MachineName, cacheTo.MachineId, cacheTo.MachineName); ulong flowingId = relayResolver.NewRelay(cacheFrom.MachineId, cacheFrom.MachineName, cacheTo.MachineId, cacheTo.MachineName);
connection.Write(flowingId); connection.Write(flowingId);
// connection.Write(MemoryPackSerializer.Serialize(new RelayAskResultInfo { FlowingId = flowingId, Server = null }));
} }
/// <summary> /// <summary>
@@ -147,6 +151,8 @@ namespace linker.plugins.relay.messenger
info.FromMachineId = cacheTo.MachineId; info.FromMachineId = cacheTo.MachineId;
info.RemoteMachineName = cacheFrom.MachineName; info.RemoteMachineName = cacheFrom.MachineName;
info.FromMachineName = cacheTo.MachineName; info.FromMachineName = cacheTo.MachineName;
info.Server = null;
try try
{ {
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap 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; }
}
} }

View File

@@ -55,12 +55,18 @@ namespace linker.plugins.relay.transport
return null; return null;
} }
relayInfo.FlowingId = resp.Data.Span.ToUInt64(); relayInfo.FlowingId = resp.Data.Span.ToUInt64();
//RelayAskResultInfo relayAskResultInfo = MemoryPackSerializer.Deserialize<RelayAskResultInfo>(resp.Data.Span);
// relayInfo.FlowingId = relayAskResultInfo.FlowingId;
// relayInfo.Server = relayAskResultInfo.Server;
if (relayInfo.FlowingId == 0) if (relayInfo.FlowingId == 0)
{ {
return null; 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 socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
socket.KeepAlive(); socket.KeepAlive();
@@ -126,6 +132,7 @@ namespace linker.plugins.relay.transport
{ {
try try
{ {
//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 socket = new Socket(relayInfo.Server.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
socket.KeepAlive(); socket.KeepAlive();

View File

@@ -16,12 +16,10 @@ namespace linker.plugins.tunnel
public sealed class TunnelAdapter : ITunnelAdapter public sealed class TunnelAdapter : ITunnelAdapter
{ {
public IPAddress LocalIP => clientSignInState.Connection?.LocalAddress.Address ?? IPAddress.Any; 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; } public X509Certificate2 Certificate { get; private set; }
private readonly ClientSignInState clientSignInState; private readonly ClientSignInState clientSignInState;
private readonly IMessengerSender messengerSender; private readonly IMessengerSender messengerSender;
private readonly FileConfig config; private readonly FileConfig config;

View File

@@ -1,5 +1,5 @@
v1.5.1 v1.5.1
2024-10-29 15:14:10 2024-10-29 15:56:45
1. 优化点对网和网对网的局域网IP包括禁用IP和冲突检测 1. 优化点对网和网对网的局域网IP包括禁用IP和冲突检测
2. 一些UI优化 2. 一些UI优化
3. 新增socks5代理 3. 新增socks5代理