5在网络计算器上,我输入了用户输入的IP和子网以及输入的所述主机IP的网络地址。 (已计算)
我现在需要的是制作一个向上计数的for循环,直到达到最后一个ip地址(广播)。
因此;
int IP1 = 192,IP2 = 168,IP3 = 0,IP4 = 0, subnet = 255.255.0.0;// 192.168.0.0/16
int totalIPs = 65536; //hostbits^2
do
{
for (int a = IP1; a < 255; a++)
{
IP1++;
for (int b = IP2; b < 255; b++)
{
IP2++;
for (int c = IP3; c < 255; c++)
{
IP3++;
for (int d = IP4; d < 255; d++)
{
totalIPs= totalIPs - 1;
IP4++;
}
IP4 = 0;
}
IP3 = 0;
}
IP2 = 0;
}
}
while (totalIPs > 0);
我知道这个for循环有一些非常严重的错误,但我似乎无法得到它。
我需要的是广播地址,从原始IP值(在这种情况下为192.168.0.0)计数并从那里计数到最后一个IP(现在我们知道它需要计算多少IP)
因此,当八位位组4(d)变为255时,则八位位组3(c)变为1,然后重置八位位组4(d),依此类推,就像时钟一样。
答案 0 :(得分:1)
你真的不需要经历所有这些,你只是在这里添加数字。
首先你这样做:
int carry = 0;
IP4 += totalIPs;
carry = IP4 / 254;
IP4 = IP4 % 254;
if(carry>0) // Need to spill over IP3
{
IP3 += carry;
carry = IP3 / 254;
IP3 = IP3 % 254;
if(carry > 0) // Spill over to IP2
{
IP2 += carry;
carry = IP2 / 254;
IP2 = IP2 % 254;
IP1 += carry;
IP1 %= 254; // No spill-over here
}
}
这有点麻烦,因为你选择使用4个int作为IP部件,但是它将完成工作而没有循环。
答案 1 :(得分:0)
这样做你想要的吗?
int IP1 = 192, IP2 = 168, IP3 = 0, IP4 = 0;
for (int i1 = IP1; i1 < 256; i1++) {
for (int i2 = IP2; i2 < 256; i2++) {
for (int i3 = IP3; i3 < 256; i3++) {
for (int i4 = IP4; i4 < 256; i4++) {
string ip = String.Format("{0}.{1}.{2}.{3}", i1 i2, i3, i4);
...
}
IP4 = 0;
}
IP3 = 0;
}
IP2 = 0;
}
答案 2 :(得分:0)
或者您可以依靠.NET Framework:
byte IP1 = 192, IP2 = 168, IP3 = 0, IP4 = 0;
int totalIPs = 65536;
int littleEndian = IP4 + (IP3 << 8) + (IP2 << 16) + (IP1 << 24) + totalIPs;
var bigEndian = BitConverter.GetBytes(littleEndian).Reverse().ToArray();
Console.WriteLine(new System.Net.IPAddress(bigEndian));