コード例 #1
0
        public void BasicTest()
        {
            string allowIP  = "99.99.99.99";
            string allowIP2 = "99.99.99.98";
            string otherIP  = "88.88.88.88";
            string ipv6_1   = IPAddress.Parse("2001:db80:85a3:0:0:8a2e:370:7334").ToString();
            string ipv6_2   = IPAddress.Parse("2001:0db8:0a0b:12f0:0000:0000:0000:0001").ToString();

            string[]            blockIP = new string[] { allowIP, "100.100.100.100" };
            IPBanMemoryFirewall f       = new IPBanMemoryFirewall();

            f.AllowIPAddresses(new string[] { allowIP }).Sync();
            f.AllowIPAddresses("TestRuleAllow", new IPAddressRange[] { IPAddressRange.Parse(allowIP2) }).Sync();
            f.BlockIPAddresses(null, blockIP.Concat(new string[] { allowIP, allowIP2, ipv6_1, ipv6_2 })).Sync();
            IPAddressRange range = new IPAddressRange(IPAddress.Parse(ipv6_2), IPAddress.Parse(ipv6_1));

            f.BlockIPAddresses("TestRuleBlock", new IPAddressRange[] { range }, new PortRange[0]);
            string[]         banned  = f.EnumerateBannedIPAddresses().ToArray();
            IPAddressRange[] banned2 = f.EnumerateIPAddresses("TestRuleBlock").ToArray();
            Assert.AreEqual(0, f.GetRuleNames("CB").Count());
            Assert.IsTrue(f.IsIPAddressAllowed(allowIP));
            Assert.IsFalse(f.IsIPAddressBlocked(allowIP, out _));
            Assert.IsTrue(f.IsIPAddressAllowed(allowIP2));
            Assert.IsFalse(f.IsIPAddressBlocked(allowIP2, out _));
            Assert.IsFalse(f.IsIPAddressBlocked(otherIP, out _));
            Assert.IsTrue(f.IsIPAddressBlocked(blockIP[1], out _));
            Assert.AreEqual(4, banned.Length);
            Assert.IsTrue(banned.Contains(blockIP[1]));
            Assert.IsTrue(banned.Contains(ipv6_1));
            Assert.IsTrue(banned.Contains(ipv6_2));
            Assert.AreEqual(1, banned2.Length);
            Assert.AreEqual(range.Begin, banned2[0].Begin);
            Assert.AreEqual(range.End, banned2[0].End);
        }