zoukankan      html  css  js  c++  java
  • python IPy库

    Website: https://github.com/haypo/python-ipy/
    安装:
    easy_install IPy
     
    >>> from IPy import IP
    >>> dir(IP)                     
    ['__add__', '__cmp__', '__contains__', '__doc__', '__eq__', '__getitem__', '__hash__', '__init__', '__len__', '__lt__', '__module__', '__nonzero__', '__repr__', '__str__', '_getIPv4Map', '_printPrefix', 'broadcast', 'int', 'iptype', 'len', 'make_net', 'net', 'netmask', 'overlaps', 'prefixlen', 'reverseName', 'reverseNames', 'strBin', 'strCompressed', 'strDec', 'strFullsize', 'strHex', 'strNetmask', 'strNormal', 'version']
    >>> IP('172.29.20.80/28').len()  —— IP数量
    16
    >>> IP('172.29.20.80/28').net()  —— 网段   
    IP('172.29.20.80')
    >>> IP('172.29.20.80/28').netmask() —— 掩码
    IP('255.255.255.240')
    >>> IP('172.29.20.0/24').prefixlen() —— 掩码,INT型
    24
    >>> IP('172.29.20.0/24').strNormal(0) —— 网段
    '172.29.20.0'
    >>> IP('172.29.20.0/24').strNormal(1) —— 网段 + 掩码
    '172.29.20.0/24'
    >>> IP('172.29.20.0/24').strNormal(2) —— 网段 + 掩码
    '172.29.20.0/255.255.255.0'
    >>> IP('172.29.20.0/24').strNormal(3) —— 网段 + 掩码
    '172.29.20.0-172.29.20.255'
    >>> IP('172.29.20.0/24').strNetmask() —— 掩码
    '255.255.255.0'
    >>> IP('172.29.20.80/28').strNetmask() —— 掩码
    '255.255.255.240'
    >>> IP('172.29.20.0/24').version() —— IP v4 or v6版本号
    4
    >>> '127.0.0.1' in IP('127.0.0.0/24')
    True
    >>> IP('127.0.0.0/24') in IP('127.0.0.0/25')
    False
    >>> print(IP('192.168.1.1').iptype())
    PRIVATE
    >>> print(IP('152.168.1.1').iptype()) 
    PUBLIC
    >>> help(IP) —— 可以看到最详细的文档,更多的方法
     
    >>> ip=IP('127.0.0.0/30')
    >>> for i in ip:
    ...     print(i)
    ... 
    127.0.0.0
    127.0.0.1
    127.0.0.2
    127.0.0.3
    >>> for i in ip:
    ...     print(type(i))
    ... 
    <type 'instance'>
    <type 'instance'>
    <type 'instance'>
    <type 'instance'>
    >>> print(ip)
    127.0.0.0/30
    >>> for i in ip:            
    ...     print(str(i))
    ... 
    127.0.0.0
    127.0.0.1
    127.0.0.2
    127.0.0.3
    >>> print(ip[2])
    127.0.0.2
    >>> print(str(ip[2]))
    127.0.0.2
     
    其他常用方法介绍:
     |  __cmp__(self, other) —— 比较大小
     |      Called by comparison operations.
     |      
     |      Should return a negative integer if self < other, zero if self
     |      == other, a positive integer if self > other.
     |      
     |      Networks with different prefixlen are considered non-equal.
     |      Networks with the same prefixlen and differing addresses are
     |      considered non equal but are compared by their base address
     |      integer value to aid sorting of IP objects.
     |      
     |      The version of Objects is not put into consideration.
     |      
     |      >>> IP('10.0.0.0/24') > IP('10.0.0.0')
     |      1
     |      >>> IP('10.0.0.0/24') < IP('10.0.0.0')
     |      0
     |      >>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
     |      1
     |      >>> IP('10.0.0.0/24') > IP('12.0.0.0/24')
     |      0
     |  __contains__(self, item) —— 检查包含关系
     |      Called to implement membership test operators.
     |      
     |      Should return true if item is in self, false otherwise. Item
     |      can be other IP-objects, strings or ints.
     |      
     |      >>> IP('195.185.1.1').strHex()
     |      '0xc3b90101'
     |      >>> 0xC3B90101 in IP('195.185.1.0/24')
     |      True
     |      >>> '127.0.0.1' in IP('127.0.0.0/24')
     |      True
     |      >>> IP('127.0.0.0/24') in IP('127.0.0.0/25')
     |      False
     |  overlaps(self, item) —— 检查是否重叠
     |      Check if two IP address ranges overlap.
     |      
     |      Returns 0 if the two ranges don't overlap, 1 if the given
     |      range overlaps at the end and -1 if it does at the beginning.
     |      
     |      >>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
     |      1
     |      >>> IP('192.168.0.0/23').overlaps('192.168.1.255')
     |      1
     |      >>> IP('192.168.0.0/23').overlaps('192.168.2.0')
     |      0
     |      >>> IP('192.168.1.0/24').overlaps('192.168.0.0/23')
     |      -1
     
     
     

    根据ip地址和子网掩码计算网段地址和广播地址(原创) Python里有一个专门处理该类问题的IP类库,来看看:


    view sourceprint?01 #! /usr/bin/env python 

    02   

    03 import sys 

    04 from IPy import IP 

    05   

    06 address = sys.argv[1] 

    07 netmask = sys.argv[2] 

    08   

    09 #print address,netmask 

    10   

    11 #help(IP) 

    12 networkAddress = IP(address).make_net(netmask) # init a IP instance, can with netmask directly, or use make_net(netmask) 

    13 bcastAddress = IP(networkAddress).broadcast() # return the broadcast ip address 

    14   

    15 print networkAddress 

    16 print bcastAddress

     
  • 相关阅读:
    CF1454F Array Partition
    leetcode1883 准时抵达会议现场的最小跳过休息次数
    leetcode1871 跳跃游戏 VII
    leetcode1872 石子游戏VIII
    CF1355C Count Triangles
    CF1245D Shichikuji and Power Grid
    CF1368C Even Picture
    CF1368D AND, OR and square sum
    CF1395C Boboniu and Bit Operations
    SpringBoot和开发热部署
  • 原文地址:https://www.cnblogs.com/monsteryang/p/6700147.html
Copyright © 2011-2022 走看看