네트워크에 연결된 모든 컴퓨터는 고유한 식별자를 가지고 있습니다. 우편물에 수신자의 주소를 적어 보내는 것처럼, 컴퓨터도 이 고유한 식별자를 사용하여 네트워크상의 특정 컴퓨터로 데이터를 전송합니다. 오늘날 인터넷에 연결된 모든 컴퓨터를 포함한 대부분의 네트워크는 TCP/IP 프로토콜을 통신 표준으로 사용하고 있으며, TCP/IP 프로토콜에서 컴퓨터의 고유 식별자를 바로 IP 주소(IP Address)라고 부릅니다.
이 글에서는 ASP.NET MVC C# 환경에서 클라이언트(사용자)의 IP 주소를 확인하는 다양한 방법을 살펴보겠습니다.
1. HttpRequest.UserHostAddress 속성 사용하기
가장 간단하고 일반적인 방법은 Request.UserHostAddress 속성을 활용하는 것입니다. 컨트롤러 내부에서는 Request 객체에 바로 접근할 수 있습니다.
컨트롤러에서 사용하는 예제
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
public class HomeController : Controller
{
public string Index()
{
string ipAddress = Request.UserHostAddress;
return ipAddress;
}
}
}컨트롤러 외부(일반 클래스)에서 사용하는 예제
만약 컨트롤러가 아닌 일반 클래스나 헬퍼 클래스에서 IP 주소를 가져와야 한다면, HttpContext.Current를 통해 현재 요청 정보에 접근할 수 있습니다.
using System.Web;
namespace DemoMvcApplication.Helpers
{
public static class DemoHelperClass
{
public static string GetIPAddress()
{
string ipAddress = HttpContext.Current.Request.UserHostAddress;
return ipAddress;
}
}
}2. ServerVariables 컬렉션 사용하기
또 다른 방법으로는 Request.ServerVariables["REMOTE_ADDR"]을 사용하는 것입니다. REMOTE_ADDR은 요청을 보낸 클라이언트의 IP 주소를 담고 있는 서버 변수입니다.
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
public class HomeController : Controller
{
public string Index()
{
string ipAddress = Request.ServerVariables["REMOTE_ADDR"];
return ipAddress;
}
}
}실행 결과

위 예제를 로컬 환경에서 실행하면 localhost의 IP 주소인 ::1이 출력됩니다. localhost는 일반적으로 IPv4 루프백 주소인 127.0.0.1과 IPv6 루프백 주소인 ::1로 해석됩니다. 즉, 자기 자신의 컴퓨터에서 요청했기 때문에 루프백 주소가 반환되는 것이 정상적인 동작입니다.
정리
- 컨트롤러 내부:
Request.UserHostAddress또는Request.ServerVariables["REMOTE_ADDR"]사용 - 컨트롤러 외부:
HttpContext.Current.Request.UserHostAddress사용 - 로컬 실행 시 IPv4는
127.0.0.1, IPv6는::1이 반환됨
참고로, 애플리케이션이 프록시 서버나 로드 밸런서 뒤에서 운영되는 경우에는 실제 클라이언트 IP가 아닌 프록시의 IP가 반환될 수 있습니다. 이런 경우에는 X-Forwarded-For 헤더 값을 함께 확인하는 것이 좋습니다.