예제 #1
0
        /// <summary>
        /// Проверка IP в белом списке
        /// </summary>
        /// <param name="IP">IPv4/6</param>
        public static bool IsWhiteIP(string IP)
        {
            // IPv6
            if (IP.Contains(":"))
            {
                if (IPv6ToRegex != "^$" && Regex.IsMatch(IP, IPv6ToRegex))
                {
                    return(true);
                }

                return(false);
            }

            // IPv4
            return(IPNetwork.CheckToIPv4(IP, IPv4ToRange, out _));
        }
예제 #2
0
        /// <summary>
        /// Проверить IPv4/6
        /// </summary>
        /// <param name="RemoteIpAddress">IPv4/6</param>
        /// <param name="data">Время и причина блокировки</param>
        /// <param name="BlockedHost">Домен для которого делать проверку</param>
        public static bool CheckIP(string RemoteIpAddress, out ModelIPtables data, string BlockedHost = null)
        {
            data = null;

            // Блокировка по домену
            if (BlockedHost != null)
            {
                if (memoryCache.TryGetValue(KeyToMemoryCache.IPtables(RemoteIpAddress, BlockedHost), out data))
                {
                    Trigger.OnReturn401((RemoteIpAddress, BlockedHost, "IP"));
                    return(true);
                }
            }

            // IPv6
            if (RemoteIpAddress.Contains(":"))
            {
                #region Локальный метод - "IsMatch"
                bool IsMatch(out string matchIP)
                {
                    var match = Regex.Match(RemoteIpAddress, IPv6ToRegex);

                    if (match.Length > 0 && RemoteIpAddress.Contains(match.Groups[1].Value))
                    {
                        matchIP = match.Groups[1].Value;
                        return(true);
                    }

                    matchIP = null;
                    return(false);
                }

                #endregion

                if (IPv6ToRegex != "^$" && IsMatch(out string matchIPv6))
                {
                    if (!IPv6ToModels.TryGetValue(matchIPv6, out data))
                    {
                        data = new ModelIPtables();
                    }
                    Trigger.OnReturn401((RemoteIpAddress, BlockedHost, "IP"));
                    return(true);
                }

                return(false);
            }

            // IPv4
            else
            {
                if (IPNetwork.CheckToIPv4(RemoteIpAddress, IPv4ToRange, out ulong FirstUsable))
                {
                    if (!IPv4ToModels.TryGetValue(FirstUsable, out data))
                    {
                        data = new ModelIPtables();
                    }
                    Trigger.OnReturn401((RemoteIpAddress, BlockedHost, "IP"));
                    return(true);
                }

                return(false);
            }
        }