mirror of
https://github.com/snltty/linker.git
synced 2025-10-10 19:40:12 +08:00
删除穿透异常
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -15,7 +15,7 @@ namespace linker.tunnel.adapter
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 服务器地址
|
/// 服务器地址
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ServerHost { get; }
|
public IPEndPoint ServerHost { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ssl加密证书,没有证书则无法加密通信
|
/// ssl加密证书,没有证书则无法加密通信
|
||||||
|
@@ -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;
|
||||||
|
@@ -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,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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; }
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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代理
|
||||||
|
Reference in New Issue
Block a user