Python:ip地址处理模块

安装

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jeremy的技术点滴

JVM的Finalization Delay引起的OOM

42080
来自专栏技术总结

iOS进阶之runtime作用

24190
来自专栏jianhuicode

js与android webview交互

0x01 js调用java代码 android webview中支持通过添加js接口 webview.addJavascriptInterface(new Js...

24050
来自专栏ACM算法日常

Codeforces Round #422(Div.2) C. Hacker, pack your bags!

It's well known that the best way to distract from something is to do one's favo...

10530
来自专栏Java编程技术

常用开源框架中设计模式使用分析-责任链设计模式

说起来设计模式,大家应该都耳熟能详,下面就带大家看下开源框架框架中是如何应用这些经典设计模式的。

20120
来自专栏程序员互动联盟

【专业技术】OPENGL与EGL

什么是OpenGL ES OpenGL ES是一套适用于手持嵌入式设备的3DAPI。比如手机、PDA、汽车、航空等等上面都可以使用到OpenGL ES。Ope...

66780
来自专栏Spring相关

从模块外部访问内部成员

10120
来自专栏图像识别与深度学习

蓝牙项目开发心得

34990
来自专栏JAVA技术站

JFinal 参数校验插件扩展,让后台参数校验像js一样方式好用

email=^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$,"邮箱格式不正确" chinese=^[...

32720
来自专栏数据结构与算法

BZOJ1269: [AHOI2006]文本编辑器editor

Descriptio 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器。你能帮助他吗? 为了明确任务目标,可可对“文本编辑器...

29470

扫码关注云+社区

领取腾讯云代金券