/// <summary> /// Determines whether a string is a valid IP address range. /// </summary> /// <returns> /// <see langword="true" /> if <paramref name="str" /> is a valid IP address range; otherwise, <see langword="false" /> /// . /// </returns> /// <param name="str">The string to validate.</param> /// <param name="addressRange">The <see cref="IPRange" /> version of the string.</param> public static bool TryParse(string str, out IPRange addressRange) { var ips = str.Split('-'); if (ips.Length == 2) { IPAddress address1; IPAddress address2; if (IPAddress.TryParse(ips[0], out address1) && IPAddress.TryParse(ips[1], out address2)) { if (!address1.Equals(address2)) { addressRange = new IPRange(address1, address2); return(true); } } } addressRange = null; return(false); }
/// <summary> /// Determines whether a string is a valid IP address. /// </summary> /// <returns> /// true if <paramref name="ipString" /> is a valid IP address; otherwise, false. /// </returns> /// <param name="ipString">The string to validate.</param> /// <param name="address">The <see cref="SingleIP" /> version of the string.</param> public static bool TryParse(string ipString, out SingleIP address) { // Check if this is "Any Address" special string if (ipString.Trim() == "*") { address = Any; return(true); } // Check if this is a valid IPAddress if (IPAddress.TryParse(ipString, out var ipAddress)) { address = new SingleIP(ipAddress); return(true); } // Check if this is a IP range with only one IP if (IPRange.TryParse(ipString, out var ipRange) && ipRange.StartAddress.Equals(ipRange.EndAddress)) { address = new SingleIP(ipRange.StartAddress); return(true); } // Check if this is a single IP NetworkAddress if (NetworkAddress.TryParse(ipString, out var networkAddress) && networkAddress.StartAddress.Equals(networkAddress.EndAddress)) { address = new SingleIP(networkAddress.Address); return(true); } address = null; return(false); }
/// <summary> /// Compares two IP address ranges. /// </summary> /// <returns> /// <see langword="true" /> if the two address ranges are equal; otherwise, <see langword="false" />. /// </returns> /// <param name="comparand">An <see cref="IPRange" /> instance to compare to the current instance. </param> private bool Equals(IPRange comparand) { return(StartAddress.Equals(comparand.StartAddress) && EndAddress.Equals(comparand.EndAddress)); }