当前位置: 首页 > article >正文

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

实用的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.kler.cn/a/502632.html

相关文章:

  • android framework.jar 在应用中使用
  • 【大数据】机器学习 -----关于data.csv数据集分析案例
  • LeetCode 2270.分割数组的方案数:前缀和
  • MySQL主从复制
  • 浅谈计算机网络01 | 计算机网络数据平面
  • 深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比
  • Qt中.pro文件中可以填加的宏和其他的信息
  • 【Linux笔记】Day2
  • Mysql--基础篇--多表查询(JOIN,笛卡尔积)
  • RPC调用初识
  • 探索AGI:智能助手与自我赋能的新时代
  • TypeScript语言的学习路线
  • 机器学习周报-GNN模型学习
  • 如何解决服务器中 MySQL 的死锁问题
  • OpenAI RFT API:让强化学习微调更简单,为语言模型带来突破性进展
  • 计算机网络之---TCP连接管理
  • 腾讯二面:MySQL的半同步是什么?不是MySQL的两阶段提交,那是什么?
  • 【MySQL数据库】JDBC总结
  • Promise-课堂笔记
  • Outlook注册时机器人验证无法通过的原因及解决方法
  • redis:安装部署、升级以及失败回退
  • 华为OD E卷(100分)54-查找接口成功率最优时间段
  • 如何查看当前所处的git分支以及当前git分支与远程仓库中的哪个分支关联
  • gesp(C++五级)(2)洛谷:B3951:[GESP样题 五级] 小杨的队列
  • Lianwei 安全周报|2025.1.13
  • 网络协议ip表示,网络协议中ip表示