从IP地址开始和IP地址计数生成IP范围

时间:2014-07-05 16:09:36

标签: c# networking

所以我在网上看到了大量的例子,如果你知道起始IP和终端IP,它们会展示如何获得全系列的IP,但我需要的是在提供完IP后告诉我完整的IP范围。代码包含Start IP和所需的IP地址数。

因此,例如,如果我提供IP地址192.168.0.1作为起始IP和需要60个IP的IP数量,结果应该返回结果

StartIP = 192.168.0.1
EndIP = 192.168.0.61
IPCount = 60

我见过IPNetwork库,但需要使用我们没有使用的CIDR。

编辑:

我尝试的是以下内容。

我已经尝试过IPNetwork,当使用它时,它需要CIDR,如上所述我们没有使用CIDR,所以这对我没用。

我想到了最后一个八位字节并添加到该数字的基本知识,所以如果最后一个八位字节是2且IP的数量是60而新的最后一个八位字节是62.这很简单但是当最后一个八位字节大概是200,所需的IP数量是70,而不是我们不能只添加到最后一个八位字节,因为最后一个八位字节最终会得到270,因为你不能超过255就有问题。 现在,如何计算IP实际应该是什么是另一个问题。至于我尝试过哪些代码,这里没什么用处,因为它已经证明完全是错误的方向,因为我发现了上面提到的问题。 我不是在找人直接为我编写代码我可以编写自己的代码,但我希望有人能让我走上正确的道路继续前进。不幸的是,我从来没有一个IP地址。我在学校花了很短的时间来学习如何计算IP地址。那是14年前的事,只有一个学期的一小部分。

1 个答案:

答案 0 :(得分:5)

您可以将IP地址解析为32位值(就像它真正代表的那样),然后您可以轻松地遍历范围并为它们创建IP地址。

转换:

public static uint ParseIP(string ip) {
  byte[] b = ip.Split('.').Select(s => Byte.Parse(s)).ToArray();
  if (BitConverter.IsLittleEndian) Array.Reverse(b);
  return BitConverter.ToUInt32(b, 0);
}

public static string FormatIP(uint ip) {
  byte[] b = BitConverter.GetBytes(ip);
  if (BitConverter.IsLittleEndian) Array.Reverse(b);
  return String.Join(".", b.Select(n => n.ToString()));
}

创建范围:

string StartIP = "192.168.0.1";
int IPCount = 61;

uint n = ParseIP("192.168.0.1");
string[] range = new string[IPCount];
for (uint i = 0; i < IPCount; i++) {
  range[i] = FormatIP(n + i);
}