/// <summary>
/// Create IP part of the client information payload.
/// </summary>
/// <param name="index">Index of the current client being generated.</param>
/// <returns>Simulated client IP address.</returns>
private string CreateClientIp(UInt32 index)
{
index = (index << 2) + 3;
return $"192.{(index >> 16) & 0xFF}.{(index >> 8) & 0xFF}.{index & 0xFF}";
}
以下方法从192.0.0.3开始生成IP,增量为3。我希望有我的第一个地址192.0.0.2(避免网络地址以及第一个通常用于GW的地址)和下一个增加一。对此有什么想法吗?谢啦!
以下是避免地址以255结尾的更好代码。:
public class IncrementIP
{
byte[] array = new byte[4];
public IncrementIP(string IP)
{
array = IP.Split(new char[] { '.' }).Select(x => byte.Parse(x)).ToArray();
}
public string Increment()
{
int lsb = array[3] + 3;
if (lsb <= 254)
{
array[3] = (byte)lsb;
}
else
{
array[3] = 2;
for (int i = 2; i >= 0; i--)
{
if (array[i] == 254)
{
array[i] = 0;
}
else
{
array[i] += 1;
break;
}
}
}
return string.Join(".", array);
}
}
我认为最简单的做法是使用IPAddress并操作用于创建它们的字节。看着你的帖子的评论,我不确定你是否需要修改以不使用255。不确定。不管怎样,这应该给你一个很好的起点。如果需要字符串形式,请在返回的IP地址上使用ToString()。
static void Main(string[] _)
{
var address = IPAddress.Parse("192.0.0.2");
foreach (var ip in GetTestAddresses(address, 300))
{
Console.WriteLine(ip);
}
}
public static IEnumerable<IPAddress> GetTestAddresses(IPAddress start, int count)
{
var bytes = start.GetAddressBytes();
for (int i = 0; i < count; ++i)
{
var part4 = bytes[^1];
var part3 = bytes[^2];
if (part4 < 255)
{
++part4;
}
else if (part3 < 255)
{
part4 = 0;
++part3;
}
else
{
break;
}
bytes[^1] = part4;
bytes[^2] = part3;
yield return new IPAddress(bytes);
}
}