ASP.NET: get external IP address

I developed site. I need to get IP of site visitors.
I try to use Request, but it have only internal IP:

Response.Write(Request.ServerVariables["REMOTE_ADDR"]);

I looked all keys in Server Variables collection – the same result:

foreach (string var in Request.ServerVariables)
{
    Response.Write(Request[var]);
}

How can I get external IP address?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can use it to get External (public) IP Address..

public static string getExternalIp()
    {
        try
        {
            string externalIP;
            externalIP = (new WebClient()).DownloadString("http://checkip.dyndns.org/");
            externalIP = (new Regex(@"d{1,3}.d{1,3}.d{1,3}.d{1,3}"))
                         .Matches(externalIP)[0].ToString();
            return externalIP;
        }
        catch { return null; }
    }

Method 2

This it part of my implementation for WebTracking. So here you go a snippet for IpAddress retrieval. You can read more about the Server Variables at Wikipedia.

    /// <summary>
    /// Get ip address from request
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    private string GetIpAddress(HttpRequest request)
    {
        if (request.ServerVariables.IsNull()) return null;

        var _realAddress = request.ServerVariables[@"HTTP_X_FORWARDED_FOR"];
        if (_realAddress.IsNullOrEmpty())
        {
            _realAddress = request.ServerVariables[@"HTTP_FORWARDED"];
        }
        if (_realAddress.IsNullOrEmpty())
        {
            _realAddress = request.ServerVariables[@"REMOTE_ADDR"];
        }

        return _realAddress;
    }

Method 3

Are you behind a load-balancer/proxy? If so, inspect the headers collection of the request for headers similar to X-FORWARDED-FOR.

Method 4

You can use like this

String lstrIpAddress;
if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null || Request.ServerVariables["HTTP_CLIENT_IP"] != null)
    lstrIpAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
else
    lstrIpAddress = Request.ServerVariables["REMOTE_ADDR"];

Method 5

you can simply use this nuget package.
https://www.nuget.org/packages/IpPublicKnowledge/

easy and simple. here is an example :

// Get Public IP
            var ip = IPK.GetMyPublicIp();

            //Get all IP infos
            var IPinfo = IPK.GetIpInfo(ip);

            //print some info
            Console.WriteLine("*--------------------------- IPK -----------------------------*");

            Console.WriteLine("My public IP : " + IPinfo.IP);
            Console.WriteLine();
            Console.WriteLine("My ISP : " + IPinfo.isp);
            Console.WriteLine();
            Console.WriteLine("My Country : " + IPinfo.country);
            Console.WriteLine();
            Console.WriteLine("My Languages : ");

            foreach (var lang in IPinfo.languages)
            {
                Console.WriteLine(" " + lang.Key + " : " + lang.Value);
            }

            Console.WriteLine("*-------------------------------------------------------------*");
            Console.Read();


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x