/// <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 _)); }
/// <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); } }