43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
| using System.Linq;
 | |
| using System.Text.RegularExpressions;
 | |
| using Microsoft.AspNetCore.Http;
 | |
| 
 | |
| namespace IRaCIS.Core.Infrastructure
 | |
| {
 | |
|     public class IPHelper
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// 是否为ip
 | |
|         /// </summary>
 | |
|         /// <param name="ip"></param>
 | |
|         /// <returns></returns>
 | |
|         public static bool IsIP(string ip)
 | |
|         {
 | |
|             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?)$");
 | |
|         }
 | |
| 
 | |
|         public static string GetIP(HttpRequest request)
 | |
|         {
 | |
|             if (request == null)
 | |
|             {
 | |
|                 return "";
 | |
|             }
 | |
| 
 | |
|             string ip = request.Headers["X-Real-IP"].FirstOrDefault();
 | |
|             if (string.IsNullOrEmpty(ip))
 | |
|             {
 | |
|                 ip = request.Headers["X-Forwarded-For"].FirstOrDefault();
 | |
|             }
 | |
|             if (string.IsNullOrEmpty(ip))
 | |
|             {
 | |
|                 ip = request.HttpContext?.Connection?.RemoteIpAddress?.ToString();
 | |
|             }
 | |
|             if (string.IsNullOrEmpty(ip) || !IsIP(ip))
 | |
|             {
 | |
|                 ip = "127.0.0.1";
 | |
|             }
 | |
| 
 | |
|             return ip;
 | |
|         }
 | |
|     }
 | |
| } |