获取客户端的IP地址
获取客户端的IP地址
#region public static string GetClientIP() 获取客户端的IP地址
/// <summary>
/// 获取客户端的IP地址
/// </summary>
/// <returns></returns>
public static string GetClientIP()
{
string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(result))
{
//可能有代理
if (result.IndexOf(".", StringComparison.Ordinal) == -1)
//没有"."肯定是非IPv4格式
result = null;
else
{
if (result.IndexOf(",", StringComparison.Ordinal) != -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 (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress;
return result;
}
/// <summary>
/// ip判断
/// </summary>
/// <param name="str1"></param>
/// <returns></returns>
private static bool IsIPAddress(string str1)
{
if (string.IsNullOrEmpty(str1) || str1.Length < 7 || str1.Length > 15)
return false;
string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
return regex.IsMatch(str1);
}
#endregion
posted @ 2019-01-23 13:19 波霸38 阅读( …) 评论( …) 编辑 收藏
还没有评论,来说两句吧...