Example #1
0
        public static XmlElement CreateItemAllowAddress(string title, IpAddressRange range)
        {
            string address = range.GetAddress().ToString();
            string mask    = range.GetMask();

            XmlDocument xmlDocRule = new XmlDocument();
            XmlElement  xmlRule    = xmlDocRule.CreateElement("rule");

            xmlRule.SetAttribute("name", title);
            if (range.IsV4)
            {
                xmlRule.SetAttribute("layer", "ipv4");
            }
            else if (range.IsV6)
            {
                xmlRule.SetAttribute("layer", "ipv6");
            }
            xmlRule.SetAttribute("action", "permit");
            XmlElement XmlIf1 = xmlDocRule.CreateElement("if");

            xmlRule.AppendChild(XmlIf1);
            XmlIf1.SetAttribute("field", "ip_remote_address");
            XmlIf1.SetAttribute("match", "equal");
            XmlIf1.SetAttribute("address", address);
            XmlIf1.SetAttribute("mask", mask);

            return(xmlRule);
        }
Example #2
0
        public void DefaultRangeTest()
        {
            var generator = new IpAddressGenerator();
            var ranges    = generator.DefaultIpAddressRanges;

            for (var i = 0; i < 10; i++)
            {
                var value = generator.NextValue();
                Assert.IsNotNull(value);
                var            bytes         = value.GetAddressBytes();
                IpAddressRange selectedRange = null;
                foreach (var range in ranges)
                {
                    var start = range.Start.GetAddressBytes();
                    var end   = range.End.GetAddressBytes();
                    for (var b = 0; b < bytes.Length; b++)
                    {
                        if ((bytes[b] >= start[b]) && (bytes[b] <= end[b]))
                        {
                            selectedRange = range;
                            break;
                        }
                    }
                    if (selectedRange != null)
                    {
                        break;
                    }
                }
                Assert.IsNotNull(selectedRange);
            }
        }
Example #3
0
        private async Task <List <IpAddressRange> > GetDotaIpRanges()
        {
            List <IpAddressRange> result;

            if (!_cache.TryGetValue("dota_ip_ranges", out result))
            {
                result = new List <IpAddressRange>();
                WebRequest request = WebRequest.CreateHttp("http://media.steampowered.com/apps/sdr/network_config.json");
                request.Method = "GET";
                var response = await request.GetResponseAsync();

                var          responseStream = response.GetResponseStream();
                StreamReader reader         = new StreamReader(responseStream, Encoding.UTF8);
                string       content        = reader.ReadToEnd();
                reader.Close();
                var json = JsonDocument.Parse(content).RootElement;
                if (json.TryGetProperty("data_centers", out var datacenters))
                {
                    foreach (var datacenter in datacenters.EnumerateArray())
                    {
                        if (datacenter.TryGetProperty("address_ranges", out var addressRanges))
                        {
                            foreach (var addressRange in addressRanges.EnumerateArray())
                            {
                                result.Add(IpAddressRange.Parse(addressRange.ToString()));
                            }
                        }
                    }
                }
                result.Add(new IpAddressRange("127.0.0.1", "127.0.0.1"));
                result.Add(new IpAddressRange("::1", "::1"));
                _cache.Set("dota_ip_ranges", result, TimeSpan.FromDays(1));
            }
            return(result);
        }
Example #4
0
        private void SetIps(Faker faker, Func <bool> r)
        {
            var low       = faker.Internet.Ip();
            var high      = faker.Internet.Ip();
            var lowBytes  = IPAddress.Parse(low).GetAddressBytes();
            var highBytes = IPAddress.Parse(high).GetAddressBytes();

            for (int i = 0; i < lowBytes.Length; i++)
            {
                var comparison = lowBytes[i].CompareTo(highBytes[i]);
                if (comparison == 0)
                {
                    continue;
                }
                if (comparison > 0)
                {
                    var s = low;
                    low  = high;
                    high = s;
                }

                break;
            }
            var d = new IpAddressRange();

            SwapAssign(r(), low, v => d.GreaterThan = v, v => d.GreaterThanOrEqualTo = v);
            SwapAssign(r(), high, v => d.LessThan   = v, v => d.LessThanOrEqualTo = v);
            this.Ips = d;
        }
        public void NotEqualsTest()
        {
            var r1 = new IpAddressRange(IPAddress.Parse("1.2.3.4"), IPAddress.Parse("4.3.2.1"));
            var r2 = new IpAddressRange(IPAddress.Parse("5.6.7.8"), IPAddress.Parse("8.7.6.5"));

            Assert.IsFalse(r1.Equals(r2));
            Assert.IsFalse(r2.Equals(r1));
        }
        public void EqualsTest()
        {
            var r1 = new IpAddressRange(IPAddress.Parse("1.2.3.4"), IPAddress.Parse("4.3.2.1"));
            var r2 = new IpAddressRange(IPAddress.Parse("4.3.2.1"), IPAddress.Parse("1.2.3.4"));

            Assert.IsTrue(r1.Equals(r2));
            Assert.IsTrue(r2.Equals(r1));
        }
Example #7
0
        public void SimpleIPRangeTest()
        {
            var ipRange = new IpAddressRange();

            Console.WriteLine(ipRange.IsVaid("255.255.225.222"));
            Console.WriteLine(ipRange.IsVaid("1.1.1.1"));
            ipRange.AddIp("0.0.0.1");
            ipRange.AddIp("0.0.1.0");
            ipRange.AddIp("0.1.0.0");
            ipRange.AddIp("1.0.0.0");
            Console.WriteLine(string.Join(",",
                                          ipRange.GetIpRange(1, Convert.ToInt32(Math.Pow(2, 24)) + 1)));
        }
Example #8
0
        protected void ValidateArrayInputs()
        {
            if (IpAddressRange != null &&
                IpAddressRange.Length > 0 &&
                IpAddressRange.Where(item => { return(string.IsNullOrWhiteSpace(item)); }).Any())
            {
                throw new ArgumentException("The array of IpAddressRange input cannot contain null or empty strings");
            }

            if (VirtualNetworkResourceId != null &&
                VirtualNetworkResourceId.Length > 0 &&
                VirtualNetworkResourceId.Where(item => { return(string.IsNullOrWhiteSpace(item)); }).Any())
            {
                throw new ArgumentException("The array of VirtualNetworkResourceId input cannot contain null or empty strings");
            }
        }
Example #9
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="id">The internal id of the Service</param>
 /// <param name="name">The name of the Service</param>
 /// <param name="type">The Type of the service</param>
 /// <param name="sourceIpRange">The valid source ip range for the Service</param>
 /// <param name="version">The version of the Service</param>
 /// <param name="dtCompiled">The date the Service was compiled</param>
 /// <param name="isLogged">Is this a logged Service</param>
 /// <param name="isPublic">Is this service publicly available</param>
 /// <param name="isAuthenticatedUserRequired">is an authenticated user required to call this Service</param>
 /// <param name="isAuthorizedUserRequired">is an authorized user required to call this Service</param>
 public Service(int id, string name, Type type, IpAddressRange sourceIpRange, string version, string dtCompiled, bool isPublic, bool isLogged, bool isAuthenticatedUserRequired, bool isAuthorizedUserRequired)
 {
     _id            = id;
     _name          = name;
     _open          = new Dictionary <string, Method>();
     _restricted    = new Dictionary <string, Method>();
     _special       = new Dictionary <string, Method>();
     _serviceType   = type;
     _sourceIpRange = sourceIpRange;
     _version       = version;
     _dtCompiled    = dtCompiled;
     _isPublic      = isPublic;
     _isLogged      = isLogged;
     _isAuthenticatedUserRequired = isAuthenticatedUserRequired;
     _isAuthorizedUserRequired    = isAuthorizedUserRequired;
 }
Example #10
0
        public override List <IpAddressRange> GetNetworkLockAllowedIps()
        {
            List <IpAddressRange> result = base.GetNetworkLockAllowedIps();

            // Hosts
            XmlNodeList nodesUrls = Storage.DocumentElement.SelectNodes("//urls/url");

            foreach (XmlNode nodeUrl in nodesUrls)
            {
                string         url  = nodeUrl.Attributes["address"].Value;
                string         host = Utils.HostFromUrl(url);
                IpAddressRange ip   = new IpAddressRange(host); // TOFIX: Presume it's an IP address, but can be hostname.
                result.Add(ip);
            }

            return(result);
        }
