获取客户端的IP地址

柔光的暖阳◎ 2022-04-24 04:58 378阅读 0赞

获取客户端的IP地址

  1. #region public static string GetClientIP() 获取客户端的IP地址
  2. /// <summary>
  3. /// 获取客户端的IP地址
  4. /// </summary>
  5. /// <returns></returns>
  6. public static string GetClientIP()
  7. {
  8. string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  9. if (!string.IsNullOrEmpty(result))
  10. {
  11. //可能有代理
  12. if (result.IndexOf(".", StringComparison.Ordinal) == -1)
  13. //没有"."肯定是非IPv4格式
  14. result = null;
  15. else
  16. {
  17. if (result.IndexOf(",", StringComparison.Ordinal) != -1)
  18. {
  19. //有",",估计多个代理。取第一个不是内网的IP。
  20. result = result.Replace(" ", "").Replace("", "");
  21. string[] temparyip = result.Split(",;".ToCharArray());
  22. for (int i = 0; i < temparyip.Length; i++)
  23. {
  24. if (IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.")
  25. {
  26. return temparyip[i];//找到不是内网的地址
  27. }
  28. }
  29. }
  30. else if (IsIPAddress(result)) //代理即是IP格式
  31. return result;
  32. else
  33. result = null;//代理中的内容 非IP,取IP
  34. }
  35. }
  36. string ipAddress =
  37. (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null &&
  38. HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables
  39. ["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  40. if (string.IsNullOrEmpty(result))
  41. result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  42. if (string.IsNullOrEmpty(result))
  43. result = HttpContext.Current.Request.UserHostAddress;
  44. return result;
  45. }
  46. /// <summary>
  47. /// ip判断
  48. /// </summary>
  49. /// <param name="str1"></param>
  50. /// <returns></returns>
  51. private static bool IsIPAddress(string str1)
  52. {
  53. if (string.IsNullOrEmpty(str1) || str1.Length < 7 || str1.Length > 15)
  54. return false;
  55. string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
  56. Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
  57. return regex.IsMatch(str1);
  58. }
  59. #endregion

posted @ 2019-01-23 13:19 波霸38 阅读( …) 评论( …) 编辑 收藏

发表评论

表情:
评论列表 (有 0 条评论,378人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA获取客户IP地址

    场景:需要服务端获取到客户端得ip,然后塞到请求参数中。 自己整理了下这两种获取客户端IP得方法。目前自己在使用得是第二种。 1. 第一种方法