yunde110 发表于 2015-4-26 05:11:04

转:python——IPy库

python——IPy库 (2011-03-09 15:29)
分类: python

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))
...





>>> 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)
127.0.0.2
>>> print(str(ip))
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
  07 netmask = sys.argv
  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
页: [1]
查看完整版本: 转:python——IPy库