py处理网段转化模块

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~~

原文地址:https://www.cnblogs.com/fengzaoye/p/6826061.html