// ReSharper disable once TooManyDeclarations
        public void CreateDirectIPv6Rule()
        {
            var ruleName      = RulesPrefix + Guid.NewGuid().ToString("N");
            var remoteAddress = SingleIP.Parse("2607:fea8:4260:31a::9");
            var rule          = new FirewallWASRule(
                ruleName,
                FirewallAction.Block,
                FirewallDirection.Outbound,
                FirewallProfiles.Public
                )
            {
                Protocol        = FirewallProtocol.Any,
                RemoteAddresses = new IAddress[] { remoteAddress }
            };

            _firewall.Rules.Add(rule);

            var checkRule = _firewall.Rules.FirstOrDefault(firewallRule => firewallRule.Name == ruleName);

            Assert.IsNotNull(checkRule);
            Assert.IsTrue(checkRule.RemoteAddresses.SequenceEqual(new IAddress[] { remoteAddress }));
            Assert.AreEqual(checkRule.Profiles, FirewallProfiles.Public);
            Assert.AreEqual(checkRule.Direction, FirewallDirection.Outbound);
            Assert.AreEqual(checkRule.Action, FirewallAction.Block);

            _firewall.Rules.Remove(rule);

            checkRule = _firewall.Rules.FirstOrDefault(firewallRule => firewallRule.Name == ruleName);
            Assert.IsNull(checkRule);
        }
        // ReSharper disable once TooManyDeclarations
        public void CreateDirectICMPRule()
        {
            var ruleName = RulesPrefix + Guid.NewGuid().ToString("N");
            var rule     = new FirewallWASRule(
                ruleName,
                FirewallAction.Allow,
                FirewallDirection.Inbound,
                FirewallProfiles.Domain
                )
            {
                Protocol        = FirewallProtocol.ICMPv4,
                RemoteAddresses = new IAddress[] { SingleIP.Parse("192.168.0.1") }
            };

            _firewall.Rules.Add(rule);

            var checkRule = _firewall.Rules.FirstOrDefault(firewallRule => firewallRule.Name == ruleName);

            Assert.IsNotNull(checkRule);
            Assert.AreEqual(checkRule.Protocol, FirewallProtocol.ICMPv4);
            Assert.AreEqual(checkRule.Profiles, FirewallProfiles.Domain);

            _firewall.Rules.Remove(rule);

            checkRule = _firewall.Rules.FirstOrDefault(firewallRule => firewallRule.Name == ruleName);
            Assert.IsNull(checkRule);
        }
Exemple #3
0
        // ReSharper disable once ExcessiveIndentation
        public static IAddress[] StringToAddresses(string str)
        {
            var remoteAddresses = new List <IAddress>();

            foreach (var remoteAddress in str.Split(','))
            {
                if (SpecialAddress.TryParse(remoteAddress, out var specialAddress))
                {
                    remoteAddresses.Add(specialAddress);
                }
                else if (SingleIP.TryParse(remoteAddress, out SingleIP ip))
                {
                    remoteAddresses.Add(ip);
                }
                else if (IPRange.TryParse(remoteAddress, out var range))
                {
                    remoteAddresses.Add(range);
                }
                else if (NetworkAddress.TryParse(remoteAddress, out var network))
                {
                    remoteAddresses.Add(network);
                }
            }

            return(remoteAddresses.ToArray());
        }
Exemple #4
0
        public static IAddress[] StringToAddresses(string str)
        {
            var remoteAddresses = new List <IAddress>();

            foreach (var remoteAddress in str.Split(','))
            {
                DNSService     dns;
                DHCPService    dhcp;
                WINSService    wins;
                LocalSubnet    localSubnet;
                DefaultGateway defaultGateway;
                IPRange        range;
                SingleIP       ip;
                NetworkAddress network;
                if (DNSService.TryParse(remoteAddress, out dns))
                {
                    remoteAddresses.Add(dns);
                }
                else if (DHCPService.TryParse(remoteAddress, out dhcp))
                {
                    remoteAddresses.Add(dhcp);
                }
                else if (WINSService.TryParse(remoteAddress, out wins))
                {
                    remoteAddresses.Add(wins);
                }
                else if (LocalSubnet.TryParse(remoteAddress, out localSubnet))
                {
                    remoteAddresses.Add(localSubnet);
                }
                else if (DefaultGateway.TryParse(remoteAddress, out defaultGateway))
                {
                    remoteAddresses.Add(defaultGateway);
                }
                else if (IPRange.TryParse(remoteAddress, out range))
                {
                    remoteAddresses.Add(range);
                }
                else if (SingleIP.TryParse(remoteAddress, out ip))
                {
                    remoteAddresses.Add(ip);
                }
                else if (NetworkAddress.TryParse(remoteAddress, out network))
                {
                    remoteAddresses.Add(network);
                }
            }
            return(remoteAddresses.ToArray());
        }
Exemple #5
0
        //[ResponseType(typeof(string))]
        public IHttpActionResult AddAdditionalIpForRdp([FromUri] string ipAddress)
        {
            var ruleName = "Allow Remote Desktop";

            try
            {
                var rule = FirewallManager.Instance.Rules.Where(o =>
                                                                o.Direction == FirewallDirection.Inbound &&
                                                                o.Name.Equals(ruleName)
                                                                ).FirstOrDefault();

                if (rule != null)
                {
                    var items = rule.RemoteAddresses.ToList();
                    items.Add(SingleIP.Parse(ipAddress));

                    //Update an existing Rule
                    rule.RemoteAddresses = items.ToArray();

                    return(Ok());
                }

                //Create a new rule
                rule = FirewallManager.Instance.CreateApplicationRule(
                    FirewallManager.Instance.GetProfile().Type,
                    ruleName,
                    FirewallAction.Allow,
                    null
                    );

                rule.Direction       = FirewallDirection.Inbound;
                rule.LocalPorts      = new ushort[] { 3389 };
                rule.Action          = FirewallAction.Allow;
                rule.Protocol        = FirewallProtocol.TCP;
                rule.Scope           = FirewallScope.All;
                rule.Profiles        = FirewallProfiles.Public | FirewallProfiles.Private;
                rule.RemoteAddresses = new IAddress[] { SingleIP.Parse(ipAddress) };

                FirewallManager.Instance.Rules.Add(rule);
                return(Ok());
            }
            catch (Exception exception)
            {
                Log.Error($"{nameof(AddAdditionalIpForRdp)}", exception);
            }

            return(InternalServerError());
        }
        // ReSharper disable once ExcessiveIndentation
        public static IAddress[] StringToAddresses(string str)
        {
            var remoteAddresses = new List <IAddress>();

            foreach (var remoteAddress in str.Split(','))
            {
                if (DNSService.TryParse(remoteAddress, out var dns))
                {
                    remoteAddresses.Add(dns);
                }
                else if (DHCPService.TryParse(remoteAddress, out var dhcp))
                {
                    remoteAddresses.Add(dhcp);
                }
                else if (WINSService.TryParse(remoteAddress, out var wins))
                {
                    remoteAddresses.Add(wins);
                }
                else if (LocalSubnet.TryParse(remoteAddress, out var localSubnet))
                {
                    remoteAddresses.Add(localSubnet);
                }
                else if (DefaultGateway.TryParse(remoteAddress, out var defaultGateway))
                {
                    remoteAddresses.Add(defaultGateway);
                }
                else if (IPRange.TryParse(remoteAddress, out var range))
                {
                    remoteAddresses.Add(range);
                }
                else if (SingleIP.TryParse(remoteAddress, out SingleIP ip))
                {
                    remoteAddresses.Add(ip);
                }
                else if (NetworkAddress.TryParse(remoteAddress, out var network))
                {
                    remoteAddresses.Add(network);
                }
            }

            return(remoteAddresses.ToArray());
        }
        public void InvalidParses()
        {
            // Can't parse empty strings
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("");
            }
                                            );

            // Can't parse invalid ip addresses
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("-1.0.0.0");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("-1::");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("256.0.0.0");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("10000::");
            }
                                            );

            // Can't parse ip ranges containing more than one ip address
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("192.168.1.1-192.168.2.1");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("2001:1::-2001:2::");
            }
                                            );

            // Can't parse network addresses containing more than one ip address
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("127.0.0.1/28");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("::1/112");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("192.168.1.1/255.255.255.0");
            }
                                            );
            Assert.Throws <FormatException>(() =>
            {
                SingleIP.Parse("2001:1::/ffff:ffff:ffff:ffff:ffff:ffff:ffff:0");
            }
                                            );
        }