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