子网掩码转换成IP范围

子网掩码转换为IP范围
 
在网络应用中,经常需要将子网掩码转换为IP范围,以便进行进一步的计算.
以下是转换的原理及代码:    
一 子网掩码的作用, 就是将某个IP地址划分为'子网编号'和'主机地址'
   掩码格式       [子网编号:26bit               ]主机地址:6bit
   172.16.2.64/26 [10101100 00010000 00000010 01]000000
   172.16.2.96/26 [10101100 00010000 00000010 01]100000
   6bit的主机地址, 可以容纳63个编号. 则上面两个掩码的范围是
   掩码格式       IP范围
   172.16.2.64/26 [172.16.2.64 - 172.16.2.127]
   172.16.2.96/26 [172.16.2.96 - 172.16.2.127] *上一条的子集
 
二 算法    
typedef struct
{
u_int32_t min;
u_int32_t max;
}ip_range_t;
int str2iprange( ip_range_t *ipr, char *sipr)
{
char sip[16];
char smask[3];
sscanf( sipr, "%[^/]/%s", sip, smask);
ipr->min = ntohl(inet_addr( sip));
ipr->max = (ipr->min & ~( (0x1 << (32 - atoi(smask))) - 1)) + ( (0x1 << (32 - atoi(smask))) - 1);
}
三 测试    
ip_range_t ipr;
str2iprange( &ipr, "172.16.2.94/24");
struct in_addr min = { htonl( ipr.min)};
printf("%s - ", inet_ntoa( min));
struct in_addr max = { htonl( ipr.max)};
printf("%s /n", inet_ntoa( max));
输出结果:
172.16.2.94 - 172.16.2.127
END

为方便自己以后查询,故转自:http://www.th7.cn/system/lin/201301/36773.shtml



IP地址202.112.14.137的子网掩码为什么是255.255.255.224?
如果这个掩码为255.255.255.224是因为它划分了2的三次方即 8个子网,减去网络地址和广播地址部分,只能有6个子网
8位被掩码借去3位还剩下5位,即2的5次方为32,
同样也应该减去网络地址和广播地址,即为30个主机。
所以这样的掩码是分为6个子网。每个子网可有30台主机。

题型:一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址。
常规办法是把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后即可得到网络地址。其实大家只要仔细想想,可以得到另一个方法:255.255.255.224的掩码所容纳的IP地址有256-224=32个(包括网络地址和广播地址),那么具有这种掩码的网络地址一定是32的倍数。而 网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地址在这个范围内,因此略小于137而又是32的倍数的只有128,所以得出网络地址是202.112.14.128。而广播地址就是下一个网络的网络地址减1。而下一个32的倍数是160,因此可以得到广播地址为202.112.14.159。可参照下表来理解本例。
子网络 2进制子网络域数 2进制主机域数的范围 2进制主机域数的范围
第1个子网络 000 00000 thru 11111 .0 thru.31
第2个子网络 001 00000 thru 11111 .32 thru.63
第3个子网络 010 00000 thru 11111 .64 thru.95
第4个子网络 011 00000 thru 11111 .96 thru.127
第5个子网络 100 00000 thru 11111 .128 thru.159
第6个子网络 101 00000 thru 11111 .160 thru.191
第7个子网络 110 00000 thru 11111 .192 thru.223
第8个子网络 111 00000 thru 11111 .124 thru.255

题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。比如一个子网有10台主机,那么对于这个子网需要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。因为13小于16(16等于2的4次方),所以主机位为4位。而
256-16=240
所以该子网掩码为255.255.255.240。
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为:
14+1+1+1=17
17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值