当前位置: 首页 > 后端技术 > Python

用Python帮你实现IP子网计算

时间:2023-03-26 01:06:20 Python

[TOC]0。前言目前有两个版本的IP地址:IPv4和IPv6。通常我们看到最多的是IPv4,比如192.168.1.1/24。当然,IPv4地址池资源紧缺,IPv6已经悄然大量部署。我们在设计网络架构时,必须规划设备互连地址、环回地址和服务地址。如何规划?如果您获得A类地址,您会怎么做?最重要的是计算吗?不怕计算不准?你要是会心算,就不怕你没本事,哈哈!接下来,请使用python来帮助您完成这一切!1.ipaddress模块??介绍1.1IP主机地址说明:如何判断是ipv4地址还是不带掩码的ipv6地址?使用ipaddress.ip_address()函数可知:>>>ipaddress.ip_address('192.168.1.1')IPv4Address('192.168.1.1')>>>ipaddress.ip_address('192.168.1.1').version4>>>ipaddress.ip_address('fe80::1')IPv6Address('fe80::1')>>>ipaddress.ip_address('fe80::1').version6如果被屏蔽会报错:>>>ipaddress。ip_address('192.168.1.1/32')Traceback(最近调用最后):文件“”,第1行,在文件“/usr/lib/python3.5/ipaddress.py”,第54行,inip_addressaddress)ValueError:'192.168.1.1/32'doesnotappearedtobeanIPv4orIPv6address1.2网络描述的定义:表示一个网段的IP地址,通常由网络号+网络前缀组成,如如192.168.1.0/24,可以用ipaddress.ip_network函数表示,默认情况下python只能识别网络号,如果是IP主机会报错,当然可以通过strict=来避免错误的。>>>ipaddress.ip_network('192.168.1.0/24')IPv4Network('192.168.1.0/24')#默认,输入host位会报错>>>ipaddress.ip_network('192.168.1.1/24')追溯(最近调用最后):文件“”,第1行,在文件“/usr/lib/python3.5/ipaddress.py”,第74行,在ip_network中返回IPv4Network(地址,严格)文件“/usr/lib/python3.5/ipaddress.py”,第1536行,在__init__中raiseValueError('%shashostbitsset'%self)ValueError:192.168.1.1/24hashostbitsset#PromptishostIP#修改非严格模式,默认strict=True>>>ipaddress.ip_network('192.168.1.1/24',strict=False)IPv4Network('192.168.1.0/24')#returnnetworknumber1.3hostinterface说明:表示接口地址(ip/mask)。IP地址通常配置在路由器、交换机和防火墙接口上。格式如192.168.1.1/24。表示的好,那么可以用ipaddress.ip_interface()函数类来表示。>>>ipaddress.ip_interface('192.168.1.1/24')IPv4Interface('192.168.1.1/24')1.4检查地址/网络/接口对象1.4.1检查IP版本(v4或v6):>>>ipaddress。ip_address('192.168.1.1').version4>>>ipaddress.ip_address('fe80::1').version61.4.2从接口获取网段IP>>>ipaddress.ip_interface('192.168.1.1/24').networkIPv4Network('192.168.1.0/24')>>>ipaddress.ip_interface('fe80::/64').networkIPv6Network('fe80::/64')1.4.3计算网段IP地址个数>>>ipaddress.ip_network('192.168.1.0/24').num_addresses256>>>ipaddress.ip_network('fe80::/64').num_addresses184467440737095516161.4.4计算网段可用IP地址数>>>net=ipaddress.ip_network('192.168.1.0/24')>>>forxinnet.hosts():...print(x)...192.168.1.1192.168.1.2...192.168.1.100192.168.1.101...192.168.1.254>>>[xforxinnet.hosts()][0]#获取第一个可用的IPIPv4地址('192.168.1.1')>>>[xforxinnet.hosts()][-1]#获取最后可用的IPIPv4地址('192.168.1.254')1.4.5获取掩码和反掩码>>>ipaddress.ip_network('192.168.1.1/24',strict=False).netmaskIPv4Address('255.255.255.0')#获取掩码>>>ipaddress.ip_network('192.168.1.1/24',strict=False).hostmaskIPv4Address('0.0.0.255')#获取反掩码1.6获取网络号和广播地址>>>ipaddress.ip_network('192.168.1.1/24',strict=False).network_addressIPv4Address('192.168.1.0')#获取网络号>>>ipaddress.ip_network('192.168.1.1/24',strict=False).broadcast_addressIPv4Address('192.168.1.255')#获取广播地址1.7异常处理如果IP地址格式不符合要求等,如何处理?#错误显示,报告“ValueError”>>>ipaddress.ip_network('192.168.1.1/24')Traceback(mostrecentcalllast):File"",line1,inFile"/usr/lib/python3.5/ipaddress.py”,第74行,在ip_network中返回IPv4Network(地址,严格)文件“/usr/lib/python3.5/ipaddress.py”,第1536行,在__init__中raiseValueError('%s已设置主机位'%self)ValueError:192.168.1.1/24已设置主机位#使用try-except语句处理异常>>>importipaddress>>>defcal_ip(net):...try:...net=ipaddress.ip_network(net)...print(net)...exceptValueError:...print('您的输入格式有误,请检查!')...>>>cal_ip(net='192.168.1.1/24')您的输入格式有误,请检查!2.计算IP子网代码demo2.1完整代码#!/usr/bin/envpython3#-*-coding:UTF-8-*-#欢迎关注微信公众号:滴滴技术importipaddressdefcal_ip(ip_net):try:net=ipaddress.ip_network(ip_net,strict=False)print('IP版本号:'+str(net.version))print('是否是私有地址:'+str(net.is_private))print('IP地址总数:'+str(net.num_addresses))print('可用IP地址总数:'+str(len([xforxinnet.hosts()])))print('网络number:'+str(net.network_address))print('起始可用IP地址:'+str([xforxinnet.hosts()][0]))print('最后一个可用IP地址:'+str([xforxinnet.hosts()][-1]))print('可用IP地址范围:'+str([xforxinnet.hosts()][0])+'~'+str([xforxinnet.hosts()][-1]))print('掩码地址:'+str(net.netmask))print('反掩码地址:'+str(net.hostmask))print('广播地址:'+str(net.broadcast_address))exceptValueError:print('你的输入格式不正确,请检查!')if__name__=='__main__':ip_net='192.168.1.1/24'cal_ip(ip_net)2.2运行结果IP版本号:4是否私有地址:TrueIP地址总数:256可用IP地址总数:254网络号:192.168.1.0起始可用IP地址:192.168.1.1最后可用IP地址:192.168.1.254可用IP地址范围:192.168.1.1~192.168.1.254掩码地址:255.255.255.0掩码地址:0.0.0.255广播地址:192.168.1.2553。破碎的语言呢?学完是不是很心动?您不需要使用其他工具来计算它。使用python来帮助您完成它。3.1官方参考文档https://docs.python.org/3.8/h...如果喜欢我的文章,请关注我的公众号:滴滴技术,扫码关注,不定期分享喜欢的话我的文章,请关注我的公众号:点滴科技,扫描二维码关注,不定时分享