【IPy模块01】Python运维模块之IP 地址、网段的基本处理

ops/2025/1/15 19:40:18/

实用的IP地址处理模块IPy

IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、P类型等。Python 提供了一个强大的第三方模块IPy(https://github.com/haypo/python-ipy/)

IPy模块可以很好地辅助我们高效完成IP的规划工作,下面进行详细介绍。

安装方式:pip install IPy

检测方法:

[root@python project]#ipython
In [1]: import IPy
In [2]: dir(IPy)
Out[2]: 
['INT_TYPES','IP','IPSet','IPV6_MAP_MASK','IPV6_TEST_MAP','IPint',
。。。。。。。(省略)

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

1.通过 version方法就可以区分出IPv4与IPv6

IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址。比如通过 version方法就可以区分出IPv4与IPv6,如:

#IP().version()
from IPy import IP
ip_content = '172.16.17.32'
ip_result = IP(ip_content).version()
print("IP:{:<13}ip类型为:{}".format(ip_content,ip_result))ip_content = 'fe80::20c:29ff:fe60'
ip_result = IP(ip_content).version()
print("IP:{:<20}ip类型为:{}".format(ip_content,ip_result))#输出:
IP:172.16.17.32 ip类型为:4
IP:fe80::20c:29ff:fe60 ip类型为:6
2.通过指定的网段输出该网段的IP个数及所有IP地址清单,代码如下:
#IP().len()
from IPy import IP
ip_range = IP('192.168.127.0/30')
ip_result = ip_range.len()
print("IP网段:{:<17}有{}个ip".format(str(ip_range),ip_result))
for i in ip_range:print(str(i))#输出:
IP网段:192.168.127.0/30 有4个ip
192.168.127.0
192.168.127.1
192.168.127.2
192.168.127.3
3.反向解析名称、IP类型、IP转换等

下面介绍IP 类几个常见的方法,包括反向解析名称、IP类型、IP转换等。

基本语法
反向解析名称reverseNames()
ip类型iptype()
ip转换转换成整型!int()转换成十六进制 strHex()转换成二进制 strBin()十六进制转换成ip地址 IP()
简单实践
from IPy import IP
#1 反向解析名称
#1-1 定制ip地址
my_ip = IP('153.3.238.110')
#1-2 获取定制域名
name = my_ip.reverseNames()
print("{}的域名名称是{}.".format(my_ip,name))输出:153.3.238.110的域名名称是['110.238.3.153.in-addr.arpa.']#2 ip类型
#2-1 定制ip地址
my_ip1 = IP('153.3.238.110')
my_ip2 = IP('192.168.1.1')
#2-2 获取定制域名
name1 = my_ip1.iptype()
name2 = my_ip2.iptype()
print("{}的类型是 {}.".format(my_ip1,name1))
print("{}的类型是 {}.".format(my_ip2,name2))输出:
153.3.238.110的类型是 PUBLIC			#PUBLIC(公网),PRIVATE(私网)
192.168.1.1的类型是 PRIVATE#3 ip类型
#3-1 定制ip地址
my_ip1 = IP('153.3.238.110')
#3-2 转换类型
int_reslut = my_ip.int()
print("{} 的转换成整型 {}.".format(my_ip,int_reslut))
Hex_reslut = my_ip.strHex()
print("{} 的转换成16进制 {}.".format(my_ip,Hex_reslut))
Bin_reslut = my_ip.strBin()
print("{} 的转换成2进制 {}.".format(my_ip,Bin_reslut))int_reslut = IP(Hex_reslut)
print("{} 的16进制转换成ip {}.".format(Hex_reslut,int_reslut))输出:
153.3.238.110 的转换成整型 2567171694
153.3.238.110 的转换成16进制 0x9903ee6e
153.3.238.110 的转换成2进制 10011001000000111110111001101110
0x9903ee6e 的16进制转换成ip 153.3.238.110
4.根据IP与掩码生成网段格式

IP方法也支持网络地址的转换,例如根据IP与掩码生产网段格式,如下:

基本语法
1 网段地址转换IP('ip地址').make_net('掩码地址')IP('ip地址段'),make_net=True)
简单实践
from IPy import IP
#1 网段地址转换
#1-1 转换样式1
ip_net = '192.168.1.0'
ip_result = IP(ip_net).make_net('255.255.255.0')
print("{} 转换后的样式 {}".format(ip_net,ip_result))
#1-1 转换样式2
ip_net = '192.168.1.0/255.255.0.0'
ip_result = IP(ip_net,make_net=True)
print("{} 转换后的样式 {}".format(ip_net,ip_result))
#1-1 转换样式3
ip_net = '192.168.1.0-192.168.1.255'
ip_result = IP(ip_net,make_net=True)
print("{} 转换后的样式 {}".format(ip_net,ip_result))输出:
192.168.1.0 转换后的样式 192.168.1.0/24
192.168.1.0/255.255.0.0 转换后的样式 192.168.0.0/16
192.168.1.0-192.168.1.255 转换后的样式 192.168.1.0/24
5.strNormal方法

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

wantprefixlen的取值及含义:
wantprefxlen=0,无返回,如192.168.1.0;
wantprefxlen=1,prefx格式,如 192.168.1.0/24;
wantprefxlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0;
wantprefxlen=3,lastIP格式,如192.168.1.0-192.168.1.255。
简单实践
from IPy import IP
#1 网段地址转换
#1-1 定制ip地址
my_ip = IP('192.168.8.0/24')#1-2 格式转换
format_0 = my_ip.strNormal(0)
print("{} 转换样式0 {}".format(my_ip,format_0))
format_1 = my_ip.strNormal(1)
print("{} 转换样式1 {}".format(my_ip,format_1))
format_2 = my_ip.strNormal(2)
print("{} 转换样式2 {}".format(my_ip,format_2))
format_3 = my_ip.strNormal(3)
print("{} 转换样式3 {}".format(my_ip,format_3))输出:
192.168.8.0/24 转换样式0 192.168.8.0
192.168.8.0/24 转换样式1 192.168.8.0/24
192.168.8.0/24 转换样式2 192.168.8.0/255.255.255.0
192.168.8.0/24 转换样式3 192.168.8.0-192.168.8.255

http://www.ppmy.cn/ops/150370.html

相关文章

R语言统计分析——围绕中心点的聚类(PAM)

参考资料&#xff1a;R语言实战【第2版】 因为K均值聚类方法是基于均值&#xff0c;所以它对异常值很敏感。一个更稳健的方法是围绕中心点的划分&#xff08;PAM&#xff09;。与其用质心&#xff08;变量均值向量&#xff09;表示类&#xff0c;不如用一个最有代表性的观测值来…

apollo内置eureka dashboard授权登录

要确保访问Eureka Server时要求输入账户和密码&#xff0c;需要确保以下几点&#xff1a; 确保 eurekaSecurityEnabled 配置为 true&#xff1a;这个配置项控制是否启用Eureka的安全认证。如果它被设置为 false&#xff0c;即使配置了用户名和密码&#xff0c;也不会启用安全认…

青少年编程与数学 02-006 前端开发框架VUE 21课题、路由控制

青少年编程与数学 02-006 前端开发框架VUE 21课题、路由控制 一、路由二、路由控制三、应用示例1. 安装Vue Router2. 设置路由3. 在主项目中引入路由4. 创建视图和组件5. 运行项目 课题摘要:本文介绍了Vue项目中的路由控制&#xff0c;包括安装Vue Router、定义路由组件、配置路…

数据取证与恢复:ElcomSoft System Recovery,什么是冷系统分析?

ElcomSoft 系列取证软件 ElcomSoft 系列取证软件支持从计算机和移动设备进行数据提取、解锁文档、解密压缩文件、破解加密容器、查看和分析证据。 计算机和手机取证的完整集合硬件加速解密最多支持10,000计算机协同工作包含全部移动设备数据提取解密分析的相关工具移动设备逻…

Spring Boot 应用开发入门

一、Spring Boot简介 Spring Boot 是一个基于 Spring 框架的开源 Java 基础框架&#xff0c;它简化了基于 Spring 的应用开发。Spring Boot 提供了一种快速、便捷的方式来创建独立、生产级的基于 Spring 框架的应用程序。它通过提供一系列的“启动器”依赖&#xff0c;帮助开发…

软件项目开发关键节点——开源合规扫描

软件项目开发关键节点——开源合规扫描 一、开源合规扫描说明二、扫描的时间节点三、开源合规扫描的目的3.1 确保合规性&#xff1a;3.2 自动化合规检查&#xff1a;3.3 提高透明度&#xff1a;3.4 确保代码质量&#xff1a; 四、开源合规扫描的内容4.1 识别项目中的开源组件&a…

WPF中组件之间传递参数的方法研究

在 WPF (Windows Presentation Foundation) 中&#xff0c;组件&#xff08;或称为控件&#xff09;之间传递参数的方法有很多种。不同的传递方式适用于不同的应用场景&#xff0c;具体选择取决于应用需求、性能、可维护性等因素。以下是几种常见的传递参数的方法&#xff0c;并…

初学stm32 --- ADC采集内部温度传感器

STM32内部温度传感器简介 温度计算方法&#xff08;F1&#xff09; 温度计算式子&#xff1a;