A分类IP住址 在第一个领域值规模:0-127 默认子网掩码:255.0.0.0
B分类IP就拿地址的第一个字段值范围:128-191 默认的子网掩码255.255.0.0
C类IP地址的第一个字段的取值范围:192-223 默认的子网掩码 255.255.255.0
已知IP地址和子网掩码,用IP地址和子网掩码相与就可以得到网络号
子网掩码的最后面有几个零。比方n个,就可以求出主机数:pow(2,n)-2 (全零用于网络地址,全1用于广播地址)
子网掩码中1的个数能够用于求子网的数目
比方IP地址为151.244.20.34 子网掩码为255.255.255.224,这个IP是B类IP,两者相与,
网络号为151.244.20.32
224用二进制表示为11100000,后面有5个0,则主机数为pow(2,5)-2,当中全0用作网络地址,全1为广播地址
16-5=11,则子网数目为pow(2,11)-2 当中全0用作网络地址。全1为换回測试用
以下的python程序能够推断IP的类别并求相应的网络号:
s=raw_input(); s=s.split("."); mask=raw_input(); mask=mask.split("."); for i in range(0,4): s[i]=int(s[i]); mask[i]=int(mask[i]); if(s[0]>=0 and s[0]<=127): print "A IP"; flag=1; elif(s[0]<=192): print "B IP"; flag=2; elif(s[0]<=223): print "C IP"; flag=3; elif(s[0]>255): print "error"; if(flag is 1): i=0; res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]); if(flag is 2): res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]); if(flag is 3): res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]);
版权声明:本文博主原创文章,博客,未经同意不得转载。