一、模块简介:

IPy这个强大的Python第三方包,主要提供了包括网段、网络掩码、广播地址、子网数、IP类型的处理等等功能。


安装:

pip3 install IPy

运维Python自动化之路:基础信息模块之IPy模块_导包

检测方法:

运维Python自动化之路:基础信息模块之IPy模块_十六进制_02


二、基本信息:


目标:

 通过IPy的学习,获取ip和网段的基本信息。

方法:





识别ip分类        version() 获取ip数量    len()

扩展:








  ip分类:   ipv4:        样式:192.168.1.1        四部分数字组成,0-9,值的范围是0~255   ipv6        样式:00:00:00:00:00:00        六部分组成,0-9,a-f

简单实践:

1.识别IP分类

1.1 IPv4的演示




ip_content = '192.168.242.130/32'ip_result = IP(ip_content).version()print("{} 的ip类型是:IPv{}".format(ip_content,ip_result))

运维Python自动化之路:基础信息模块之IPy模块_十六进制_03

1.2 IPv6的演示




ip_content = 'fe80::124:5bff:fc2b:619f'ip_result = IP(ip_content).version()print("{} 的ip类型是:IPv{}".format(ip_content,ip_result))

运维Python自动化之路:基础信息模块之IPy模块_导包_04

2.获取ip数量










#2.1定义网段ip_range  = IP('192.168.1.0/30')
#2.2获取ip数量 print("{} 网段有{} 个ip".format(ip_range,ip_range.len()))
#2.3 查询所有的ipfor i in ip_range:print(i)

运维Python自动化之路:基础信息模块之IPy模块_ip地址_05


三、基本操作:

目标:

 通过IPy的学习,了解ip操作的常见方式。

基本语法:










反向解析:  reversnNames()ip类型:  iptype()ip转换  转换成整型 int()  转换成十六进制 strHex()  转换成二进制 strBin()  十六进制转换成ip地址 IP()

扩展:






举例:www.baidu.com ---- 36.152.44.95正向解析:  通过域名找到对应的ip地址反向解析:  根据ip地址,找到对应的网站域名

简单实践:

1.反向域名解析











#获取Ip相关信息#导包import IPyfrom IPy import IP#1.反向解析名称#1.1定制ip地址my_ip = IP('36.152.44.95')  #1.2获取定制域名name = my_ip.reverseNames()print("{} 的域名名称是:{}".format(my_ip,name))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_06

2.获取ip类型










#2.ip类型#2.1地址ip地址my_ip1 = IP('36.152.44.95')  #PUBLIC类型公网my_ip2 = IP('192.168.1.1')   #PRIVATE类型私网#2.2获取ip类型name1 = my_ip1.iptype()name2 = my_ip2.iptype()print("{} 的类型是{}".format(my_ip1,name1))print("{} 的类型是{}".format(my_ip2,name2))

运维Python自动化之路:基础信息模块之IPy模块_获取ip_07

3.ip转换











#3.ip转换#3.1定制ip地址my_ip = IP('36.152.44.95')#3.2 转换类型int_result = my_ip.int()print("{} 的转换成整型{}".format(my_ip,int_result))hex_result = my_ip.strHex()print("{} 的转换成十六进制{}".format(my_ip,hex_result))bin_result = my_ip.strBin()print("{} 的转换成二进制{}".format(my_ip,bin_result))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_08











#3.3 ip地址反转换hex_address = '0x24982c5f'ip_result = IP(hex_address)print("{}的转换成ip类型{}".format(hex_address,ip_result))
bin_address = '00100100100110000010110001011111'#注意:IP接收的内容不能是非十六进制IP地址ip_result1 = IP(bin_address)print("{}的转换成ip类型{}".format(hex_address,ip_result1))

运维Python自动化之路:基础信息模块之IPy模块_.net_09


四、网段转换


扩展:






ip的表现样式:  样式1   ip/掩码数字      192.168.1.1/24  样式2  ip   掩码地址    192.168.1.1 255.255.255.0

格式:




格式:  IP(‘ip地址’).make_net(‘掩码地址’)  IP('ip地址段'),make_net=True)

简单实践:




















#网段的常见操作#导包from IPy import IP#1.网段地址转换#1.1转换样式1ip_net = '192.168.1.0'ip_result = IP(ip_net).make_net('255.255.255.0')print("{} 转换后的样式 {}".format(ip_net,ip_result))
#1.2转换样式2ip_net2 = '192.168.1.0/255.255.255.0'ip_result2 = IP(ip_net2,make_net=True)print("{} 转换后的样式 {}".format(ip_net2,ip_result2))

#1.3转换样式3ip_net3 = '192.168.1.0-192.168.1.255'ip_result3 = IP(ip_net3,make_net=True)print("{} 转换后的样式 {}".format(ip_net3,ip_result3))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_10


五、strNomal方法方法简介:







通过指定 wantprefixlen数值,来获取不同的网段值解析:  0 返回默认的IP地址  1 返回ip地址/掩码值 样式  2 返回ip地址/掩码  样式  3 返回ip地址-IP地址  样式


简单实践:


















#网段常见操作#导包from IPy import IP
#1.网段地址转换#1.1定制ipmy_ip = IP('192.168.1.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))

运维Python自动化之路:基础信息模块之IPy模块_导包_11


六、多网络实践

基础知识:





简介:  相同ip段,不同的掩码获取的ip地址不一样  不同ip段,相同的掩码获取的ip地址不一样  而不同的网段,彼此之间有可能存在ip地址重合交叉


简单实践:1.掩码的作用
















