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