Løst: net core få remote ip

Sidste ændring: 09/11/2023
Forfatter: C SourceTrail

Selvfølgelig, lad os starte med at tale om .NET Core og problemet med at få en ekstern IP-adresse.

.NET Core er en gratis open source-udviklerplatform på tværs af platforme til at bygge mange typer applikationer, herunder webapps og -tjenester. Det kan dog nogle gange være en udfordring at få en ekstern IP-adresse i en .NET Core-applikation. Dette er vigtigt, fordi adgang til klientens IP-adresse giver mulighed for forbedret logning, personlige oplevelser og mere.

For at løse dette kan vi bruge HttpContext fra .NET Core's indbyggede biblioteker.

Implementering af løsningen

Vi starter med at tilgå HttpContext i controller-metoden, hvor vi skal bruge klientens IP. Det HttpContext objektet indeholder HTTP-specifik information om en individuel HTTP-anmodning.

offentligt IActionResult Index()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// yderligere logik...
}

Dette giver dig kundens IP-adresse. Metoden HttpContext.Connection.RemoteIpAddress returnerer IP-adressen på fjernklienten. Bemærk dog, at dette muligvis ikke altid returnerer det forventede resultat, især når din server er bag en load balancer eller bruger forward headers middleware.

En dybere forståelse af koden

Den medfølgende C#-kode bruger HttpContext objekt, som er en egenskab for ControllerBase og indeholder oplysninger om HTTP-anmodningen. Dette inkluderer elementer såsom værtsoplysninger, stidetaljer og den altafgørende forbindelsesegenskab.

Egenskaben Connection er af typen ConnectionInfo, fra Microsoft.AspNetCore.Http.Features navneområde. Blandt andre egenskaber indeholder den `RemoteIpAddress`, en egenskab, der henter IP-adressen fra HTTP-anmodningen.

Serveren kan dog være bag en load balancer eller proxy. Disse mellemmænd kan ændre den oprindelige HTTP-anmodningsoplysninger, herunder kilden IP-adresse. Når dette sker, giver egenskaben `RemoteIpAddress` den mellemliggende enheds IP-adresse, ikke den oprindelige klients.

'Forwarded Headers Middleware'-løsningen

For applikationer, der kører bag sådanne mellemmænd, leverer .NET Core `ForwardedHeadersMiddleware`, en middleware, der arbejder med 'X-Forwarded-*'-headere til at indeholde de originale HTTP-anmodningsdetaljer.

For at aktivere `ForwardedHeadersMiddleware` skal du tilføje følgende konfiguration til din Startup.cs-klasse.

public void Configure (IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseForwardedHeaders(nye ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

// ...
}

Udnyttelse af HttpContext og videresendte overskrifter

Du kan derefter fortsætte med at bruge HttpContext.Connection.RemoteIpAddress som før, men nu, når den er tilgængelig, vil den returnere klientens IP-adresse korrekt, selvom serveren er bag en proxy eller load balancer.

Husk, at i det komplekse område af webprogrammering, middleware og korrekt brug af kontekstobjekter som f.eks HttpContext kan gøre en tilsyneladende vanskelig opgave som at få en ekstern IP ret simpel. For at hente klientens IP-adresse skal vi forstå forviklingerne af HTTP-protokollen, rollen af ​​middleware som 'ForwardedHeadersMiddleware' og nytten af HttpContext objekt.

Relaterede indlæg: