zoukankan      html  css  js  c++  java
  • python子网拆分IP段

    # author: 阿辉枫情
    import re
    import struct
    import socket
    
    def IPSplitBlocks(minip, maxip):
        result = []
        JudgeIp = re.compile(r'^(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d).(25[0-5]|2[0-4]d|1dd|[1-9]d|d)$')
        Flage_min = JudgeIp.match(minip)
        Flage_max = JudgeIp.match(maxip)
        if Flage_min and Flage_max:
            minip_num = socket.ntohl(struct.unpack(
                "I", socket.inet_aton(str(minip)))[0])
            maxip_num = socket.ntohl(struct.unpack(
                "I", socket.inet_aton(str(maxip)))[0])
            if minip_num > maxip_num:
                print "Error:[%s,%s] IP address size is not legitimate" % (minip, maxip)
                exit()
            else:
                step = 2**(32 - subnet) - 1
                min_num = minip_num
                while True:
                    max_num = min_num & (~step & 0xFFFFFFFF)
                    max_num |= step & 0xFFFFFFFF
                    if max_num >= maxip_num:
                        minip = socket.inet_ntoa(
                            struct.pack('I', socket.htonl(min_num)))
                        maxip = socket.inet_ntoa(
                            struct.pack('I', socket.htonl(maxip_num)))
                        result.append((minip, maxip))
                        break
                    minip = socket.inet_ntoa(
                        struct.pack('I', socket.htonl(min_num)))
                    maxip = socket.inet_ntoa(
                        struct.pack('I', socket.htonl(max_num)))
                    result.append((minip, maxip))
                    min_num = max_num + 1
        else:
            print "Error:[%s,%s] IP addresses are not legitimate!!!" % (minip, maxip)
            exit()
        return result
    if __name__ == '__main__':
        subnet = 24
        print IPSplitBlocks("192.168.1.1","192.168.2.1",)
  • 相关阅读:
    毛皮立方体
    APPLE buSinEss
    #4613. problem C
    #4614. problem B
    idiots
    熊猫(i)
    圆盘自动机 cell
    小L的占卜
    有趣的数(number)
    「JOISC 2015 Day 1」卡片占卜
  • 原文地址:https://www.cnblogs.com/shenwenkai/p/6007627.html
Copyright © 2011-2022 走看看