Example #11
0
 public static bool?IsInternetIp(string ip, bool nullOnException = false)
 {
     try
     {
         return(IpAddressRange.IsInternetIp(ip));
     }
     catch (Exception x)
     {
         if (nullOnException)
         {
             return(null);
         }
         else
         {
             throw x;
         }
     }
 }
        private async Task <List <IpAddressRange> > GetDotaIpRanges()
        {
            List <IpAddressRange> result = null;

            if (!_cache.TryGetValue("dota_ip_ranges", out result))
            {
                result = new List <IpAddressRange>();
                WebRequest request = WebRequest.CreateHttp("http://media.steampowered.com/apps/sdr/network_config.json");
                request.Method = "GET";
                var response = await request.GetResponseAsync();

                var          responseStream = response.GetResponseStream();
                StreamReader reader         = new StreamReader(responseStream, Encoding.UTF8);
                string       content        = reader.ReadToEnd();
                var          json           = JObject.Parse(content);
                var          datacenters    = json["data_centers"] as JObject;
                if (datacenters != null)
                {
                    foreach (var datacenter in datacenters)
                    {
                        var addressRanges = datacenter.Value["address_ranges"] as JArray;
                        if (addressRanges != null)
                        {
                            foreach (var addressRange in addressRanges)
                            {
                                result.Add(IpAddressRange.Parse((string)addressRange));
                            }
                        }
                    }
                }
                result.Add(new IpAddressRange("127.0.0.1", "127.0.0.1"));
                result.Add(new IpAddressRange("::1", "::1"));
                _cache.Set("dota_ip_ranges", result, TimeSpan.FromDays(1));
            }
            return(result);
        }
Example #13
0
 public static bool IsLoopbackIp(IPAddress ip)
 {
     return(IpAddressRange.IsLoopbackIp(ip));
 }
Example #14
0
		public List<IpAddressRange> GetAllIps()
		{
			List<IpAddressRange> result = new List<IpAddressRange>();

			// Custom
			{
				string list = Engine.Instance.Storage.Get("netlock.allowed_ips");
				List<string> ips = Utils.CommaStringToListString(list);
				foreach (string ip in ips)
				{
					string ip2 = ip.Trim();

					int posComment = ip2.IndexOf("#");
					if (posComment != -1)
						ip2 = ip2.Substring(0, posComment).Trim();

					if (ip2 == "")
						continue;

					AddToIpsList(result, new IpAddressRange(ip2), true);					
				}
			}

			// Routes Out
			{
				string routes = Engine.Instance.Storage.Get("routes.custom");
				string[] routes2 = routes.Split(';');
				foreach (string route in routes2)
				{
					string[] routeEntries = route.Split(',');
					if (routeEntries.Length < 2)
						continue;

					string ip = routeEntries[0];					
					string action = routeEntries[1];
					
					if (action == "out")
					{
						AddToIpsList(result, new IpAddressRange(ip), true);					
					}					
				}
			}

			// Hosts
			if (Engine.Instance.Storage.Manifest != null)
			{
				XmlNodeList nodesHosts = Engine.Instance.Storage.Manifest.SelectNodes("//hosts/host");
				foreach (XmlNode nodeHost in nodesHosts)
				{
					IpAddressRange ip = new IpAddressRange(nodeHost.Attributes["address"].Value);
					AddToIpsList(result, ip, false);										
				}
			}

			// Servers
			lock (Engine.Instance.Servers)
			{
				Dictionary<string, ServerInfo> servers = new Dictionary<string, ServerInfo>(Engine.Instance.Servers);

				foreach (ServerInfo infoServer in servers.Values)
				{
					AddToIpsList(result, infoServer.IpEntry, false);										
					if (infoServer.IpEntry2.Trim() != "")
						AddToIpsList(result, infoServer.IpEntry2, false);																
				}
			}

			return result;
		}
