mirror of
https://github.com/snltty/linker.git
synced 2025-12-20 10:26:45 +08:00
修正路由添加错误
This commit is contained in:
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
Binary file not shown.
@@ -81,7 +81,7 @@ namespace linker.tunnel.connection
|
||||
}
|
||||
private async Task ProcessWrite()
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
try
|
||||
{
|
||||
while (cancellationTokenSource.IsCancellationRequested == false)
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace linker.tunnel.connection
|
||||
|
||||
private async Task ProcessWrite()
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
try
|
||||
{
|
||||
int length = 0;
|
||||
|
||||
@@ -271,7 +271,6 @@ namespace linker.tunnel.proxy
|
||||
|
||||
if (state.Data.Length > 0)
|
||||
{
|
||||
LoggerHelper.Instance.Warning($"connect {token.Proxy.ConnectId} {token.Proxy.TargetEP} success {state.Data.Length}");
|
||||
await token.Socket.SendAsync(state.Data.AsMemory(0, state.Length), SocketFlags.None);
|
||||
}
|
||||
tcpConnections.TryAdd(new ConnectId(token.Proxy.ConnectId, token.Connection.GetHashCode(), (byte)ProxyDirection.Forward), token);
|
||||
@@ -302,17 +301,9 @@ namespace linker.tunnel.proxy
|
||||
{
|
||||
if (tunnelToken.Proxy.Protocol == ProxyProtocol.Tcp)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
{
|
||||
LoggerHelper.Instance.Warning($"receive {tunnelToken.Proxy.ConnectId}");
|
||||
}
|
||||
ConnectId connectId = new ConnectId(tunnelToken.Proxy.ConnectId, tunnelToken.Connection.GetHashCode(), (byte)tunnelToken.Proxy.Direction);
|
||||
if (tcpConnections.TryGetValue(connectId, out AsyncUserToken token))
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
{
|
||||
LoggerHelper.Instance.Warning($"receive1 {tunnelToken.Proxy.ConnectId}");
|
||||
}
|
||||
_ = ProcessReceive(token);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,7 +346,7 @@ namespace linker.tunnel.transport
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
try
|
||||
{
|
||||
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||
@@ -397,7 +397,7 @@ namespace linker.tunnel.transport
|
||||
/// <returns></returns>
|
||||
private async Task WaitQuicConnect(Socket remoteUdp, IPEndPoint remoteEP, Socket localUdp)
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||
try
|
||||
{
|
||||
@@ -466,7 +466,7 @@ namespace linker.tunnel.transport
|
||||
/// <returns></returns>
|
||||
private async Task WaitAuth(ListenAsyncToken token, TaskCompletionSource<AddressFamily> tcs)
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||
try
|
||||
{
|
||||
@@ -512,7 +512,7 @@ namespace linker.tunnel.transport
|
||||
/// <returns></returns>
|
||||
private async Task Connect2Quic(ListenAsyncToken token)
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(8 * 1024);
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(16 * 1024);
|
||||
IPEndPoint tempEp = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||
try
|
||||
{
|
||||
|
||||
@@ -249,6 +249,7 @@ namespace linker.tunnel.transport
|
||||
{
|
||||
try
|
||||
{
|
||||
socket.KeepAlive();
|
||||
SslStream sslStream = null;
|
||||
if (_state.SSL)
|
||||
{
|
||||
@@ -302,7 +303,7 @@ namespace linker.tunnel.transport
|
||||
{
|
||||
IPAddress localIP = NetworkHelper.IPv6Support ? IPAddress.IPv6Any : IPAddress.Any;
|
||||
Socket socket = new Socket(localIP.AddressFamily, SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
|
||||
//socket.ReceiveBufferSize = 128 * 1024;
|
||||
//socket.ReceiveBufferSize = 5 * 1024 * 1024;
|
||||
socket.IPv6Only(localIP.AddressFamily, false);
|
||||
socket.ReuseBind(new IPEndPoint(localIP, local.Port));
|
||||
socket.Listen(int.MaxValue);
|
||||
|
||||
@@ -48,10 +48,8 @@ namespace linker.plugins.forward.proxy
|
||||
/// <returns></returns>
|
||||
protected override async ValueTask<bool> ConnectTunnelConnection(AsyncUserToken token)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {token.Proxy.ConnectId} {token.ListenPort} ");
|
||||
if (caches.TryGetValue(token.ListenPort, out ForwardProxyCacheInfo cache))
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {token.Proxy.ConnectId} {token.ListenPort}->{cache.TargetEP} ");
|
||||
token.Proxy.TargetEP = cache.TargetEP;
|
||||
cache.Connection = await ConnectTunnel(cache.MachineId);
|
||||
token.Connection = cache.Connection;
|
||||
@@ -85,13 +83,10 @@ namespace linker.plugins.forward.proxy
|
||||
//之前这个客户端已经连接过
|
||||
if (connections.TryGetValue(machineId, out ITunnelConnection connection) && connection.Connected)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} connection ");
|
||||
return connection;
|
||||
}
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward begin {machineId} connection ");
|
||||
//不要同时去连太多,锁以下
|
||||
await slimGlobal.WaitAsync();
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} slim global ");
|
||||
if (locks.TryGetValue(machineId, out SemaphoreSlim slim) == false)
|
||||
{
|
||||
slim = new SemaphoreSlim(1);
|
||||
@@ -99,7 +94,6 @@ namespace linker.plugins.forward.proxy
|
||||
}
|
||||
slimGlobal.Release();
|
||||
await slim.WaitAsync();
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward got {machineId} slim ");
|
||||
try
|
||||
{
|
||||
//获得锁之前再次看看之前有没有连接成功
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace linker.plugins.tuntap.vea
|
||||
Error = CommandHelper.Execute("./plugins/tuntap/tun2socks", command, Array.Empty<string>());
|
||||
LoggerHelper.Instance.Error(Error);
|
||||
}
|
||||
|
||||
|
||||
await Task.Delay(10);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -101,7 +101,9 @@ namespace linker.plugins.tuntap.vea
|
||||
{
|
||||
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
|
||||
{
|
||||
return $"ip route add {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength} via {ip} dev {InterfaceName} metric 1 ";
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"ip route add {string.Join(".", ips)}/{item.MaskLength} via {ip} dev {InterfaceName} metric 1 ";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
@@ -116,7 +118,9 @@ namespace linker.plugins.tuntap.vea
|
||||
{
|
||||
string[] commands = ip.Select(item =>
|
||||
{
|
||||
return $"ip route del {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength}";
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"ip route del {string.Join(".", ips)}/{item.MaskLength}";
|
||||
}).ToArray();
|
||||
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
|
||||
@@ -107,7 +107,9 @@ namespace linker.plugins.tuntap.vea
|
||||
{
|
||||
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
|
||||
{
|
||||
return $"route add -net {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength} {ip}";
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"route add -net {string.Join(".", ips)}/{item.MaskLength} {ip}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
@@ -118,7 +120,9 @@ namespace linker.plugins.tuntap.vea
|
||||
{
|
||||
string[] commands = ip.Select(item =>
|
||||
{
|
||||
return $"route delete -net {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}/{item.MaskLength}";
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"route delete -net {string.Join(".", ips)}/{item.MaskLength}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
|
||||
@@ -134,7 +134,9 @@ namespace linker.plugins.tuntap.vea
|
||||
string[] commands = ips.Where(c => c.IPAddress > 0).Select(item =>
|
||||
{
|
||||
byte[] maskArr = BitConverter.GetBytes(BinaryPrimitives.ReverseEndianness(item.MaskValue));
|
||||
return $"route add {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())} mask {string.Join(".", maskArr)} {ip} metric 5 if {interfaceNumber}";
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"route add {string.Join(".", ips)} mask {string.Join(".", maskArr)} {ip} metric 5 if {interfaceNumber}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
@@ -150,7 +152,12 @@ namespace linker.plugins.tuntap.vea
|
||||
{
|
||||
if (interfaceNumber > 0)
|
||||
{
|
||||
string[] commands = ip.Where(c => c.IPAddress > 0).Select(item => $"route delete {string.Join(".", BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes())}").ToArray();
|
||||
string[] commands = ip.Where(c => c.IPAddress > 0).Select(item =>
|
||||
{
|
||||
byte[] ips = BinaryPrimitives.ReverseEndianness(item.IPAddress).ToBytes();
|
||||
ips[3] = 0;
|
||||
return $"route delete {string.Join(".", ips)}";
|
||||
}).ToArray();
|
||||
if (commands.Length > 0)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
|
||||
Reference in New Issue
Block a user