请问已知IP地址和子网掩码,列出所有子网的计算方法,多谢
请教已知IP地址和子网掩码,列出所有子网的计算方法,谢谢!
已知IP地址:192.168.1.2,子网掩码为255.255.255.192.
请问如何计算出所有子网:
192.168.1.0
192.168.1.64
192.168.1.128
192.168.1.192
不限于C类地址
谢谢!
------解决思路----------------------
判断0的数量可以用192除以2的N次方,看除到多少不能整除,而不用非转二进制
左移位:x=y<<j 把y左移j位的值给x
又移位:x=y>>j
------解决思路----------------------
这个方法很靠谱
B类地址,你直接计算第三段就好了,第四段就是0
就是说,IP地址一共分4段,哪一段不是255或0,才需要计算
------解决思路----------------------
------解决思路----------------------
方法一样的,例如掩码是255.255.192.0,256-192=64,那么子网就是:
x.x.0.0
x.x.(0+64).0
x.x.(0+64*2).0
x.x.(0+64*3).0
你要是想系统学习,请看《CCNA学习指南》第三章
已知IP地址:192.168.1.2,子网掩码为255.255.255.192.
请问如何计算出所有子网:
192.168.1.0
192.168.1.64
192.168.1.128
192.168.1.192
不限于C类地址
谢谢!
------解决思路----------------------
判断0的数量可以用192除以2的N次方,看除到多少不能整除,而不用非转二进制
左移位:x=y<<j 把y左移j位的值给x
又移位:x=y>>j
------解决思路----------------------
这个方法很靠谱
B类地址,你直接计算第三段就好了,第四段就是0
就是说,IP地址一共分4段,哪一段不是255或0,才需要计算
------解决思路----------------------
static void Main(string[] args)
{
foreach (var ip in ListSubnets(IPAddress.Parse("192.168.1.2"), IPAddress.Parse("255.255.255.192")))
{
Console.WriteLine(ip);
}
}
static IEnumerable<IPAddress> ListSubnets(IPAddress ip, IPAddress mask)
{
Func<IPAddress, uint> ipToUint = x =>
{
byte[] bytes = x.GetAddressBytes(); Array.Reverse(bytes);
return BitConverter.ToUInt32(bytes, 0);
};
uint ipValue = ipToUint(ip);
uint maskValue = ipToUint(mask);
// 判断是C类,B类,还是A类地址
uint classValue = ipValue >= 0xC0000000 ? 0xFFFFFF00 : ipValue >= 0x80000000 ? 0xFFFF0000 : 0xFF000000;
uint subnetId = ipValue & classValue;
uint step = (~maskValue) + 1;
uint count = (maskValue - classValue) / step + 1;
for (uint i = 0; i < count; i++)
{
yield return new IPAddress(BitConverter.GetBytes(IPAddress.HostToNetworkOrder((int)subnetId)));
subnetId += step;
}
}
------解决思路----------------------
简便方法,256-192=64,那么子网就是
192.168.1.0,
192.168.1.0+64,
192.168.1.0+64*2,
192.168.1.0+64*3
那如果是B类地址呐?
我实在是转不过来这个弯。。。
方法一样的,例如掩码是255.255.192.0,256-192=64,那么子网就是:
x.x.0.0
x.x.(0+64).0
x.x.(0+64*2).0
x.x.(0+64*3).0
你要是想系统学习,请看《CCNA学习指南》第三章