예제 #1
0
        public static void ToIpString(string expected, int ipnum)
        {
            // Arrange

            // Act
            var result = IpNumberHelper.ToIpString(ipnum);

            // Assert
            Assert.Equal(expected, result);
        }
예제 #2
0
        public static void Netmask(string expected, int cidr)
        {
            // Arrange

            // Act
            var result = IpNumberHelper.Netmask(cidr);

            // Assert
            Assert.Equal(expected, IpNumberHelper.ToIpString(result));
        }
예제 #3
0
        public static void Random(string ip)
        {
            // Arrange

            // Act
            var ipnum  = IpNumberHelper.ToIpNumber(ip);
            var result = IpNumberHelper.ToIpString(ipnum);

            // Assert
            Assert.Equal(ip, result);
        }
예제 #4
0
        public static void Broadcast(string expected, string ip, int cidr)
        {
            // Arrange
            var mask  = IpNumberHelper.Netmask(cidr);
            var ipnum = IpNumberHelper.Network(IpNumberHelper.ToIpNumber(ip), mask);

            // Act
            var result = IpNumberHelper.Broadcast(ipnum, mask);

            // Assert
            Assert.Equal(expected, IpNumberHelper.ToIpString(result));
        }
예제 #5
0
        private static void OnEnter(object sender, EventArgs e)
        {
            var context = ((HttpApplication)sender).Context;

            if ((g_allowedNetworks == null && g_deniedNetworks == null) ||
                context.Error != null ||
                context.CurrentHandler == null ||
                context.CurrentHandler is DefaultHttpHandler)
            {
                return;
            }

            var request = context.Request;

            if (SecureOnly && request.Scheme() != Uri.UriSchemeHttps)
            {
                return;
            }

            foreach (var ip in request.UserHosts())
            {
                var ipnum = IpNumberHelper.ToIpNumber(ip);
                if (g_deniedNetworks != null)
                {
                    var deniedNetwork = FindMatch(ipnum, g_deniedNetworks);
                    if (deniedNetwork != null &&
                        (NoExceptionPathRegex == null ||
                         !NoExceptionPathRegex.IsMatch(request.RawUrl)))
                    {
                        throw new IpPolicyException(string.Format(CultureInfo.InvariantCulture,
                                                                  "Matched '{0}' in denied network {1}/{2}.", ip,
                                                                  IpNumberHelper.ToIpString(deniedNetwork.Network),
                                                                  IpNumberHelper.ToIpString(deniedNetwork.Mask)));
                    }
                }

                if (g_allowedNetworks != null)
                {
                    var allowedNetwork = FindMatch(ipnum, g_allowedNetworks);
                    if (allowedNetwork == null &&
                        (NoExceptionPathRegex == null ||
                         !NoExceptionPathRegex.IsMatch(request.RawUrl)))
                    {
                        throw new IpPolicyException(string.Format(CultureInfo.InvariantCulture,
                                                                  "Missmatch '{0}' in allowed networks.", ip));
                    }
                }
            }
        }
예제 #6
0
 public string Host()
 {
     return(IpNumberHelper.ToIpString(Hosts[0]));
 }