Blog Dla Programistów C#/.NET

piątek, 23 stycznia 2026

Często w aplikacjach webowych potrzebujemy poznać adres IP użytkownika. Może to być przydatne np. do logowania aktywności, analiz ruchu czy ograniczania dostępu dla określonych adresów. Na szczęście platforma .NET (w tym ASP.NET) udostępnia proste sposoby pobrania adresu IP klienta. W tym artykule pokazuję, jak to zrobić zarówno w nowoczesnym ASP.NET Core, jak i we wcześniejszych aplikacjach ASP.NET na .NET Framework.

Adres IP w .NET - Jak Go Pobrać w Aplikacji ASP.NET?

Pobieranie adresu IP w ASP.NET Core (.NET 5+)


W aplikacjach ASP.NET Core (czyli na platformie .NET 5 i nowszych) dostęp do adresu IP klienta uzyskujemy przez właściwość HttpContext.Connection.RemoteIpAddress. Ta właściwość zwraca obiekt IPAddress z adresem IP zdalnego klienta wykonującego żądanie HTTP. Możemy go łatwo przekonwertować na tekst (string), np. w kontrolerze ASP.NET Core MVC lub API:

/* Przykład w metodzie kontrolera ASP.NET Core */
string clientIp = HttpContext.Connection.RemoteIpAddress?.ToString();
Console.WriteLine($"Adres IP klienta: {clientIp}");

Powyższy kod pobierze adres IP i wyświetli go. Jeśli aplikację uruchomimy lokalnie (np. podczas developmentu), to najpewniej zobaczymy adres ::1 - jest to adres loopback IPv6, odpowiednik 127.0.0.1 dla IPv4. Innymi słowy, kiedy klientem i serwerem jest ta sama maszyna (lokalny host), RemoteIpAddress zwróci adres lokalny.

W środowisku produkcyjnym, gdy użytkownicy łączą się zdalnie, RemoteIpAddress zwróci rzeczywisty adres IP klienta. Trzeba jednak pamiętać o jednej kwestii: proxy i load balancery. Jeśli nasza aplikacja działa za serwerem pośredniczącym (np. reverse proxy typu Nginx, Cloudflare czy AWS ELB), to domyślnie RemoteIpAddress może zwrócić IP tego pośrednika zamiast oryginalnego IP użytkownika. 

W takich scenariuszach warto:
    • albo odczytać nagłówek HTTP X-Forwarded-For, który zwykle zawiera prawdziwy adres IP klienta przekazany przez proxy,
    • albo poprawnie skonfigurować tzw. Forwarded Headers Middleware w ASP.NET Core (dodając w Startup odpowiednią konfigurację), by framework automatycznie uwzględniał adresy z nagłówków Forwarded-For.

Dzięki temu zapewnimy, że otrzymamy właściwy adres IP użytkownika także w środowisku z proxy. Jeśli nie korzystamy z żadnych proxy, nie musimy się tym przejmować, wystarczy proste użycie HttpContext.Connection.RemoteIpAddress.


Pobieranie adresu IP w starszych aplikacjach ASP.NET (Framework)


W starszym modelu aplikacji ASP.NET (np. ASP.NET MVC 4/5 na .NET Framework lub WebForms) nie ma właściwości HttpContext.Connection.RemoteIpAddress. Zamiast tego najczęściej używano właściwości Request.UserHostAddress lub kolekcji Request.ServerVariables. Przykładowo, aby pobrać IP klienta w .NET Framework, można wykorzystać następujące podejście:

/* Przykład w starszej aplikacji ASP.NET (System.Web) */
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

Najpierw sprawdzamy nagłówek HTTP_X_FORWARDED_FOR, jeśli użytkownik jest za proxy, ten nagłówek może zawierać jego oryginalny adres IP. Jeżeli nagłówek jest pusty, wtedy bezpośrednio pobieramy adres z REMOTE_ADDR, który zwykle zawiera adres IP klienta w typowej sytuacji bez proxy. Takie podejście jest uznawane za lepsze niż poleganie wyłącznie na Request.UserHostAddress, ponieważ właściwość UserHostAddress potrafi czasem zwrócić jedynie adres samego proxy zamiast faktycznego adresu użytkownika.

Uwaga: Analogicznie jak w przypadku ASP.NET Core, także tutaj obecność proxy wpływa na sposób pobierania IP, dlatego sprawdzenie X-Forwarded-For bywa konieczne. Jeśli aplikacja działa w środowisku IIS, można też rozważyć włączenie odpowiednich ustawień przekazywania adresu IP (np. w ARR). W czystym środowisku (bez proxy) Request.UserHostAddress lub ServerVariables["REMOTE_ADDR"] w zupełności wystarczą do uzyskania IP klienta.


Podsumowanie


Pobranie adresu IP użytkownika w .NET jest na ogół proste, w nowszych aplikacjach ASP.NET Core używamy właściwości HttpContext.Connection.RemoteIpAddress, a w starszych aplikacjach ASP.NET możemy posłużyć się Request.ServerVariables (lub ewentualnie UserHostAddress) z uwzględnieniem nagłówków proxy. Warto pamiętać o specyfice środowiska, w jakim działa nasza aplikacja (czy stoi za proxy, czy nie), aby mieć pewność, że uzyskany adres IP jest tym, którego potrzebujemy.

Mam nadzieję, że ten krótki poradnik okazał się pomocny. Jeśli interesuje Cię tworzenie aplikacji w C#/.NET i chcesz nauczyć się więcej (lub dopiero zaczynasz od zera), zachęcam do sprawdzenia mojego szkolenia online Zostań Programistą .NET. W tym szkoleniu pokazuję cały proces od podstaw - jak w 15 tygodni przejść drogę od nowicjusza do pierwszej pracy jako programista .NET. To świetna opcja, aby zdobyć solidne fundamenty i praktyczne umiejętności pod okiem doświadczonego mentora.

Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz

Wyszukiwarka

© Copyright 2026 modestprogrammer.pl | Sztuczna Inteligencja | Regulamin | Polityka prywatności. Design by Kazimierz Szpin. Wszelkie prawa zastrzeżone.