C# 如何从该格式获取这些范围内的所有IP地址?
如何从这种格式计算出这个范围内的所有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}.
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地址列表,还是想要子网?我通常不会回答“给我代码”的问题,因为您没有付出任何努力,但我想我还是想做一些有趣的事情,所以我已经回答了。以后,我建议您先展示您尝试过的内容。