gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:33 31 4
gpt4 key购买 nike

所以我在网上看到了很多例子,这些例子展示了如果你知道起始 IP 和结束 IP 如何获得完整的 IP,但我需要的是在提供后告诉我完整的 IP 范围带有起始 IP 和所需 IP 地址数的代码。

因此,例如,如果我提供 192.168.0.1 的 IP 地址作为起始 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 年前的事了,而且只是一个学期的一小部分。

最佳答案

您可以将 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);
}

关于c# - 从 IP 地址开始和 IP 地址计数生成 IP 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588246/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com