From 9e0ac74de77318dbe2fb8859c1a55b0ec98f3290 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Wed, 3 Aug 2022 19:42:02 +0200 Subject: [PATCH] get actual IP from connection --- .../MareSynchronosServer/Extensions.cs | 24 +++++++++++++++++++ .../MareSynchronosServer/Hubs/MareHub.cs | 7 +++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 MareSynchronosServer/MareSynchronosServer/Extensions.cs diff --git a/MareSynchronosServer/MareSynchronosServer/Extensions.cs b/MareSynchronosServer/MareSynchronosServer/Extensions.cs new file mode 100644 index 0000000..b74a1d6 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Extensions.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Http; + +namespace MareSynchronosServer +{ + public static class Extensions + { + public static string GetIpAddress(this IHttpContextAccessor accessor) + { + if (!string.IsNullOrEmpty(accessor.HttpContext.Request.Headers["CF-CONNECTING-IP"])) + return accessor.HttpContext.Request.Headers["CF-CONNECTING-IP"]; + + var ipAddress = accessor.HttpContext.GetServerVariable("HTTP_X_FORWARDED_FOR"); + + if (!string.IsNullOrEmpty(ipAddress)) + { + var addresses = ipAddress.Split(','); + if (addresses.Length != 0) + return addresses.Last(); + } + + return accessor.HttpContext.Connection.RemoteIpAddress.ToString(); + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs index b2a331d..d520d41 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.cs @@ -8,6 +8,7 @@ using MareSynchronosServer.Authentication; using MareSynchronosServer.Data; using MareSynchronosServer.Metrics; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; @@ -33,7 +34,7 @@ namespace MareSynchronosServer.Hubs } [HubMethodName(Api.InvokeHeartbeat)] - public async Task Heartbeat(string? characterIdentification) + public async Task Heartbeat(string characterIdentification) { MareMetrics.InitializedConnections.Inc(); @@ -86,8 +87,8 @@ namespace MareSynchronosServer.Hubs public override Task OnConnectedAsync() { - var feature = Context.Features.Get(); - _logger.LogInformation("Connection from " + feature.RemoteIpAddress); + var feature = Context.Features.Get(); + _logger.LogInformation("Connection from " + feature.GetIpAddress()); MareMetrics.Connections.Inc(); return base.OnConnectedAsync(); }