Python学习笔记-IP地址处理模块Ipy

简介:

IP地址处理模块Ipy

    IPy模块可以很好的辅助我们高效完成IP的规划工作。

    参考:https://github.com/autocracy/python-ipy

        安装IPy模块

1
[root@kurol ~] # python36 -m easy_install -i http://pypi.douban.com/simple/ IPy

       导入模块

1
In [ 12 ]:  from  IPy  import  IP

1、IP地址、网段的基本处理

        通过version区分IPv4和IPv6:

1
2
3
4
5
In [ 13 ]: testip  =  ( '10.0.0.0/8' , '::1' )
In [ 14 ]: IP(testip[ 0 ]).version()
Out[ 14 ]:  4
In [ 15 ]: IP(testip[ 1 ]).version()
Out[ 15 ]:  6

        通过指定的网段输出该网段的IP个数及所有IP地址清单:

1
2
3
4
5
6
7
8
9
10
In [ 25 ]: testip1  =  IP( '192.168.1.0/24' )
In [ 26 ]:  print  (testip1. len ())
256
In [ 27 ]:  for  in  testip1:
  ...:  print  (x)
  ...: 
192.168 . 1.0
192.168 . 1.1
192.168 . 1.2
......

 IP类常用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
In [ 32 ]: testip2  =  IP( '192.168.100.10' )
 
In [ 33 ]: testip2.reverseNames()  #反向解析地址格式
Out[ 33 ]: [ '10.100.168.192.in-addr.arpa.' ]
 
In [ 34 ]: testip2.iptype()    #返回IP类型,192.168.100.10为私有地址
Out[ 34 ]:  'PRIVATE'
 
In [ 35 ]: IP( '8.8.8.8' ).iptype()    #返回IP类型,8.8.8.8为共有地址
Out[ 35 ]:  'PUBLIC'
 
In [ 36 ]: testip2. int ()   #转换成整型格式
Out[ 36 ]:  3232261130
 
In [ 37 ]: testip2.strHex()    #转换成十六进制格式
Out[ 37 ]:  '0xc0a8640a'
 
In [ 38 ]: testip2.strBin()    #转换成二进制格式
Out[ 38 ]:  '11000000101010000110010000001010'
 
In [ 39 ]:  print  (IP( 0xc0a8640a ))    #十六进制转成IP格式
192.168 . 100.10

        网络地址转换,根据IP与掩码生成网段格式:

1
2
3
4
5
6
In [ 47 ]:  print  (IP( '192.168.1.0' ).make_net( '255.255.255.0' ))
192.168 . 1.0 / 24
In [ 48 ]:  print  (IP( '192.168.1.0/255.255.255.0' ,make_net = True ))
192.168 . 1.0 / 24
In [ 49 ]:  print  (IP( '192.168.1.0-192.168.1.255' ,make_net = True ))
192.168 . 1.0 / 24

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

wantprefixlen取值及含义:

  •     wantprefixlen=0,无返回,如192.168.1.0

  •     wantprefixlen=1,prefix格式,如192.168.1.0/24

  •     wantprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0

  •     wantprefixlen=3,lastIP格式,如192.168.1.0-192.168.1.255

1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [ 52 ]: IP( '192.168.1.0/24' ).strNormal(wantprefixlen = 0 )
Out[ 52 ]:  '192.168.1.0'
In [ 53 ]: IP( '192.168.1.0/24' ).strNormal(wantprefixlen = 1 )
Out[ 53 ]:  '192.168.1.0/24'
 
#省略wantprefixlen
In [ 54 ]: IP( '192.168.1.0/24' ).strNormal( 0 )
Out[ 54 ]:  '192.168.1.0'
In [ 55 ]: IP( '192.168.1.0/24' ).strNormal( 1 )
Out[ 55 ]:  '192.168.1.0/24'
In [ 56 ]: IP( '192.168.1.0/24' ).strNormal( 2 )
Out[ 56 ]:  '192.168.1.0/255.255.255.0'
In [ 57 ]: IP( '192.168.1.0/24' ).strNormal( 3 )
Out[ 57 ]:  '192.168.1.0-192.168.1.255'

2、多网络计算方法

    IPy支持类似于数值型数据的比较,以帮助IP对象进行比较

1
2
3
4
In [ 67 ]: IP( '10.0.0.0/24' ) > IP( '12.0.0.0/24' )
Out[ 67 ]:  False
In [ 68 ]: IP( '10.0.0.0/24' ) < IP( '12.0.0.0/24' )
Out[ 68 ]:  True

 判断IP地址和网段是否包含于另一个网段中:

1
2
3
4
5
6
In [ 69 ]:  '192.168.1.100'  in  IP( '192.168.1.0/24' )
Out[ 69 ]:  True
In [ 70 ]:  '192.168.2.100'  in  IP( '192.168.1.0/24' )
Out[ 70 ]:  False
In [ 71 ]:  '192.168.1.0/24'  in  IP( '192.168.0.0/16' )
Out[ 71 ]:  True

判断两个网段是否存在重叠,采用IPy提供的overlaps方法:

1
2
3
4
In [ 74 ]: IP( '192.168.0.0/23' ).overlaps( '192.168.1.0/24' )
Out[ 74 ]:  1   #返回1代表存在重叠
In [ 75 ]: IP( '192.168.1.0/24' ).overlaps( '192.168.2.0' )
Out[ 75 ]:  0 #返回0代表不存在重叠

实例:根据输入的IP或子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息:

1
[root@kurol pkg1] # vim testip.py 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/python
#coding:utf-8
#
from  IPy  import  IP
import  sys 
reload (sys)
sys.setdefaultencoding( 'utf-8' )
ip_test  =  raw_input ( '请输入IP地址或网段地址:' )
ips  =  IP(ip_test)
if  len (ips) >  1 :
  print  ( '网络地址:%s'  %  ips.net())
  print  ( '掩码:%s'  %  ips.netmask())
  print  ( '网络广播地址:%s'  %  ips.broadcast())
  print  ( '地址反向解析:%s'  %  ips.reverseNames())
  print  ( '网络子网数:%s'  %  len (ips))
else :
  print  ( 'IP反向解析 %s'  %  ips.reverseNames())
print  ( '此IP地址转换成十六进制: %s'  %  ips.strHex())
print  ( '此IP地址转换成二进制: %s'  %  ips.strBin())
print  ( '此IP地址类型: %s'  %  ips.iptype())


执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@kurol pkg1] # python testip.py 
请输入IP地址或网段地址:192.168.1.0 /24
网络地址:192.168.1.0
掩码:255.255.255.0
网络广播地址:192.168.1.255
地址反向解析:[ '1.168.192.in-addr.arpa.' ]
网络子网数:256
此IP地址转换成十六进制: 0xc0a80100
此IP地址转换成二进制: 11000000101010000000000100000000
此IP地址类型: PRIVATE
 
[root@kurol pkg1] # python testip.py 
请输入IP地址或网段地址:192.168.1.1
IP反向解析 [ '1.1.168.192.in-addr.arpa.' ]
此IP地址转换成十六进制: 0xc0a80101
此IP地址转换成二进制: 11000000101010000000000100000001
此IP地址类型: PRIVATE






      本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1935068 ,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
895 7
|
7月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
628 0
|
7月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
620 4
|
8月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
252 4
|
7月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
713 0
|
7月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
1001 0
|
8月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
717 0
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
689 159
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
508 159

推荐镜像

更多