Obtenir l'adresse IP du client lors de l'utilisation de l'équilibrage de charge dans ASP.NET Core

Dans le cas de l'équilibrage de charge, l'adresse IP de l'équilibrage de charge est obtenue via context.Connection.RemoteIpAddress, et l'adresse IP réelle du client doit être obtenue via l'en-tête de requête X-Forwarded-For.

La méthode précédente consiste à obtenir directement l'en-tête de requête X-Forwarded-For par vous-même, le code est le suivant :

public static class HttpContextExtensions 
{ 
    public static string GetUserIp (ce contexte HttpContext) 
    { 
        var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); 
        if (string.IsNullOrEmpty(ip)) 
        { 
            ip = context.Connection.RemoteIpAddress?.ToString(); 
        } 
        renvoie GetSingleIP(ip); 
    } 

    chaîne statique privée GetSingleIP(string ip) 
    { 
        if (!string.IsNullOrEmpty(ip)) 
        { 
            var commaIndex = ip.LastIndexOf(","); 
            if (commaIndex >= 0) 
            { 
                ip = ip.Substring(commaIndex + 1); 
            } 
        } 
        renvoie ip ; 
    } 
}

Utilisez maintenant le middleware d'en-têtes transférés intégré du noyau asp.net pour y parvenir.

Configurez d'abord ForwardedHeadersOptions dans Startup.ConfigureServices et n'avez besoin de spécifier que ForwardedHeaders.XForwardedFor pour le scénario d'obtention de l'adresse IP du client.

services.Configure<ForwardedHeadersOptions>(options => 
{ 
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; 
    options.KnownNetworks.Clear(); 
    options.KnownProxies.Clear(); 
});

Remarque 1 : si l'équilibrage de charge ne transfère pas les requêtes via l'adresse de bouclage sur la machine locale, options.KnownNetworks.Clear et options.KnownProxies.Clear doivent être ajoutés.

Remarque 2 : Si la variable d'environnement ASPNETCORE_FORWARDEDHEADERS_ENABLED est définie sur true, le code de configuration ci-dessus n'est pas nécessaire.

Ajoutez ensuite le middleware Forwarded Headers dans Startup.Configure.

app.UseForwardedHeaders()

De cette manière, la véritable adresse IP du client peut être obtenue via RemoteIpAddress.

var ip = Request.HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString();

Je suppose que tu aimes

Origine blog.csdn.net/qianjiu/article/details/121996186
conseillé
Classement