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], '-'))); }
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; }
public IPPortOrRange(IPAddress lowerAddress) { _upperAddress = _lowerAddress = lowerAddress; _port = PortOrRange.Any; }
public IPPortOrRange(IPAddress lowerAddress, PortOrRange port) { _upperAddress = _lowerAddress = lowerAddress; _port = port; }