标题: [特效代码] 这个计算【IP网段,主机数】的算法用批处理如何实现呢? [打印本页]
作者: xzwcn 时间: 2012-12-2 15:41 标题: 这个计算【IP网段,主机数】的算法用批处理如何实现呢?
算法介绍:
IP地址,子网掩码,网络地址,广播地址,地址范围,主机数_心静如水的空间_百度空间
2012-12-01 09:30:06 笔记本:.默认笔记本
【例1】下面例子IP地址为192·168·100·5 子网掩码是255·255·255·0。算出网络地址、广播地址、地址范围、主机数
1、分步骤计算
1)将IP地址和子网掩码换算为二进制,子网掩码连续全1的是网络地址,后面的是主机地址。
192.168.100.5 11000000.10101000.01100100.00000101
255.255.255.0 11111111.11111111.11111111.00000000
2)IP地址和子网掩码进行与运算,结果是网络地址
192.168.100.5 11000000.10101000.01100100.00000101
255.255.255.0 11111111.11111111.11111111.00000000
与运算______________________________________________________________
结果为: 192.168.100.0 11000000.10101000.01100100.00000000
3) 将上面的网络地址中的网络地址部分不变,主机地址变为全1,结果就是广播地址。
网络地址为: 192.168.100.0 11000000.10101000.01100100.00000000
___________________________________________________________________________
将主机地址变为全1
广播地址为: 192.168.100.255 11000000.10101000.01100100.11111111
4) 地址范围就是含在本网段内的所有主机
网络地址+1即为第一个主机地址,广播地址-1即为最后一个主机地址,由此可以看出
地址范围是: 网络地址+1 至 广播地址-1
本例的网络范围是:192·168·100·1 至 192·168·100·254
也就是说下面的地址都是一个网段的。
192·168·100·1、192·168·100·2 ... 192·168·100·20 ... 192·168·100·111... 192·168·100·254
5) 主机的数量
主机的数量=2二进制的主机位数-2
减2是因为主机不包括网络地址和广播地址。本例二进制的主机位数是8位。
主机的数量=28-2=254
【例2】IP地址为128·36·199·3 子网掩码是255·255·240·0。算出网络地址、广播地址、地址范围、主机数。
1) 将IP地址和子网掩码换算为二进制,子网掩码连续全1的是网络地址,后面的是主机地址, 虚线前为网络地址,虚线后为主机地址
128?36?199?3????????????? 10000000?00100100?1100 0111?00000011
255?255?240?0??????????? 11111111?11111111?1111 0000?00000000
2)IP地址和子网掩码进行与运算,结果是网络地址
128?36?199?3????????????? 10000000?00100100?1100 0111?00000011
255?255?240?0??????????? 11111111?11111111?1111 0000?00000000
与运算 ______________________________________________________________
结果为网络地址:128?36?192?0 10000000?00100100?1100 0000?00000000
3)将运算结果中的网络地址不变,主机地址变为1,结果就是广播地址。
128?36?192?0 10000000?00100100?1100 0000?00000000
______________________________________________________________
广播地址: 128?36?207?255????????? 10000000?00100100?1100 1111?11111111
4) 地址范围就是含在本网段内的所有主机
网络地址+1即为第一个主机地址,广播地址-1即为最后一个主机地址,由此可以看出
本例的网络范围是:128?36?192?1???至????? 128?36?207?254
5) 主机的数量
主机的数量=2二进制位数的主机-2=212-2=4094
从上面两个例子可以看出不管子网掩码是标准的还是特殊的,计算网络地址、广播地址、地址数时只要把地址换算成二进制,然后从子网掩码处分清楚连续1以前的是网络地址,后是主机地址进行相应计算即可
【C#版的代码---只计算了网段有哪些IP。。。】:
//有错误,如IP为:192.168.1.1 子网:255.255.255.0 的所在网段是:192.168.1.1---192.168.1.254 【除去网络地址和广播地址】
而这个算法的结果为:192.168.1.0---192.168.1.254。。。- private byte[] NetIPDeal(byte[] localip, byte[] submask)
- {
- byte[] result = { 0, 0, 0, 0 };
- int[] temp = { 0, 0, 0, 0 };
- for (int i = 0; i < 4; i++)
- {
- temp[i] = (int)localip[i] & (int)submask[i];
- result[i] = (byte)temp[i];
- }
- return result;
- }
-
- private void GetDestIp(string strlocalip, string strsubmask)
- {
- byte[] submask = { 0, 0, 0, 0 };
- byte[] localip = { 0, 0, 0, 0 };
-
- IPAddress ip = IPAddress.Parse(strlocalip);
- localip = ip.GetAddressBytes();
- ip = IPAddress.Parse(strsubmask);
- submask = ip.GetAddressBytes();
-
- int[] interval = { 0, 0, 0, 0 };
- byte[] top = { 0, 0, 0, 0 };
- byte[] bottom = { 0, 0, 0, 0 };
- byte[] netip = { 0, 0, 0, 0 };
- for (int i = 0; i < 4; i++)
- {
- if (submask[i] != 255)
- interval[i] = 255 - (int)submask[i] + 1;
- }
- netip = NetIPDeal(localip, submask);
- byte temp;
- for (int i = 0; i < 4; i++)
- {
- temp = localip[i];
- if (interval[i] != 0)
- {
- int temp_result;
- temp_result = (int)temp & (int)(submask[i]);
- if (interval[i] != 256)
- {
- while (temp_result == (int)netip[i])
- {
- temp++;
- temp_result = (int)temp & (int)(submask[i]);
- }
- top[i] = (byte)((int)temp - 1);
- bottom[i] = (byte)((int)top[i] - interval[i] + 1);
- }
- else
- {
- top[i] = 254; bottom[i] = 0;
- }
- }
- else
- {
- top[i] = (byte)temp; bottom[i] = top[i];
- }
- }
- for (byte i = bottom[0]; i <= top[0]; i++)
- {
- for (byte j = bottom[1]; j <= top[1]; j++)
- {
- for (byte k = bottom[2]; k <= top[2]; k++)
- {
- for (byte t = bottom[3]; t <= top[3]; t++)
- {
- string dest;
- dest = i.ToString() + "." + j.ToString() + "." + k.ToString() + "." + t.ToString();
- this.listBox1.Items.Add(dest);
- }
- }
- }
- }
- }
复制代码
[attach]5934[/attach]
[attach]5935[/attach]
作者: xzwcn 时间: 2012-12-2 15:45
C#源代码.zip_免费高速下载|百度云 网盘-分享无限制
http://pan.baidu.com/share/link?shareid=136402&uk=2870668148
作者: xzwcn 时间: 2012-12-5 21:42
没人会么?
作者: hlzj88 时间: 2012-12-5 23:13
你的文章太长 没仔细看 要不你看看这个能不能参考
http://www.bathome.net/thread-7050-1-1.html
win7下测试会自动关闭 原因? 不知道
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |