def countBit(countNum,bit): giveNum="0"*(bit-len(bin(countNum)[2:]))+bin(countNum)[2:] return giveNum #将ip转十进制 def minIp(ip): value = countBit(int(ip.split('.')[0]),8) + countBit(int(ip.split('.')[1]),8)+ countBit(int(ip.split('.')[2]),8)+ countBit(int(ip.split('.')[3]),8) return int(value,2) def net(n): ip1 = n.split('/')[0] mask1 = int(n.split('/')[1]) if mask1 == 32: minip = ip1 maxip = ip1 elif mask1 > 24: k = int(ip1.split('.')[-1]) dels = 8-(mask1 - 24) netNumb = 2**dels-1 #可用地址范围 eq = k/(netNumb+1) str1 = str((netNumb+1)*eq) str2 = str((netNumb+1)*eq+netNumb) minip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+ip1.split('.')[2]+'.'+str1 maxip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+ip1.split('.')[2]+'.'+str2 elif mask1 == 24: minip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+ip1.split('.')[2]+'.0' maxip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+ip1.split('.')[2]+'.'+'255' elif mask1 > 16 and mask1 < 24: k = int(ip1.split('.')[2]) dels = 8-(mask1 - 16) netNumb = 2**dels-1 #可用地址范围 eq = k/(netNumb+1) str1 = str((netNumb+1)*eq) str2 = str((netNumb+1)*eq+netNumb) minip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+str1+'.'+'0' maxip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+str2+'.'+'255' elif mask1 == 16: minip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+'0'+'.0' maxip = ip1.split('.')[0]+'.'+ip1.split('.')[1]+'.'+'255'+'.'+'255' elif mask1 > 8 and mask1 < 16: k = int(ip1.split('.')[1]) dels = 8-(mask1 - 8) netNumb = 2**dels-1 #可用地址范围 eq = k/(netNumb+1) str1 = str((netNumb+1)*eq) str2 = str((netNumb+1)*eq+netNumb) minip = ip1.split('.')[0]+'.'+str1+'.'+'0'+'.'+'0' maxip = ip1.split('.')[0]+'.'+str2+'.'+'255'+'.'+'255' elif mask1 == 8: minip = ip1.split('.')[0]+'.'+'0'+'.'+'0'+'.0' maxip = ip1.split('.')[0]+'.'+'255'+'.'+'255'+'.'+'255' elif mask1 > 0 and mask1 < 8: k = int(ip1.split('.')[0]) dels = 8-(mask1 - 0) netNumb = 2**dels-1 #可用地址范围 eq = k/(netNumb+1) str1 = str((netNumb+1)*eq) str2 = str((netNumb+1)*eq+netNumb) minip = str1+'.'+'0'+'.'+'0'+'.'+'0' maxip = str2+'.'+'255'+'.'+'255'+'.'+'255' elif mask1 == 0: minip = '0.0.0.0' maxip = '255.255.255.255' else: print 'bad mask!' return [minIp(minip),minIp(maxip)] #转化整型
调用方式 net(10.2.2.0/24)
可以封装成一个类,没时间,so~~