Example #15
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="apiKey">The API key of the application</param>
        public Application(string apiKey)
        {
            if (apiKey != null && apiKey.Length > 0)
            {
                object oApplication = Cache.Get(CACHE_TYPE, apiKey);

                if (oApplication != null)
                {
                    Application application = (Application)oApplication;
                    _apikey        = application._apikey;
                    _name          = application._name;
                    _description   = application._description;
                    _id            = application._id;
                    _isPublic      = application._isPublic;
                    _isLogged      = application._isLogged;
                    _sourceIpRange = application._sourceIpRange;
                    _permissions   = application._permissions;
                    _rateLimit     = application._rateLimit;
                    _rateInterval  = application._rateInterval;
                    _rateType      = application._rateType;
                }
                else
                {
                    string sourceIpRange = null, rateType = null;
                    bool?  isLogged = null, isPublic = null;
                    int?   rateLimitId = null, rateLimit = null, rateInterval = null;

                    using (LegionLinqDataContext legion = new LegionLinqDataContext(ConfigurationManager.ConnectionStrings["LegionConnectionString"].ToString())) {
                        legion.xspGetApplication(apiKey, ref _id, ref _name, ref sourceIpRange, ref _description, ref rateLimitId, ref rateType, ref rateLimit, ref rateInterval, ref isPublic, ref isLogged);
                    }

                    _apikey = apiKey;

                    _rateLimit    = rateLimit ?? Settings.GetInt("RateLimitDefault");
                    _rateInterval = rateInterval ?? Settings.GetInt("RateLimitIntervalDefault");
                    _rateType     = (rateType == null ? RateType.Default : (RateType)Enum.Parse(typeof(RateType), rateType, true));

                    _isPublic = (isPublic == true ? true : false);
                    _isLogged = (isLogged == true ? true : false);

                    if (sourceIpRange != null && sourceIpRange != string.Empty)
                    {
                        try {
                            _sourceIpRange = new IpAddressRange(sourceIpRange);
                        }
                        catch {
                            string message = Settings.GetString("ExceptionMessageApplicationInvalidIpRange", new Dictionary <string, string>()
                            {
                                { "IpRange", sourceIpRange },
                                { "ApplicationName", _name },
                                { "ApiKey", apiKey }
                            });

                            Logging.Module.WriteException(new LoggedException()
                            {
                                Type    = "BadIPRange",
                                Message = message
                            });

                            throw new Exception(message);
                        }
                    }

                    Cache.Add(CACHE_TYPE, apiKey, this);
                }
            }
            else
            {
                _apikey        = null;
                _name          = Settings.GetString("SymbolUnknown");
                _description   = string.Empty;
                _id            = 0;
                _isPublic      = false;
                _isLogged      = false;
                _sourceIpRange = null;
                _permissions   = null;
                _rateLimit     = Settings.GetInt("RateLimitDefault");
                _rateInterval  = Settings.GetInt("RateLimitIntervalDefault");
                _rateType      = RateType.Default;
            }
        }
Example #16
0
 public static bool IsInternetIp(IPAddress ip)
 {
     return(IpAddressRange.IsInternetIp(ip));
 }
Example #17
0
        public static bool IsIpInRange(IPAddress ip, IPAddress lowerBandIp, IPAddress upperBandIp)
        {
            var range = new IpAddressRange(lowerBandIp, upperBandIp);

            return(range.IsInRange(ip));
        }
Example #18
0
        public static bool IsIpInRange(string ip, string lowerBandIp, string upperBandIp)
        {
            var range = new IpAddressRange(lowerBandIp, upperBandIp);

            return(range.IsInRange(ip));
        }
Example #19
0
        public override List<IpAddressRange> GetNetworkLockAllowedIps()
        {
            List<IpAddressRange> result = base.GetNetworkLockAllowedIps();

            // Hosts
            XmlNodeList nodesUrls = Storage.DocumentElement.SelectNodes("//urls/url");
            foreach (XmlNode nodeUrl in nodesUrls)
            {
                string url = nodeUrl.Attributes["address"].Value;
                string host = Utils.HostFromUrl(url);
                IpAddressRange ip = new IpAddressRange(host); // TOFIX: Presume it's an IP address, but can be hostname.
                result.Add(ip);
            }

            return result;
        }
