예제 #1
0
        public void LoadLists()
        {
            PathWhiteList = Path.Combine(SanyaPlugin.Instance.Config.DataDirectory, "VPN-Whitelist.txt");
            PathBlackList = Path.Combine(SanyaPlugin.Instance.Config.DataDirectory, "VPN-Blacklist.txt");
            IPWhiteList.Clear();
            IPBlackList.Clear();

            if (!File.Exists(PathWhiteList))
            {
                File.WriteAllText(PathWhiteList, null);
            }
            if (!File.Exists(PathBlackList))
            {
                File.WriteAllText(PathBlackList, null);
            }

            foreach (var line in File.ReadAllLines(PathWhiteList))
            {
                if (IPAddress.TryParse(line, out var address))
                {
                    IPWhiteList.Add(address);
                }
            }

            foreach (var line2 in File.ReadAllLines(PathBlackList))
            {
                if (IPAddress.TryParse(line2, out var address2))
                {
                    IPBlackList.Add(address2);
                }
            }
        }
예제 #2
0
 /// <summary>
 /// 判断IP地址是否被黑名单
 /// </summary>
 /// <param name="ip"></param>
 /// <returns></returns>
 public static bool IsDenyIpAddress(this string ip)
 {
     if (IPWhiteList.Contains(ip))
     {
         return(false);
     }
     return(DenyAreaIP.SelectMany(x => x.Value).Union(DenyIP.Split(',')).Contains(ip) || DenyIPRange.Any(kv => kv.Key.StartsWith(ip.Split('.')[0]) && ip.IpAddressInRange(kv.Key, kv.Value)));
 }
예제 #3
0
 public void AddWhiteList(IPAddress address)
 {
     IPWhiteList.Add(address);
     using (StreamWriter writer = File.AppendText(PathWhiteList))
     {
         writer.WriteLine(address);
     }
 }
예제 #4
0
        /// <summary>
        /// 判断IP地址是否被黑名单
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public static bool IsDenyIpAddress(this string ip)
        {
            if (IPWhiteList.Contains(ip))
            {
                return(false);
            }

            return(DenyIP.Contains(ip) || DenyIPRange.AsParallel().Any(kv => kv.Key.StartsWith(ip.Split('.')[0]) && ip.IpAddressInRange(kv.Key, kv.Value)));
        }
예제 #5
0
 public override void OnActionExecuting(ActionExecutingContext context)
 {
     if (!HttpContext.Current.User.Identity.IsAuthenticated && context.ActionDescriptor.ControllerDescriptor.ControllerName != "ScheduledPublish")//'ScheduledPublish' fix for Umbraco 7.1.8
     {
         if (!context.ActionDescriptor.GetCustomAttributes(typeof(AllowAllFilterAttribute), false).Any())
         {
             IPWhiteList whiteList = new IPWhiteList();
             //string ipAddress = HttpContext.Current.Request.UserHostAddress;
             string ipAddress = HttpContext.Current.Request["HTTP_CF_CONNECTING_IP"];
             //string szXForwardedFor = HttpContext.Current.Request.ServerVariables["X_FORWARDED_FOR"];
             if (!whiteList.Contains(ipAddress))
             {
                 context.Result = new RedirectResult("/Login");
             }
         }
     }
     base.OnActionExecuting(context);
 }
예제 #6
0
 public bool IsWhiteListed(IPAddress address) => IPWhiteList.Contains(address);