Python:ip地址处理模块

@lianst  November 14, 2017

安装

1.先下载源码,地址:https://pypi.python.org/pypi/IPy/,然后解压后使用命令python setup.py install安装。
2.或者直接使用pip install ipy进行安装

使用

查看IP地址版本

>>> IPy.IP('192.168.1.1').version()
4
>>> IPy.IP('::1').version()
6

计算网段IP数量

#!/usr/bin/env python
#coding:utf-8
import IPy

ip = IPy.IP('192.168.0.0/28')
# len()方法可以计算网段的IP个数
print ip.len() 
for i in ip:
    print i

# 结果
[root@sg data]# python ip.py 
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
192.168.0.7
192.168.0.8
192.168.0.9
192.168.0.10
192.168.0.11
192.168.0.12
192.168.0.13
192.168.0.14
192.168.0.15

反向解析名称、IP类型、IP转换等

>>> ip = IPy.IP('192.168.1.1')
>>> ip.reverseName() # 反向解析
'1.1.168.192.in-addr.arpa.'
>>> ip.iptype() # ip类型-私网ip
'PRIVATE'
>>> IPy.IP('8.8.8.8').iptype() # ip类型-公网ip
'PUBLIC'
>>> IPy.IP('8.8.8.8').int() # 转换为整型格式
134744072
>>> IPy.IP('8.8.8.8').strHex() # 转换为十六进制格式
'0x8080808'
>>> IPy.IP('8.8.8.8').strBin() # 转换成二进制格式
'00001000000010000000100000001000'
>>> print IPy.IP('0x8080808') # 十六进制转换为IP格式
8.8.8.8
>>> print IPy.IP(134744072)  # 整型格式转换为IP格式
8.8.8.8

网络地址的转换

>>> print (IPy.IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
>>> print (IPy.IP('192.168.1.0/255.255.255.0',make_net=True))
192.168.1.0/24
>>> print IPy.IP('192.168.1.0-192.168.1.255',make_net=True)
192.168.1.0/24

定制不同输出类型的网段

通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段,输出类型为字符串.

>>> IPy.IP('192.168.1.0/24').strNormal(0)
'192.168.1.0'         # 无返回
>>> IPy.IP('192.168.1.0/24').strNormal(1)
'192.168.1.0/24'      # prefix格式
>>> IPy.IP('192.168.1.0/24').strNormal(2)
'192.168.1.0/255.255.255.0' # decimalnetmask格式
>>> IPy.IP('192.168.1.0/24').strNormal(3)
'192.168.1.0-192.168.1.255' # lastIP格式

多网络计算方法详解

比较两个网段是否存在包含、重叠等关系,比如同网络但不同prefixlen会认为是不相等的网段,如10.0.0.0/16不等于10.0.0.0/24,另外即使具有相同的prefixlen但处于不同的网络地址,同样也视为不相等,如10.0.0.0/16不等于192.0.0.0/16。IPy支持类似于数值型数据的比较,以帮助IP对象进行比较

>>> IPy.IP('10.0.0.0/24') < IPy.IP('12.0.0.0/24')  # 比较IP大小
True
>>> '192.168.1.110' in IPy.IP('192.168.1.0/24') # 判断IP地址和网段是否包含于另一个网段中
True
>>> '192.168.1.110' in IPy.IP('192.168.1.0/32')
False
>>> IPy.IP('192.168.1.0/24') in IPy.IP('192.168.0.0/16')
True
>>> IPy.IP('192.168.0.0/23').overlaps('192.168.1.0/24') # 判断两个网段是否存在重叠(overlaps方法)
1
>>> IPy.IP('192.168.0.0/24').overlaps('192.168.1.0/24')
0

添加新评论