C# 如何从该格式获取这些范围内的所有IP地址?

C# 如何从该格式获取这些范围内的所有IP地址?,c#,ip-address,C#,Ip Address,如何从这种格式计算出这个范围内的所有IP地址 213.159.160.0-213.159.191.255 84.44.115.72-84.44.115.79 我找到了84.44.115.1/23格式的示例,但上面的格式中没有一个。这样的东西怎么样 public static IPAddress[] GetAddresses(string rangeString) { var match = Regex.Match(rangeString, @"(?<ip1>\d{1,3}.

如何从这种格式计算出这个范围内的所有IP地址

213.159.160.0-213.159.191.255
84.44.115.72-84.44.115.79

我找到了
84.44.115.1/23格式的示例,但上面的格式中没有一个。

这样的东西怎么样

public static IPAddress[] GetAddresses(string rangeString)
{
    var match = Regex.Match(rangeString, @"(?<ip1>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})-(?<ip2>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})");
    if (!match.Success || !IPAddress.TryParse(match.Groups["ip1"].Value, out IPAddress ip1) || !IPAddress.TryParse(match.Groups["ip2"].Value, out IPAddress ip2))
    {
        throw new ArgumentException("Range invalid.");
    }
    return GetAddresses(ip1, ip2);
}

public static IPAddress[] GetAddresses(IPAddress startAddress, IPAddress endAddress)
{
    var startNumber = IPToNumber(startAddress);
    var endNumber = IPToNumber(endAddress);

    var addresses = new List<IPAddress>();
    for (uint i = startNumber; i <= endNumber; ++i)
    {
        addresses.Add(NumberToIP(i));
    }
    return addresses.ToArray();
}

private static UInt32 IPToNumber(IPAddress ip)
{
    var bytes = ip.GetAddressBytes();
    UInt32 result = 0;
    for (int i = 0; i < bytes.Length; ++i)
    {
        result *= 255;
        result += bytes[i];
    }
    return result;
}

private static IPAddress NumberToIP(UInt32 number)
{
    var bytes = new Stack<byte>(4);
    while (number > 0)
    {
        bytes.Push((byte)(number % 255));
        number /= 255;
    }
    return new IPAddress(bytes.ToArray());
}
公共静态IP地址[]GetAddresses(字符串范围字符串)
{
var match=Regex.match(rangeString,@“(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})-(?\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}”);
如果(!match.Success | | |!IPAddress.TryParse(match.Groups[“ip1”].Value,out-IPAddress ip1)| |!IPAddress.TryParse(match.Groups[“ip2”].Value,out-IPAddress ip2))
{
抛出新ArgumentException(“范围无效”);
}
返回GetAddresses(ip1、ip2);
}
公共静态IPAddress[]GetAddresses(IPAddress startAddress,IPAddress endAddress)
{
var startNumber=IPToNumber(startAddress);
var endNumber=IPToNumber(endAddress);
var addresses=新列表();
对于(uint i=起始编号;i 0)
{
字节。推送((字节)(编号%255));
数目/=255;
}
返回新的IPAddress(bytes.ToArray());
}
它将开始和地址转换为
UInt32
值,并以数字形式循环,将索引转换回IPAddress对象

我不确定是否需要实际解析一个范围字符串,所以我在顶部添加了一个单独的方法。如果您确实需要它,您可以将这些方法合并为一个,否则您可以随意忽略它


请向我们展示您迄今为止的尝试。一种简单的方法是将上限和下限转换为整数表示。介于这两个值之间的所有自然数都是您的ip地址。您是只想要两个值之间的ip地址列表,还是想要子网?我通常不会回答“给我代码”的问题,因为您没有付出任何努力,但我想我还是想做一些有趣的事情,所以我已经回答了。以后,我建议您先展示您尝试过的内容。