2

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?

1
  • I found the problem. I used VPN connetion, that's why ServerVariables returns me internal IP. I closed VPN connection and it returned me correct external IP. Commented Apr 12, 2013 at 6:48

5 Answers 5

11

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; } } 
Sign up to request clarification or add additional context in comments.

3 Comments

Straight and forward. Cool.
I find that checkip.dyndns.org is terribly slow and often fails to respond. I recommend that a simple PHP page is used on an external webserver for this; same output, but far more reliable.
Just double checked there is no issue with checkip domain it takes arround 523 ms to load so I think that is fine enough.
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; } 

Comments

1

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

Comments

1

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"]; 

2 Comments

It doesn't help. Request.ServerVariables["HTTP_X_FORWARDED_FOR"] - returns null and Request.ServerVariables["REMOTE_ADDR"] returns internal IP
This only works for ASP pages (which is what the question asks, but I thought I'd mention this).
1

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(); 

1 Comment

This will get the IP address of the server, not of the clients using the web site.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.