概述
【最终呈现结果】
输入IP地址和掩码,就可以计算出网络段地址、主机地址范围以及广播地址。
【详细代码实现以及注释】
import re
#引入正则表达式模块
IPAddr='162.31.233.69'
IPMask='17'
#输入IP地址和子网掩码,可以用input,让用户输入
IP10L = re.findall(r'd*', IPAddr) #用正则表达式挑出IP地址的四个十进制数
for x in IP10L:
IP10L.remove('')
print('第一步:'+str(IP10L))
#把IP地址转换为四位十进制数的数列
IP2L=[]
IP2=''
for x in IP10L:
#MyBin=str(bin(int(x))).strip('0b') #该方法容易误杀后面的0
MyBin = str(bin(int(x)))[2:]
MyZero='0'*(8-len(MyBin)) #前面需要补充0的位数
IP2L.append(str(MyZero)+(bin(int(x)))[2:])
for x in IP2L:
IP2=IP2+str(x)
print('第二步:'+str(IP2L))
print('第三步:'+str(IP2))
#把IP地址统一转换成四位二进制形式的数列,最后用空字符串拼接成一个整体
def Masker(mask,NetorHost):
if NetorHost==0: #计算网络部分系列
MyNetworkt1=str(IP2[0:mask])+str(str(NetorHost)*(32-int(IPMask)))
print('第四步:' + str(MyNetworkt1))
#根据掩码位数把二进制IP整体主机部分全部置0,用来计算第一主机
FirstIPt1=str(IP2[0:mask])+str(str(NetorHost)*(32-int(IPMask)-1))+str(1)
#二进制第一主机IP
print('第五步:' + str(FirstIPt1))
MyNetwork2=[]
FirstIPt2=[]
i=0
while i<=3:
MyNetwork2.append(int(MyNetworkt1[i*8:(i+1)*8],2))
#把二进制形式网络段MyNetwork1分成四段,且转换为十进制形式。
FirstIPt2.append(int(FirstIPt1[i*8:(i+1)*8],2))
#把二进制形式第一主机分成四段,且转换为十进制形式。
i+=1
MyNetworkt3=str(MyNetwork2)[1:-1].replace(',','.')
#网络段改写成点分式,不是逗号分式。
MyNetwork=MyNetworkt3.replace(' ','')
#网络段进一步去掉空格
FirstIPt3=str(FirstIPt2)[1:-1].replace(',','.')
#第一主机改写成点分式,不是逗号分式。
FirstIP=FirstIPt3.replace(' ','')
#第一主机进一步去掉空格
print('第六步:网络地址 ' + str(MyNetwork))
print('第七步:第一主机 ' + str(FirstIP))
else: #计算主机部分系列
MyNetworkt1=str(IP2[0:mask])+str(str(NetorHost)*(32-int(IPMask)))
print('第八步:' + str(MyNetworkt1))
#广播地址的二进制形式
LastIPt1=str(IP2[0:mask])+str(str(NetorHost)*(32-int(IPMask)-1))+str(0)
#最后一个主机地址的二进制形式
print('第九步:' + str(LastIPt1))
MyNetwork2=[]
LastIPt2=[]
i=0
while i<=3:
MyNetwork2.append(int(MyNetworkt1[i*8:(i+1)*8],2))
#广播地址转换十进制
LastIPt2.append(int(LastIPt1[i*8:(i+1)*8],2))
#最后一个主机地址转换为十进制
i+=1
MyNetworkt3=str(MyNetwork2)[1:-1].replace(',','.')
#点分式
MyNetwork=MyNetworkt3.replace(' ','')
#去掉空格
LastIPt3=str(LastIPt2)[1:-1].replace(',','.')
LastIP=LastIPt3.replace(' ','')
print('第十步:最后主机 ' + str(LastIP))
print('十一步:广播地址 ' + str(MyNetwork))
Masker(int(IPMask),0) #网络地址,就是说主机部分等于0
Masker(int(IPMask),1) #主机地址,就是说主机部分不为0
最后
以上就是超帅长颈鹿为你收集整理的元进Python(3)---如何实现IP子网掩码计算器功能?的全部内容,希望文章能够帮你解决元进Python(3)---如何实现IP子网掩码计算器功能?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复