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

本文涉及的产品
公网NAT网关,每月750个小时 15CU
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
2月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
56 4
|
18天前
|
Python
Python Internet 模块
Python Internet 模块。
118 74
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
118 63
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
2月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
55 6
|
2月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
数据采集 API 定位技术
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
|
29天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
28天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。