文章目录

  • 实用的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详解相关推荐

  1. IP地址处理模块IPy

    IP地址处理模块IPy 计算IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 1.IP地址处理 1.判断地址类型是ipv4还是ipv6 import IPy l1=IPy.IP('192.1 ...

  2. python笔记系列:IP地址处理模块IPy

    IP地址处理模块IPy wget https://pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz --no-check-certificat ...

  3. python ipaddress模块_Python学习笔记-IP地址处理模块Ipy

    IP地址处理模块Ipy IPy模块可以很好的辅助我们高效完成IP的规划工作. 安装IPy模块[root@kurol ~]# python36 -m easy_install -i http://pyp ...

  4. 实现一个域名对应多个IP地址和DNS优缺点详解!

    实现一个域名对应多个IP地址和DNS优缺点详解! 1.DNS定义: DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访 ...

  5. 计算机网络c类网络划分子网介绍,IP地址的子网划分详解

    原标题:IP地址的子网划分详解 来源:今日头条北京炫亿时代 一.子网划分基础 1.子网划分的若干个好处: ①减少网络流量 ②提高网络性能 ③简化管理 ④可以更为灵活的形成大覆盖范围的网络 2.你最好遵 ...

  6. 二、Python3自动化运维——IP地址处理模块IPy

    ipy模块计算IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 1.IP地址处理 1.1 判断地址类型是ipv4还是ipv6 import IPy l1=IPy.IP('192.168.1. ...

  7. IP地址分类及范围详解

    IP地址分为公网IP地址(合法IP地址)和私有IP地址 公网IP地址主要应用于Internet上的主机访问,而私有IP地址应用于局域网中计算机的相互通信. IP地址的表示形式:分为二进制表示和点分十进 ...

  8. 各类IP地址的划分范围详解(看完不懂算我输)

    A类IP地址的范围 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是"0", 地址范围从1.x.x.x 到126.x.x.x. 全0和全一不能用的原因 ...

  9. ip地址分类和网段详解

    IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...

最新文章

  1. C#之windows桌面软件第十三课:C#中常用的类有哪些?构造函数怎么用?
  2. 一个QQ旋风的BUG
  3. Kuma 1.0 GA发布,70多项新功能和改进
  4. 程序员考核的五大死因(上)
  5. 给vmware虚拟机中的ubuntu 14.04扩大磁盘分区
  6. IOS-网络(数据安全:MD5加密)
  7. winform 在panel怎么实现锚点定位_5GC支持URLLC解决方案12:以太网PDU会话锚点重定位...
  8. 11张高清Python全知识地图,强烈建议学习
  9. 敏捷开发生态系统系列之四:计划跟踪II(自组织团队-开发团队自己估算-PO挑战估算-同行压力)...
  10. [Java] 蓝桥杯ALGO-145 算法训练 4-1打印下述图形
  11. Awvs 12.x安装及使用教程
  12. 重置mysql数据库密码_重置mysql数据库密码的方法
  13. C语言 从入门到放弃
  14. 潇洒郎: websockets 服务端设计:多线程执行async方法
  15. arm 汇编指令 CPS
  16. CMMI 项目计划实战
  17. 霜降已至,你妈喊你加裤添衣!感恩老妈,就送她智慧云谷新风机
  18. python画图如何调整图例位置_python图例参数
  19. 工业级无线路由器无线客户端的配置教程
  20. 【普组模拟赛】马球比赛(polo.pas/cpp

热门文章

  1. iview ui 日期选择器禁用今天之前和数据返回的日期
  2. android 代码功能测试,Android app 功能代码覆盖率--Jacoco
  3. ARM编程中B指令与BL指令的区别
  4. 小白程序员学习前端的第四天
  5. 力扣638. 大礼包(回溯法+剪枝优化)
  6. 爪哇oj--数组查找及替换
  7. 使用Postman循环调用接口
  8. hibernate 时间模糊查询时间
  9. 打开十一的正确方式,教你用OpenCV-Python轻松生成微信十一版头像
  10. OHEM的pytorch代码实现细节