超级实用的IP地址处理模块IPY详解
文章目录
- 实用的IP地址处理模块IPY详解
- 一、IPy模块介绍
- 二、安装
- 三、基本使用
- 1.IP地址、网段的基本处理
- 2.多网络计算方法详解
- 四、实战
- 参考资料
实用的IP地址处理模块IPY详解
一、IPy模块介绍
IP地址规划是网络设计中非常重要的一个环节,规划的好坏直接影响路由协议算法的效率包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数,IP类型等。
所以,此时此刻你可能躲在某个角落瑟瑟发抖,开始慌了。
众所周知,python是一种很强的语言,它提供了一个很强大的第三方模块–IPy模块。
IPy模块可以拯救你,可以很好的辅助我们高效的完成IP的规划工作。
目前最新官方版本为IPy 1.01,接下来让我们一起愉快的学习吧。
二、安装
这里我们使用源码包安装
1.下载源码包
wget https://pypi.python.org/packages/source/I/IPy/IPy-1.01.tar.gz --no-check-
[root@oldboy ~] # ls
IPy-1.01.tar.gz2.解压源码包
tar zxvf IPy-1.01.tar.gz
3.安装IPy库
cd IPy-1.01/
python3 setup.py install #因为我使用的python3.8,所以python加参数3了
三、基本使用
1.IP地址、网段的基本处理
IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址,比如通过version方法就可以区分出IPv4和IPv6
>>> from IPy import IP #导入模块
>>> IP("10.0.0.0/8").version()
4 #4代表IPv4类型
>>> IP("::1").version()
6 #6代表IPv6类型
通过指定的网断输出该网段的IP个数及所有IP地址清单
>>> ip = IP("192.168.0.0/16")
>>> print(ip.len()) #输出192.168.0.0/16网段的IP个数
65536
>>> for i in ip: #输出192.168.0.0/16网段的所有IP清单
... print(i)
...
下面介绍IP类几个常见的方法,包括反向解析名称、IP类型、IP转换等。
>>> ip = IP ("192.168.1.20")
>>> ip.reverseName() #反向解析地址格式
'20.1.168.192.in-addr.arpa.'
>>> ip.iptype() #192.168.1.20为私网类型'PRIVATE'
'PRIVATE'
>>> IP('8.8.8.8').iptype() #8.8.8.8为公网类型
'PUBLIC'
>>> IP("8.8.8.8").int() #转换成整型格式
134744072
>>> IP("8.8.8.8").strHex() #转换成十六进制格式
'0x8080808'
>>> IP("8.8.8.8").strBin() #转换成二进制格式
'00001000000010000000100000001000'
>>> print(IP(0x8080808)) #十六进制转成IP格式
8.8.8.8
IP方法也支持网络地址的转换,例如根据IP与掩码生产网段格式,如下:
#采用三种书写方式
>>> print(IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
> print(IP('192.168.1.0/255.255.255.0',make_net=True))
192.168.1.0/24
> print(IP('192.168.1.0-192.168.1.255',make_net=True))
192.168.1.0/24
也可以通过strNormal
方法指定不同wantprefixlen
参数值以定制不同输出类型的网段。输出类型为字符串,如下:
>>> IP('192.168.1.0/24').strNormal(0)
'192.168.1.0'
>>> IP('192.168.1.0/24').strNormal(1)
'192.168.1.0/24'
>>> IP('192.168.1.0/24').strNormal(2)
'192.168.1.0/255.255.255.0'
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
2.多网络计算方法详解
有时候我们比较兰格网段是否存在包含、重叠关系,比如同网络但不同prefixlen
会认为是不相等的网段,如10.0.0.0/16不等于10.0.0.0.0/24,另外即使具有相同的prefixlen
但出于不同的网络地址,同样也视为不相等,如10.0.0.0/16不等于192.0.0.0/16。IPy支持类似于数据型的比较,以帮助IP对象进行比较,如:
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
True
判断IP地址和网段是否包含于另一个网段中,如下:
>>> '192.168.1.100' in IP("192.168.1.0/24")
True
>>> IP ('192.168.1.0/24') in IP ('192.168.0.0/16')
True
判断两个网段是否存在于重叠,采用IPy提供的overlaps方法,如:
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24')
1 #返回1代表重叠
>>> IP('192.168.1.0/24').overlaps('192.168.2.0')
0 #返回0代表不重叠
示例:根据输入的IP或子网返回网络,掩码、广播、反向解析、子网数、IP类型等信息。
#!/usr/bin/python
# --coding:utf-8
from IPy import IPip_s = input("Please input an IP or net_range:") # 接收用户输入,参数为ip地址或网络地址
ips = IP(ip_s)
if len(ips) > 1:print("---您输入的是一个网络地址---")print(f'net:{ips.net()}') # 输出网络地址print(f'netmask:{ips.netmask()}') # 输出网络掩码地址print(f'broadcast: {ips.broadcast()}') # 输出网络广播地址print(f'reverse address: {ips.reverseNames()[0]}') # 输出网络方向解析print(f'subnet: {len(ips)}') # 输出网络子网数
else: # 为单个ip地址print("---您输入的是单个IP地址---")print(f'reverse address:{ips.reverseNames()[0]}') # 输出ip反向解析print(f'hexadecimal: {ips.strHex()}') # 输出十六进制地址
print(f'binary ip: {ips.strBin()}') # 输出二进制地址
print(f'iptype:{ips.iptype()}') # 输出二进制地址
效果演示:分别输入网段,IP地址的运行结果如下:
四、实战
[root@oldboy ~] # cat ipy2.py
#!/usr/bin/python
#--coding:utf-8
from IPy import IP#定义ip网段
ip = IP("192.168.0.0/16")
#打印输出该网段的ip个数
print('1.该网段ip数:', ip.len())
#循环遍历打印输出ip
#for x in ip:
# print(x)#反向解析地址格式
ip = IP('192.168.1.130')
reverse = ip.reverseName()
print("2.反向解析地址格式:", reverse)
#获取地址类型
typeIP = ip.iptype()
print('3.获取地址类型:', typeIP)
print(IP('8.8.8.8').iptype())
#转换成整型格式
print('4.整型格式转换:',ip.int())
print('5.二进制格式转换:', ip.strBin())
print('6.十六进制格式转换:', ip.strHex())
print('7.十六进制转换成ip:',IP(0xc0a80182))#根据ip和掩码生成网段格式
print('8.根据ip和掩码生成网段格式:',IP('192.168.1.0').make_net('255.255.255.0'))
print(IP('192.168.2.0/255.255.255.0', make_net=True))
print(IP('192.168.3.0-192.168.3.255', make_net=True))#strNormal
print('9.strNormal')
#无返回值
print(IP('192.168.1.0/24').strNormal(0))
#prefix格式
print(IP('192.168.2.0/24').strNormal(1))
#decimalnetmask格式
print(IP('192.168.3.0/24').strNormal(2))
#lastIP格式
print(IP('192.168.4.0/24').strNormal(3))#比较两个网段是否重叠 包含
print('10.比较大小:')
ip1 = IP('192.168.1.0/24')
ip2 = IP('182.168.1.0/24')
#数值类型的比较
print(ip1 > ip2)
#判断包含
print('11.判断包含:')
print(IP('192.168.1.12') in IP('192.168.1.0/24'))
print(IP('192.168.1.0/24') in IP('192.168.0.0/16'))#overlaps 1表示重叠 0不存在重叠
print('12.判断重叠:')
print(IP('192.168.0.0/23').overlaps('192.168.1.0/24'))
print(IP('192.168.1.0/24').overlaps('192.168.2.0/24'))
#区分ipv4与ipv6
print('区分ipv4与ipv6:')
print(IP('10.0.0.0/8').version())
print(IP('::1').version())
[root@oldboy ~] #
运行结果如下:
[root@oldboy ~] # python3 ipy2.py
1.该网段ip数: 65536
2.反向解析地址格式: 130.1.168.192.in-addr.arpa.
3.获取地址类型: PRIVATE
PUBLIC
4.整型格式转换: 3232235906
5.二进制格式转换: 11000000101010000000000110000010
6.十六进制格式转换: 0xc0a80182
7.十六进制转换成ip: 192.168.1.130
8.根据ip和掩码生成网段格式: 192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
9.strNormal
192.168.1.0
192.168.2.0/24
192.168.3.0/255.255.255.0
192.168.4.0-192.168.4.255
10.比较大小:
True
11.判断包含:
True
True
12.判断重叠:
1
0
区分ipv4与ipv6:
4
6
参考资料
官方文档:https://pypi.org/project/IPy/
超级实用的IP地址处理模块IPY详解相关推荐
- IP地址处理模块IPy
IP地址处理模块IPy 计算IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 1.IP地址处理 1.判断地址类型是ipv4还是ipv6 import IPy l1=IPy.IP('192.1 ...
- python笔记系列:IP地址处理模块IPy
IP地址处理模块IPy wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificat ...
- python ipaddress模块_Python学习笔记-IP地址处理模块Ipy
IP地址处理模块Ipy IPy模块可以很好的辅助我们高效完成IP的规划工作. 安装IPy模块[root@kurol ~]# python36 -m easy_install -i http://pyp ...
- 实现一个域名对应多个IP地址和DNS优缺点详解!
实现一个域名对应多个IP地址和DNS优缺点详解! 1.DNS定义: DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访 ...
- 计算机网络c类网络划分子网介绍,IP地址的子网划分详解
原标题:IP地址的子网划分详解 来源:今日头条北京炫亿时代 一.子网划分基础 1.子网划分的若干个好处: ①减少网络流量 ②提高网络性能 ③简化管理 ④可以更为灵活的形成大覆盖范围的网络 2.你最好遵 ...
- 二、Python3自动化运维——IP地址处理模块IPy
ipy模块计算IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 1.IP地址处理 1.1 判断地址类型是ipv4还是ipv6 import IPy l1=IPy.IP('192.168.1. ...
- IP地址分类及范围详解
IP地址分为公网IP地址(合法IP地址)和私有IP地址 公网IP地址主要应用于Internet上的主机访问,而私有IP地址应用于局域网中计算机的相互通信. IP地址的表示形式:分为二进制表示和点分十进 ...
- 各类IP地址的划分范围详解(看完不懂算我输)
A类IP地址的范围 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是"0", 地址范围从1.x.x.x 到126.x.x.x. 全0和全一不能用的原因 ...
- ip地址分类和网段详解
IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...
最新文章
- C#之windows桌面软件第十三课:C#中常用的类有哪些?构造函数怎么用?
- 一个QQ旋风的BUG
- Kuma 1.0 GA发布,70多项新功能和改进
- 程序员考核的五大死因(上)
- 给vmware虚拟机中的ubuntu 14.04扩大磁盘分区
- IOS-网络(数据安全:MD5加密)
- winform 在panel怎么实现锚点定位_5GC支持URLLC解决方案12:以太网PDU会话锚点重定位...
- 11张高清Python全知识地图,强烈建议学习
- 敏捷开发生态系统系列之四:计划跟踪II(自组织团队-开发团队自己估算-PO挑战估算-同行压力)...
- [Java] 蓝桥杯ALGO-145 算法训练 4-1打印下述图形
- Awvs 12.x安装及使用教程
- 重置mysql数据库密码_重置mysql数据库密码的方法
- C语言 从入门到放弃
- 潇洒郎: websockets 服务端设计:多线程执行async方法
- arm 汇编指令 CPS
- CMMI 项目计划实战
- 霜降已至,你妈喊你加裤添衣!感恩老妈,就送她智慧云谷新风机
- python画图如何调整图例位置_python图例参数
- 工业级无线路由器无线客户端的配置教程
- 【普组模拟赛】马球比赛(polo.pas/cpp