mirror of
https://github.com/snltty/linker.git
synced 2025-09-26 21:15:57 +08:00
183
This commit is contained in:
@@ -60,8 +60,8 @@ namespace linker.tunnel.connection
|
||||
private readonly ReceiveDataBuffer bufferCache = new ReceiveDataBuffer();
|
||||
|
||||
private readonly LastTicksManager pingTicks = new();
|
||||
private readonly byte[] pingBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.tcp.ping");
|
||||
private readonly byte[] pongBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.tcp.pong");
|
||||
private readonly byte[] pingBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.ping");
|
||||
private readonly byte[] pongBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.pong");
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -156,16 +156,18 @@ namespace linker.tunnel.connection
|
||||
Delay = (int)pingTicks.Diff();
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
else
|
||||
{
|
||||
await callback.Receive(this, packet, this.userToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerHelper.Instance.Error(ex);
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
LoggerHelper.Instance.Error(string.Join(",", packet.ToArray()));
|
||||
try
|
||||
{
|
||||
await callback.Receive(this, packet, this.userToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerHelper.Instance.Error(ex);
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
LoggerHelper.Instance.Error(string.Join(",", packet.ToArray()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -65,7 +65,6 @@ namespace linker.tunnel.connection
|
||||
private readonly byte[] pingBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.ping");
|
||||
private readonly byte[] pongBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.pong");
|
||||
private readonly byte[] finBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.fing");
|
||||
private readonly byte[] ttlBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.ttl");
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -139,7 +138,6 @@ namespace linker.tunnel.connection
|
||||
LastTicks.Update();
|
||||
|
||||
Memory<byte> memory = buffer.AsMemory(offset, length);
|
||||
if (memory.Length == ttlBytes.Length && memory.Span.SequenceEqual(ttlBytes)) return;
|
||||
|
||||
if (memory.Length == pingBytes.Length && memory.Span.Slice(0, pingBytes.Length - 4).SequenceEqual(pingBytes.AsSpan(0, pingBytes.Length - 4)))
|
||||
{
|
||||
|
@@ -41,8 +41,8 @@ namespace linker.tunnel.transport
|
||||
|
||||
|
||||
private ConcurrentDictionary<int, ListenAsyncToken> stateDic = new ConcurrentDictionary<int, ListenAsyncToken>();
|
||||
private byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.ttl");
|
||||
private byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.end");
|
||||
private byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.ttl1");
|
||||
private byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.end1");
|
||||
private IPEndPoint quicListenEP;
|
||||
|
||||
private readonly ITunnelMessengerAdapter tunnelMessengerAdapter;
|
||||
|
@@ -40,8 +40,8 @@ namespace linker.tunnel.transport
|
||||
public Action<ITunnelConnection> OnConnected { get; set; } = (state) => { };
|
||||
|
||||
|
||||
private byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.ttl");
|
||||
private byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.end");
|
||||
private readonly byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.tcp.ttl1");
|
||||
private readonly byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.tcp.end1");
|
||||
|
||||
private readonly ITunnelMessengerAdapter tunnelMessengerAdapter;
|
||||
public TransportTcpP2PNAT(ITunnelMessengerAdapter tunnelMessengerAdapter)
|
||||
|
@@ -44,9 +44,8 @@ namespace linker.tunnel.transport
|
||||
public Action<ITunnelConnection> OnConnected { get; set; } = (state) => { };
|
||||
|
||||
|
||||
|
||||
private byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.ttl");
|
||||
private byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.end");
|
||||
private readonly byte[] authBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.ttl1");
|
||||
private readonly byte[] endBytes = Encoding.UTF8.GetBytes($"{Helper.GlobalString}.udp.end1");
|
||||
|
||||
private readonly ITunnelMessengerAdapter tunnelMessengerAdapter;
|
||||
public TransportUdp(ITunnelMessengerAdapter tunnelMessengerAdapter)
|
||||
@@ -71,7 +70,7 @@ namespace linker.tunnel.transport
|
||||
{
|
||||
return null;
|
||||
}
|
||||
await Task.Delay(100).ConfigureAwait(false);
|
||||
await Task.Delay(1000).ConfigureAwait(false);
|
||||
ITunnelConnection connection = await ConnectForward(tunnelTransportInfo).ConfigureAwait(false);
|
||||
if (connection != null)
|
||||
{
|
||||
@@ -84,8 +83,8 @@ namespace linker.tunnel.transport
|
||||
//反向连接
|
||||
TunnelTransportInfo tunnelTransportInfo1 = tunnelTransportInfo.ToJsonFormat().DeJson<TunnelTransportInfo>();
|
||||
_ = BindListen(tunnelTransportInfo1.Local.Local, tunnelTransportInfo1);
|
||||
await Task.Delay(50).ConfigureAwait(false);
|
||||
BindAndTTL(tunnelTransportInfo1);
|
||||
await Task.Delay(1000).ConfigureAwait(false);
|
||||
if (await tunnelMessengerAdapter.SendConnectBegin(tunnelTransportInfo1).ConfigureAwait(false) == false)
|
||||
{
|
||||
return null;
|
||||
@@ -180,7 +179,7 @@ namespace linker.tunnel.transport
|
||||
return new TunnelConnectionUdp
|
||||
{
|
||||
UdpClient = remoteUdp,
|
||||
IPEndPoint = NetworkHelper.TransEndpointFamily( remoteEP),
|
||||
IPEndPoint = NetworkHelper.TransEndpointFamily(remoteEP),
|
||||
TransactionId = tunnelTransportInfo.TransactionId,
|
||||
TransactionTag = tunnelTransportInfo.TransactionTag,
|
||||
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
|
||||
@@ -242,11 +241,11 @@ namespace linker.tunnel.transport
|
||||
/// <returns></returns>
|
||||
private async Task BindListen(IPEndPoint local, TunnelTransportInfo state)
|
||||
{
|
||||
local = new IPEndPoint(IPAddress.IPv6Any,local.Port);
|
||||
local = new IPEndPoint(IPAddress.IPv6Any, local.Port);
|
||||
Socket socket = new Socket(local.AddressFamily, SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
|
||||
try
|
||||
{
|
||||
socket.IPv6Only(local.AddressFamily,false);
|
||||
socket.IPv6Only(local.AddressFamily, false);
|
||||
socket.ReuseBind(local);
|
||||
socket.WindowsUdpBug();
|
||||
ListenAsyncToken token = new ListenAsyncToken
|
||||
@@ -337,7 +336,7 @@ namespace linker.tunnel.transport
|
||||
socket.WindowsUdpBug();
|
||||
socket.ReuseBind(local);
|
||||
socket.Ttl = (short)(tunnelTransportInfo.Local.RouteLevel);
|
||||
_ = socket.SendToAsync(endBytes, SocketFlags.None, ip);
|
||||
_ = socket.SendToAsync(authBytes, SocketFlags.None, ip);
|
||||
socket.SafeClose();
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
@@ -1,5 +1,5 @@
|
||||
v1.8.3
|
||||
2025-06-14 14:51:14
|
||||
2025-06-14 18:52:23
|
||||
1. 一些累计更新
|
||||
2. 修复socks5,解决CPU爆满问题,增加本地域名解析,支持HTTP代理
|
||||
3. 优化唤醒模块
|
||||
|
Reference in New Issue
Block a user