删除穿透异常

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.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace linker.libs
{

View File

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

View File

@@ -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;

View File

@@ -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
});
}
}

View File

@@ -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<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 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 }));
}
/// <summary>
@@ -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; }
}
}

View File

@@ -55,12 +55,18 @@ namespace linker.plugins.relay.transport
return null;
}
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)
{
return null;
}
// 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();
@@ -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();

View File

@@ -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;

View File

@@ -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代理