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]);
版权声明:本文博主原创文章,博客,未经同意不得转载。