自学内容网 自学内容网

【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

原文地址:https://blog.csdn.net/weixin_74814027/article/details/145094281

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!