Vyřešeno: net core získat vzdálenou ip

Jistě, začněme tím, že si povíme o .NET Core a problému se získáním vzdálené IP adresy.

.NET Core je bezplatná, multiplatformní, open source vývojářská platforma pro vytváření mnoha typů aplikací, včetně webových aplikací a služeb. Získání vzdálené IP adresy v aplikaci .NET Core však může někdy představovat problém. To je důležité, protože přístup k IP adrese klienta umožňuje vylepšené protokolování, personalizované zážitky a další.

K vyřešení tohoto problému můžeme využít HttpContext poskytovaný vestavěnými knihovnami .NET Core.

Implementace řešení

Začneme přístupem k HttpContext v metodě kontroleru, kde potřebujeme IP klienta. The HttpContext objekt obsahuje informace specifické pro HTTP o jednotlivém požadavku HTTP.

veřejný IActionResult Index()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// další logika…
}

Tím získáte klienta IP adresa. Metoda HttpContext.Connection.RemoteIpAddress vrací IP adresu vzdáleného klienta. Mějte však na paměti, že to nemusí vždy vrátit očekávaný výsledek, zvláště když je váš server za nástrojem pro vyrovnávání zatížení nebo používá middleware pro dopředné hlavičky.

Hlubší pochopení Kodexu

Poskytnutý kód C# používá HttpContext objekt, který je vlastností ControllerBase a obsahuje informace o požadavku HTTP. To zahrnuje položky, jako jsou informace o hostiteli, podrobnosti o cestě a velmi důležitá vlastnost Connection.

Vlastnost Connection je typu ConnectionInfo, z Microsoft.AspNetCore.Http.Features jmenný prostor. Kromě jiných vlastností obsahuje `RemoteIpAddress`, vlastnost, která získá IP adresu z požadavku HTTP.

Server však může být za nástrojem pro vyrovnávání zatížení nebo proxy. Tito zprostředkovatelé mohou změnit informace původního požadavku HTTP, včetně zdroje IP adresa. Když k tomu dojde, vlastnost `RemoteIpAddress` udává IP adresu zprostředkujícího zařízení, nikoli původního klienta.

Řešení 'Forwarded Headers Middleware'

Pro aplikace běžící za takovými zprostředkovateli poskytuje .NET Core `ForwardedHeadersMiddleware`, middleware, který pracuje s hlavičkami 'X-Forwarded-*' a uchovává původní podrobnosti požadavku HTTP.

Chcete-li povolit `ForwardedHeadersMiddleware`, přidejte do své třídy Startup.cs následující konfiguraci.

public void Configure (aplikace IApplicationBuilder, prostředí IWebHostEnvironment)
{
app.UseForwardedHeaders(nové ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

// ...
}

Využití HttpContext a Forwarded Headers

Poté můžete pokračovat v používání HttpContext.Connection.RemoteIpAddress jako dříve, ale nyní, až bude k dispozici, bude vracet IP adresu klienta správně, i když je server za proxy nebo load balancerem.

Pamatujte, že ve složité oblasti webového programování, middlewaru a správného používání kontextových objektů jako HttpContext může velmi zjednodušit zdánlivě obtížný úkol, jako je získání vzdálené IP. Abychom získali IP adresu klienta, musíme porozumět složitosti protokolu HTTP, roli middlewaru, jako je „ForwardedHeadersMiddleware“, a užitečnosti HttpContext objekt.

Související příspěvky:

Zanechat komentář