mirror of
https://github.com/snltty/linker.git
synced 2025-10-04 16:52:48 +08:00
sync
This commit is contained in:
@@ -373,25 +373,20 @@ namespace linker.messenger.relay.client.transport
|
|||||||
//问一下能不能中继
|
//问一下能不能中继
|
||||||
RelayAskResultInfo170 relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false);
|
RelayAskResultInfo170 relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false);
|
||||||
relayInfo.FlowingId = relayAskResultInfo.FlowingId;
|
relayInfo.FlowingId = relayAskResultInfo.FlowingId;
|
||||||
if (relayInfo.FlowingId == 0 || relayAskResultInfo.Nodes.Count == 0)
|
var nodes = relayAskResultInfo.Nodes;
|
||||||
|
if (relayInfo.FlowingId == 0 || nodes.Count == 0)
|
||||||
{
|
{
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
LoggerHelper.Instance.Error($"relay ask fail,flowid:{relayInfo.FlowingId},nodes:{relayAskResultInfo.Nodes.Count}");
|
LoggerHelper.Instance.Error($"relay ask fail,flowid:{relayInfo.FlowingId},nodes:{nodes.Count}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//测试一下延迟
|
|
||||||
if (relayAskResultInfo.Nodes.Count > 1)
|
|
||||||
{
|
|
||||||
//relayAskResultInfo.Nodes = await TestDelay(relayAskResultInfo.Nodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
//连接中继节点服务器
|
//连接中继节点服务器
|
||||||
var (socket, ep) = await ConnectNodeServer(relayInfo, relayAskResultInfo.Nodes).ConfigureAwait(false);
|
var (socket, ep) = await ConnectNodeServer(relayInfo, nodes).ConfigureAwait(false);
|
||||||
if (socket == null)
|
if (socket == null)
|
||||||
{
|
{
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
LoggerHelper.Instance.Error($"relay connect server fail,flowid:{relayInfo.FlowingId},nodes:{relayAskResultInfo.Nodes.Count}");
|
LoggerHelper.Instance.Error($"relay connect server fail,flowid:{relayInfo.FlowingId},nodes:{nodes.Count}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,7 +394,7 @@ namespace linker.messenger.relay.client.transport
|
|||||||
if (await RelayConfirm(relayInfo).ConfigureAwait(false) == false)
|
if (await RelayConfirm(relayInfo).ConfigureAwait(false) == false)
|
||||||
{
|
{
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
LoggerHelper.Instance.Error($"relay confirm fail,flowid:{relayInfo.FlowingId},nodes:{relayAskResultInfo.Nodes.Count}");
|
LoggerHelper.Instance.Error($"relay confirm fail,flowid:{relayInfo.FlowingId},nodes:{nodes.Count}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,7 +413,8 @@ namespace linker.messenger.relay.client.transport
|
|||||||
Label = string.Empty,
|
Label = string.Empty,
|
||||||
Receive = true,
|
Receive = true,
|
||||||
SSL = relayInfo.SSL,
|
SSL = relayInfo.SSL,
|
||||||
Crypto = CryptoFactory.CreateSymmetric(relayInfo.RemoteMachineId)
|
Crypto = CryptoFactory.CreateSymmetric(relayInfo.RemoteMachineId),
|
||||||
|
NodeId = relayInfo.NodeId
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -588,7 +584,8 @@ namespace linker.messenger.relay.client.transport
|
|||||||
Label = string.Empty,
|
Label = string.Empty,
|
||||||
Receive = true,
|
Receive = true,
|
||||||
SSL = relayInfo.SSL,
|
SSL = relayInfo.SSL,
|
||||||
Crypto = CryptoFactory.CreateSymmetric(relayInfo.FromMachineId)
|
Crypto = CryptoFactory.CreateSymmetric(relayInfo.FromMachineId),
|
||||||
|
NodeId = relayInfo.NodeId,
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -49,11 +49,12 @@ namespace linker.messenger.relay.server
|
|||||||
|
|
||||||
public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory)
|
public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory)
|
||||||
{
|
{
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},1");
|
||||||
if (relayServerNodeTransfer.Validate(tunnel.connection.TunnelProtocolType.Udp) == false)
|
if (relayServerNodeTransfer.Validate(tunnel.connection.TunnelProtocolType.Udp) == false)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},2");
|
||||||
RelayUdpStep step = (RelayUdpStep)memory.Span[0];
|
RelayUdpStep step = (RelayUdpStep)memory.Span[0];
|
||||||
memory = memory.Slice(1);
|
memory = memory.Slice(1);
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ namespace linker.messenger.relay.server
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},3");
|
||||||
byte flagLength = memory.Span[0];
|
byte flagLength = memory.Span[0];
|
||||||
if (memory.Length < flagLength + 1 || memory.Slice(1, flagLength).Span.SequenceEqual(relayFlag) == false)
|
if (memory.Length < flagLength + 1 || memory.Slice(1, flagLength).Span.SequenceEqual(relayFlag) == false)
|
||||||
{
|
{
|
||||||
@@ -74,13 +75,13 @@ namespace linker.messenger.relay.server
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memory = memory.Slice(1 + flagLength);
|
memory = memory.Slice(1 + flagLength);
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},4");
|
||||||
RelayMessageInfo relayMessage = serializer.Deserialize<RelayMessageInfo>(memory.Span);
|
RelayMessageInfo relayMessage = serializer.Deserialize<RelayMessageInfo>(memory.Span);
|
||||||
|
|
||||||
//ask 是发起端来的,那key就是 发起端->目标端, answer的,目标和来源会交换,所以转换一下
|
//ask 是发起端来的,那key就是 发起端->目标端, answer的,目标和来源会交换,所以转换一下
|
||||||
string key = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}->{relayMessage.FlowId}" : $"{relayMessage.ToId}->{relayMessage.FromId}->{relayMessage.FlowId}";
|
string key = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}->{relayMessage.FlowId}" : $"{relayMessage.ToId}->{relayMessage.FromId}->{relayMessage.FlowId}";
|
||||||
string flowKey = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}" : $"{relayMessage.ToId}->{relayMessage.FromId}";
|
string flowKey = relayMessage.Type == RelayMessengerType.Ask ? $"{relayMessage.FromId}->{relayMessage.ToId}" : $"{relayMessage.ToId}->{relayMessage.FromId}";
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},5");
|
||||||
//获取缓存
|
//获取缓存
|
||||||
RelayCacheInfo relayCache = await relayServerNodeTransfer.TryGetRelayCache(key).ConfigureAwait(false);
|
RelayCacheInfo relayCache = await relayServerNodeTransfer.TryGetRelayCache(key).ConfigureAwait(false);
|
||||||
if (relayCache == null)
|
if (relayCache == null)
|
||||||
@@ -90,7 +91,7 @@ namespace linker.messenger.relay.server
|
|||||||
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
|
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},6");
|
||||||
if (relayMessage.Type == RelayMessengerType.Ask && relayServerNodeTransfer.Validate(relayCache) == false)
|
if (relayMessage.Type == RelayMessengerType.Ask && relayServerNodeTransfer.Validate(relayCache) == false)
|
||||||
{
|
{
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
@@ -98,7 +99,7 @@ namespace linker.messenger.relay.server
|
|||||||
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
|
await socket.SendToAsync(new byte[] { 1 }, ep).ConfigureAwait(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},7");
|
||||||
//流量统计
|
//流量统计
|
||||||
Add(flowKey, relayCache.FromName, relayCache.ToName, relayCache.GroupId, memory.Length, 0);
|
Add(flowKey, relayCache.FromName, relayCache.ToName, relayCache.GroupId, memory.Length, 0);
|
||||||
//回应
|
//回应
|
||||||
@@ -113,6 +114,7 @@ namespace linker.messenger.relay.server
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},8");
|
||||||
|
|
||||||
//请求
|
//请求
|
||||||
RelayTrafficCacheInfo trafficCacheInfo = new RelayTrafficCacheInfo { Cache = relayCache, Sendt = 0, Limit = new RelaySpeedLimit(), Key = flowKey };
|
RelayTrafficCacheInfo trafficCacheInfo = new RelayTrafficCacheInfo { Cache = relayCache, Sendt = 0, Limit = new RelaySpeedLimit(), Key = flowKey };
|
||||||
@@ -123,8 +125,9 @@ namespace linker.messenger.relay.server
|
|||||||
relayServerNodeTransfer.AddTrafficCache(trafficCacheInfo);
|
relayServerNodeTransfer.AddTrafficCache(trafficCacheInfo);
|
||||||
relayServerNodeTransfer.IncrementConnectionNum();
|
relayServerNodeTransfer.IncrementConnectionNum();
|
||||||
|
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},9");
|
||||||
await socket.SendToAsync(new byte[] { 0 }, ep).ConfigureAwait(false);
|
await socket.SendToAsync(new byte[] { 0 }, ep).ConfigureAwait(false);
|
||||||
|
LoggerHelper.Instance.Debug($"udp from {ep},10");
|
||||||
}
|
}
|
||||||
private async Task CopyToAsync(RelayUdpNatInfo nat, Socket socket, IPEndPoint ep, Memory<byte> memory)
|
private async Task CopyToAsync(RelayUdpNatInfo nat, Socket socket, IPEndPoint ep, Memory<byte> memory)
|
||||||
{
|
{
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
v1.9.1
|
v1.9.1
|
||||||
2025-09-11 17:11:07
|
2025-09-11 21:15:46
|
||||||
1. 一些累计更新
|
1. 一些累计更新
|
||||||
2. 服务器转发多节点
|
2. 服务器转发多节点
|
||||||
3. 虚拟网卡下伪造ACK为TCP-in-TCP隧道提速
|
3. 虚拟网卡下伪造ACK为TCP-in-TCP隧道提速
|
||||||
|
Reference in New Issue
Block a user