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, '-'))); }