Request.UserHostAddress return IP address of Load Balancer

c#, load-balancing, request

Solution

From within your own application, if nothing else has been done to help you, you're stuck. That's as much information as is available to you.

If you're lucky, your load-balancer has been configured to add one or more extra headers with information about the original request.

One common solution is the `X-Forwarded-For` header:

The X-Forwarded-For (XFF) HTTP header field is a de facto standard for identifying the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer.

which you would then access via the `Request.Headers` property.

But discovering whether this (or another) header is available is not something we can help with - you need to talk to the people who configured the load balancer for your organization.

Problem

I have a critical line of code in my site that worked in our development environment but not on production. Well, I say it worked in development but the truth is it gave `::1`, which is the IPv6 loopback address. Anyway, what I wanted to do was capture the IP address of the user who came to the site. I therefore, used `Request.UserHostAddress` to do that. On development, as I said, it gave me the loopback address, which is correct, since I was running the site from my machine. On live it did something entirely different. It always returned the address of the load balancer. What I am trying to understand is this. Was I wrong to use Request.UserHostAddress to capture the user's IP address or is there something wrong with our network setup or something else? Thanks, Sachin

Original source