Example #20
0
        public void BuildOVPN(string protocol, int port, int alt, int proxyPort)
        {
            DateTime now = DateTime.UtcNow;
            Storage s = Engine.Instance.Storage;
						
            string ip = CurrentServer.IpEntry;
            if (alt == 1)
                ip = CurrentServer.IpEntry2;

			string ovpn = "";
			ovpn += "# " + GenerateFileHeader() + "\n";
            ovpn += "# " + now.ToLongDateString() + " " + now.ToLongTimeString() + " UTC\n";
            if (s.GetBool("openvpn.skip_defaults") == false)
                ovpn += s.Manifest.Attributes["openvpn_directives_common"].Value.Replace("\t", "").Trim() + "\n";

			if (s.Get("openvpn.dev_node") != "")
				ovpn += "dev-node " + s.Get("openvpn.dev_node") + "\n";

			// 2.10.1
			if (s.GetInt("openvpn.rcvbuf") != -1)
				ovpn += "rcvbuf " + s.GetInt("openvpn.rcvbuf").ToString() + "\n";
			if (s.GetInt("openvpn.sndbuf") != -1)
				ovpn += "sndbuf " + s.GetInt("openvpn.sndbuf").ToString() + "\n";

            if (protocol == "UDP")
            {
                ovpn += "proto udp\n";
                if (s.GetBool("openvpn.skip_defaults") == false)
                    ovpn += s.Manifest.Attributes["openvpn_directives_udp"].Value.Replace("\t", "").Trim() + "\n";
            }
            else // TCP, SSH, SSL, Tor
            {
                ovpn += "proto tcp\n";
                if (s.GetBool("openvpn.skip_defaults") == false)
                    ovpn += s.Manifest.Attributes["openvpn_directives_tcp"].Value.Replace("\t", "").Trim() + "\n";
            }

            if (protocol == "SSH")
				ovpn += "remote 127.0.0.1 " + Conversions.ToString(proxyPort) + "\n";
            else if (protocol == "SSL")
				ovpn += "remote 127.0.0.1 " + Conversions.ToString(proxyPort) + "\n";
            else
                ovpn += "remote " + ip + " " + port.ToString() + "\n";

			if (protocol == "TOR")
			{
				ovpn += "socks-proxy " + s.Get("mode.tor.host") + " " + s.Get("mode.tor.port") + "\n";
			}
			else
			{
				string proxyMode = s.GetLower("proxy.mode");
				if (proxyMode == "http")
				{
					ovpn += "http-proxy " + s.Get("proxy.host") + " " + s.Get("proxy.port");
				}
				else if (proxyMode == "socks")
				{
					ovpn += "socks-proxy " + s.Get("proxy.host") + " " + s.Get("proxy.port");
				}

				if (s.GetLower("proxy.mode") != "none")
				{
					if (s.Get("proxy.auth") != "None")
					{
						string fileNameAuth = s.GetPath("AirVPN.ppw");
						string fileNameAuthOvpn = fileNameAuth.Replace("\\", "\\\\"); // 2.6, Escaping for Windows
						string fileNameData = s.Get("proxy.login") + "\n" + s.Get("proxy.password") + "\n";
						Utils.SaveFile(fileNameAuth, fileNameData);
						ovpn += " \"" + fileNameAuthOvpn + "\" " + s.Get("proxy.auth").ToLowerInvariant() + "\n"; // 2.6 Auth Fix
					}
					else
					{
						ovpn += "\n";
					}
				}
			}

            string routesDefault = s.Get("routes.default");
            if (routesDefault == "out")
            {
				ovpn += "route-nopull\n";

				// For Checking
				ovpn += "route " + CurrentServer.IpExit + " 255.255.255.255 vpn_gateway # For Checking Route\n";

				// For DNS
				// < 2.9. route directive useless, and DNS are forced manually in every supported platform. // TOCLEAN
				/*
				ovpn += "dhcp-option DNS " + Constants.DnsVpn + "\n"; // Manually because route-nopull skip it
				ovpn += "route 10.4.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.5.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.6.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.7.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.8.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.9.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.30.0.1 255.255.255.255 vpn_gateway # AirDNS\n";
				ovpn += "route 10.50.0.1 255.255.255.255 vpn_gateway # AirDNS\n"; 
				*/

				// 2.9, Can be removed when resolv-conf method it's not binded anymore in up/down ovpn directive // TOFIX
 				ovpn += "dhcp-option DNS " + Constants.DnsVpn + "\n"; 
            }
            string routes = s.Get("routes.custom");
			string[] routes2 = routes.Split(';');
			foreach (string route in routes2)
            {
				string[] routeEntries = route.Split(',');
                if (routeEntries.Length != 3)
                    continue;

				IpAddressRange ipCustomRoute = new IpAddressRange(routeEntries[0]);

				if (ipCustomRoute.Valid == false)
					Log(LogType.Warning, Messages.Format(Messages.CustomRouteInvalid, ipCustomRoute.ToString()));
				else
				{
					string action = routeEntries[1];
					string notes = routeEntries[2];

					if ((routesDefault == "out") && (action == "in"))
						ovpn += "route " + ipCustomRoute.ToOpenVPN() + " vpn_gateway # " + Utils.SafeString(notes) + "\n";
					if ((routesDefault == "in") && (action == "out"))
						ovpn += "route " + ipCustomRoute.ToOpenVPN() + " net_gateway # " + Utils.SafeString(notes) + "\n";
				}
            }

			if (routesDefault == "in")
			{
				if ((protocol == "SSH") || (protocol == "SSL"))
				{
					ovpn += "route " + ip + " 255.255.255.255 net_gateway # VPN Entry IP\n";
				}

				if (protocol == "TOR")
				{
					List<string> torNodeIps = TorControl.GetGuardIps();
					foreach (string torNodeIp in torNodeIps)
					{
						ovpn += "route " + torNodeIp + " 255.255.255.255 net_gateway # Tor Circuit\n";
					}
				}
			}
	
			ovpn += "management localhost " + Engine.Instance.Storage.Get("openvpn.management_port") + "\n";

			Platform.Instance.OnBuildOvpn(ref ovpn);			
						
            ovpn += "\n";
            ovpn += s.Get("openvpn.custom").Replace("\t", "").Trim();
            ovpn += "\n";

			// Experimental - Allow identification as Public Network in Windows. Advanced Option?
			// ovpn += "route-metric 512\n";
			// ovpn += "route 0.0.0.0 0.0.0.0\n";


			//XmlNode nodeUser = s.Manifest.SelectSingleNode("//user");
			XmlNode nodeUser = s.User;
			ovpn += "<ca>\n" + nodeUser.Attributes["ca"].Value + "</ca>\n";
            XmlNode nodeUserKey = s.User.SelectSingleNode("keys/key[@id='default']"); // TODO
			ovpn += "<cert>\n" + nodeUserKey.Attributes["crt"].Value + "</cert>\n";
			ovpn += "<key>\n" + nodeUserKey.Attributes["key"].Value + "</key>\n";
            ovpn += "key-direction 1\n";
			ovpn += "<tls-auth>\n" + nodeUser.Attributes["ta"].Value + "</tls-auth>\n";

			

			// Custom replacement, useful to final adjustment of generated OVPN by server-side rules.
			// Never used yet, available for urgent maintenance.
			int iCustomReplaces = 0;
			for(;;)
			{
				if(s.Manifest.Attributes["openvpn_replace" + iCustomReplaces.ToString() + "_pattern"] == null)
					break;

				string pattern = s.Manifest.Attributes["openvpn_replace" + iCustomReplaces.ToString() + "_pattern"].Value;
				string replacement = s.Manifest.Attributes["openvpn_replace" + iCustomReplaces.ToString() + "_replacement"].Value;

				ovpn = Regex.Replace(ovpn, pattern, replacement);

				iCustomReplaces++;
			}
			
            ConnectedOVPN = ovpn;
            ConnectedEntryIP = ip;
            ConnectedPort = port;
            ConnectedProtocol = protocol;
        }
Example #21
0
		public void AddToIpsList(List<IpAddressRange> result, IpAddressRange ip, bool warning)
		{
			if (ip.Valid == false)
			{
				if(warning == true)
					Engine.Instance.Log(Engine.LogType.Error, Messages.Format(Messages.NetworkLockAllowedIpInvalid, ip.ToString()));
				return;
			}

			if (result.Contains(ip))
			{
				if (warning == true)
					Engine.Instance.Log(Engine.LogType.Warning, Messages.Format(Messages.NetworkLockAllowedIpDuplicated, ip.ToString()));
				return;
			}

			result.Add(ip);
		}