用代码实现获取本地IP地址值(ASP.NET)
在系统制作获取本地IP值并添加到数据库中时出现了问题:我用的代码是string ip = Request.UserHostAddress;运行没有报错,但是在数据库中IP值显示“*”号,应该是获取失败。请问正确的代码是什么?谢谢。 ASP.NET 数据库 --------------------编程问答--------------------
--------------------编程问答--------------------
// <summary>
/// 取得客户端真实IP。如果有代理则取第一个非内网地址
/// by flower.b
/// </summary>
public static string IPAddress
{
get
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (result != null && result != String.Empty)
{
//可能有代理
if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式
result = null;
else
{
if (result.IndexOf(",") != -1)
{
//有“,”,估计多个代理。取第一个不是内网的IP。
result = result.Replace(" ", "").Replace("'", "");
string[] temparyip = result.Split(",;".ToCharArray());
for (int i = 0; i < temparyip.Length; i++)
{
if (IsIPAddress(temparyip[i])
&& temparyip[i].Substring(0, 3) != "10."
&& temparyip[i].Substring(0, 7) != "192.168"
&& temparyip[i].Substring(0, 7) != "172.16.")
{
return temparyip[i]; //找到不是内网的地址
}
}
}
else if (IsIPAddress(result)) //代理即是IP格式
return result;
else
result = null; //代理中的内容 非IP,取IP
}
}
string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (null == result || result == String.Empty)
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (result == null || result == String.Empty)
result = HttpContext.Current.Request.UserHostAddress;
return result;
}
}
public static string GetIPAddress()
{
string ipv4 = String.Empty;
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = IPA.ToString();
break;
}
}
if (ipv4 != String.Empty)
{
return ipv4;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = IPA.ToString();
break;
}
}
return ipv4;
}
192.168.1.1 --------------------编程问答-------------------- like this?
http://www.cnblogs.com/insus/archive/2013/01/22/2871369.html --------------------编程问答--------------------
/// <summary>
/// 获得客户端IP
/// </summary>
public static string ClientIP
{
get
{
string ip;
string[] temp;
bool isErr = false;
if (HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"] == null)
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
else
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_ForWARDED_For"].ToString();
if (ip.Length > 15)
isErr = true;
else
{
temp = ip.Split('.');
if (temp.Length == 4)
{
for (int i = 0; i < temp.Length; i++)
{
if (temp[i].Length > 3) isErr = true;
}
}
else
isErr = true;
}
if (isErr)
return "1.1.1.1";
else
return ip;
}
}
补充:.NET技术 , ASP.NET