IPHelper.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Microsoft.AspNetCore.Http;
  2. using System.Linq;
  3. using System.Net.NetworkInformation;
  4. using System.Text.RegularExpressions;
  5. namespace ZhonTai.Common.Helpers
  6. {
  7. public class IPHelper
  8. {
  9. /// <summary>
  10. /// 是否为ip
  11. /// </summary>
  12. /// <param name="ip"></param>
  13. /// <returns></returns>
  14. public static bool IsIP(string ip)
  15. {
  16. return Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
  17. }
  18. /// <summary>
  19. /// 获得IP地址
  20. /// </summary>
  21. /// <param name="request"></param>
  22. /// <returns></returns>
  23. public static string GetIP(HttpRequest request)
  24. {
  25. if (request == null)
  26. {
  27. return "";
  28. }
  29. string ip = request.Headers["X-Real-IP"].FirstOrDefault();
  30. if (ip.IsNull())
  31. {
  32. ip = request.Headers["X-Forwarded-For"].FirstOrDefault();
  33. }
  34. if (ip.IsNull())
  35. {
  36. ip = request.HttpContext?.Connection?.RemoteIpAddress?.ToString();
  37. }
  38. if (ip.IsNull() || !IsIP(ip.Split(":")[0]))
  39. {
  40. ip = "127.0.0.1";
  41. }
  42. return ip;
  43. }
  44. }
  45. }