设为首页 收藏本站
查看: 974|回复: 0

[经验分享] 转:python——IPy库

[复制链接]

尚未签到

发表于 2015-4-26 05:11:04 | 显示全部楼层 |阅读模式
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[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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60584-1-1.html 上篇帖子: Python:如何得到Popen的输出? 下篇帖子: Python简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表