Решено: net core получава отдалечено ip

Последна актуализация: 09/11/2023
Автор: C SourceTrail

Разбира се, нека започнем, като говорим за .NET Core и проблема с получаването на отдалечен IP адрес.

.NET Core е безплатна, междуплатформена платформа за разработчици с отворен код за изграждане на много видове приложения, включително уеб приложения и услуги. Получаването на отдалечен IP адрес в приложение .NET Core обаче понякога може да представлява предизвикателство. Това е важно, защото достъпът до IP адреса на клиента позволява подобрено регистриране, персонализирани изживявания и др.

За да разрешим това, можем да използваме HttpContext, предоставен от вградените библиотеки на .NET Core.

Внедряване на Решението

Започваме с достъп до HttpContext в метода на контролера, където се нуждаем от IP адреса на клиента. The HttpContext обектът съдържа специфична за HTTP информация за отделна HTTP заявка.

публичен IActionResult Index()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// допълнителна логика…
}

Това ви носи на клиента IP адрес. Методът HttpContext.Connection.RemoteIpAddress връща IP адреса на отдалечения клиент. Обърнете внимание обаче, че това не винаги може да върне очаквания резултат, особено когато вашият сървър е зад балансиращо натоварване или използва мидълуер за предни заглавки.

По-задълбочено разбиране на кода

Предоставеният C# код използва HttpContext обект, който е свойство на ControllerBase и съдържа информация за HTTP заявката. Това включва елементи като информация за хоста, подробности за пътя и изключително важното свойство Connection.

Свойството Connection е от тип ConnectionInfo, от Microsoft.AspNetCore.Http.Features пространство от имена. Сред другите свойства, той съдържа `RemoteIpAddress`, свойство, което извлича IP адреса от HTTP заявката.

Сървърът обаче може да е зад балансьор на натоварването или прокси. Тези посредници може да променят информацията на оригиналната HTTP заявка, включително източника IP адрес. Когато това се случи, свойството `RemoteIpAddress` дава IP адреса на междинното устройство, а не този на оригиналния клиент.

Решението „Мидълуер за препратени заглавки“.

За приложения, работещи зад такива посредници, .NET Core предоставя `ForwardedHeadersMiddleware`, междинен софтуер, който работи със заглавки 'X-Forwarded-*', за да съхранява оригиналните детайли на HTTP заявката.

За да активирате `ForwardedHeadersMiddleware`, добавете следната конфигурация към вашия клас Startup.cs.

public void Configure (приложение IApplicationBuilder, IWebHostEnvironment env)
{
app.UseForwardedHeaders(нови ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

// ...
}

Използване на HttpContext и препратени заглавки

След това можете да продължите да използвате HttpContext.Connection.RemoteIpAddress както преди, но сега, когато е наличен, той ще върне IP адреса на клиента правилно, дори ако сървърът е зад прокси или балансиращо натоварване.

Не забравяйте, че в сложната област на уеб програмирането, междинният софтуер и правилното използване на контекстни обекти като HttpContext може да направи привидно трудна задача като получаване на отдалечен IP доста проста. За да извлечем IP адреса на клиента, трябва да разберем тънкостите на HTTP протокола, ролята на междинния софтуер като „ForwardedHeadersMiddleware“ и полезността на HttpContext обект.

Подобни публикации:

Оставете коментар