#多网段的常见操作#导包from IPy  import IP#1.掩码的作用#1.1相同ip段不同的掩码获取的ip地址不一样ip_range  = IP('192.168.1.0/30')ip_range2 = IP('192.168.1.0/28')#1.2获取ip数量及查询所有的ipprint("{} 网段有{} 个ip".format(ip_range,ip_range.len()))for i in ip_range:  print(i)print('===================================================')print("{} 网段有{} 个ip".format(ip_range2,ip_range2.len()))for j in ip_range2:        print(j)

运维Python自动化之路:基础信息模块之IPy模块_十六进制_12


基本实践:









网段比较  ip对象 <  ip对象  结果为True或者为False地址包含  ip地址 ip  ip对象  结果为True或者为False网段重叠  ip对象.over laps(ip网段)

1.网段比较

















#多网段的基本i操作
#导包from IPy import IP#1.网段比较ip_net1 = '192.168.1.0/24'ip_net2 = '192.168.1.0/24'ip_net3 = '192.168.2.0/24'result = IP(ip_net1) == IP(ip_net2)print("{}和{}网段信息是否一致:{}".format(ip_net1,ip_net2,result))
result = IP(ip_net1) == IP(ip_net3)print("{}和{}网段信息是否一致:{}".format(ip_net1,ip_net3,result))result = IP(ip_net1) < IP(ip_net3)print("{}和{}网段信息是否一致:{}".format(ip_net1,ip_net3,result))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_13

2.地址包含














#2.地址包含#2.1 判断ip地址是否在某个ip段内ip_add  = '192.168.1.100'ip_add2 = '192.168.2.100'ip_net  = '192.168.1.0/24'result = ip_add in IP(ip_net)print("{}是否在网段{}内:{}".format(ip_add,ip_net,result))print("{}是否在网段{}内:{}".format(ip_add2,ip_net,result))#2.2 判断ip段是否在另外一个ip段内ip_net2  = '192.168.0.0/16'result2 = ip_net in IP(ip_net2)print("{}是否在网段{}内:{}".format(ip_net2,ip_net,result2))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_14

3.网段重叠


















#3.网段重叠#3.1返回值-1代表前面的网段是后面网段的子集ip_net1 = '192.168.1.0/24'ip_net2  = '192.168.0.0/16'ip_net3 = '192.168.3.0/24'result1 = IP(ip_net1).overlaps(ip_net2)print("{}和{}是否存在网络重叠:{}".format(ip_net1,ip_net2,result1))

#3.2返回值1代表后面的网段是前面网段的子集result2 = IP(ip_net2).overlaps(ip_net1)print("{}和{}是否存在网络重叠:{}".format(ip_net1,ip_net2,result2))
#3.3返回值0代表两个网段没有重合result3 = IP(ip_net1).overlaps(ip_net3)print("{}和{}是否存在网络重叠:{}".format(ip_net1,ip_net3,result3))

运维Python自动化之路:基础信息模块之IPy模块_导包_15



综合实践:

目的:






通过一个简单的场景,来对我们的ipy模块进行综合实践对用户输入的信息进行判断如果是多个ip地址就逐一的查看具体信息如果是单个ip地址,就显示ip反向解析域名输出ip地址的其他几种格式

简单实践:
























#网络的综合实践#导包from IPy import IP
#1.接收用户的输入信息ip_s = input("Please input an IP or net-range:")#2.对用户输入的信息进行判断ips = IP(ip_s)if len(ips) > 1: #3.如果是多个ip地址就逐一的查看具体信息 print("net:{}".format(ips.net())) print("netmask:{}".format(ips.netmask())) print("broadcast:{}".format(ips.broadcast())) print("reverse address:{}".format(ips.reverseNames()[0])) print("subnet:{}".format(ips.len()))else: #4.如果是单个ip地址,就显示反向解析域名 print("reverse address:{}".format(ips.reverseNames()[0]))
#5.输出IP地址的其他几种格式print("ip地址的十六进制格式:{}".format(ips.strHex()))print("ip地址的二进制格式:{}".format(ips.strBin()))print("ip地址的类型:{}".format(ips.iptype()))

运维Python自动化之路:基础信息模块之IPy模块_ip地址_16

综合实践改造:代码问题

运维Python自动化之路:基础信息模块之IPy模块_十六进制_17

改造思路





在用户输入的时候,对用户输入的信息进行判断,确定用户输入的内容是否是ip地址--分析  我们知道ipy模块,有一个方法用于判断ip地址是否正确,version  正常的时候,version有两种值4或者6,否则报错。



























#网络的综合实践改造#导包from IPy import IP
#1.接收用户的输入信息ip_s = input("Please input an IP or net-range:")#2.对用户输入的信息进行判断try: ips = IP(ip_s)except Exception as e: print("您输入的ip地址不是正确的格式")else: if len(ips) > 1: #3.如果是多个ip地址就逐一的查看具体信息 print("net:{}".format(ips.net())) print("netmask:{}".format(ips.netmask())) print("broadcast:{}".format(ips.broadcast())) print("reverse address:{}".format(ips.reverseNames()[0])) print("subnet:{}".format(ips.len())) else: #4.如果是单个ip地址,就显示反向解析域名 print("reverse address:{}".format(ips.reverseNames()[0]))
#5.输出IP地址的其他几种格式 print("ip地址的十六进制格式:{}".format(ips.strHex())) print("ip地址的二进制格式:{}".format(ips.strBin())) print("ip地址的类型:{}".format(ips.iptype()))

运维Python自动化之路:基础信息模块之IPy模块_十六进制_18


运维Python自动化之路:基础信息模块之IPy模块_获取ip_19