This commit is contained in:
snltty
2025-09-11 21:15:46 +08:00
parent 2614a21736
commit d033217995
3 changed files with 21 additions and 21 deletions

View File

@@ -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;
} }

View File

@@ -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)
{ {

View File

@@ -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隧道提速