Beispiel #1
0
        public static IPPortOrRange Parse(string getNextArg, char splitChar = ':')
        {
            string[] split = getNextArg.Split(new[] { splitChar });
            if (split.Length == 0)
            {
                throw new IpTablesNetException("Error");
            }

            string[] splitIp = split[0].Split(new[] { '-' });

            IPAddress lowerIp = IPAddress.Parse(splitIp[0]);
            IPAddress upperIp;

            if (splitIp.Length == 1)
            {
                upperIp = lowerIp;
            }
            else
            {
                upperIp = IPAddress.Parse(splitIp[1]);
            }

            if (split.Length == 1)
            {
                return(new IPPortOrRange(lowerIp, upperIp));
            }
            return(new IPPortOrRange(lowerIp, upperIp, PortOrRange.Parse(split[1], '-')));
        }
Beispiel #2
0
        public static IPPortOrRange Parse(string getNextArg)
        {
            var match = ParsePattern.Match(getNextArg);

            if (!match.Success)
            {
                throw new ArgumentException("Invalid IP port or range format");
            }

            IPAddress lowerIp = null;
            IPAddress upperIp = null;
            String    port    = null;

            for (int i = 0; i < match.Groups.Count; i++)
            {
                var g = match.Groups[i];
                if (g.Value == "")
                {
                    continue;
                }

                var name = ParsePattern.GroupNameFromNumber(i);
                if (name == "ip1_1" || name == "ip1_2" || name == "ip1_3")
                {
                    lowerIp = IPAddress.Parse(g.Value);
                }
                else if (name == "ip2_1" || name == "ip2_2" || name == "ip2_3")
                {
                    upperIp = IPAddress.Parse(g.Value);
                }
                else if (name == "port_1" || name == "port_2" || name == "port_3")
                {
                    port = g.Value;
                }
            }

            if (lowerIp == null)
            {
                lowerIp = upperIp;
            }

            if (port == null)
            {
                return(new IPPortOrRange(lowerIp, upperIp));
            }
            return(new IPPortOrRange(lowerIp, upperIp, PortOrRange.Parse(port, '-')));
        }
 public static List<PortOrRange> CompressRanges(List<PortOrRange> ranges)
 {
     List<PortOrRange> ret = new List<PortOrRange>();
     PortOrRange start = new PortOrRange(0);
     int previous = -1, previousLower = -1;
     foreach (PortOrRange current in ranges.OrderBy((a)=>a.LowerPort))
     {
         if (current.LowerPort == (previous + 1))
         {
             if (start.LowerPort == 0)
             {
                 start = new PortOrRange((uint)previousLower, current.UpperPort);
             }
         }
         else
         {
             if (start.UpperPort != 0)
             {
                 ret.Add(new PortOrRange(start.LowerPort, (uint)previous));
                 start = new PortOrRange(0);
             }
             else if (previous != -1)
             {
                 ret.Add(new PortOrRange((uint)previousLower,(uint)previous));
             }
         }
         previous = (int)current.UpperPort;
         previousLower = (int) current.LowerPort;
     }
     if (start.UpperPort != 0)
     {
         ret.Add(new PortOrRange(start.LowerPort, (uint)previous));
         // ReSharper disable RedundantAssignment
         start = new PortOrRange(0);
         // ReSharper restore RedundantAssignment
     }
     else if (previous != -1)
     {
         ret.Add(new PortOrRange((uint)previousLower,(uint)previous));
     }
     return ret;
 }
Beispiel #4
0
 public IPPortOrRange(IPAddress lowerAddress)
 {
     _upperAddress = _lowerAddress = lowerAddress;
     _port         = PortOrRange.Any;
 }
Beispiel #5
0
 public IPPortOrRange(IPAddress lowerAddress, PortOrRange port)
 {
     _upperAddress = _lowerAddress = lowerAddress;
     _port         = port;
 }
Beispiel #6
0
 public IPPortOrRange(IPAddress lowerAddress)
 {
     _upperAddress = _lowerAddress = lowerAddress;
     _port = PortOrRange.Any;
 }
Beispiel #7
0
 public IPPortOrRange(IPAddress lowerAddress, PortOrRange port)
 {
     _upperAddress = _lowerAddress = lowerAddress;
     _port = port;
 }