python_IP+子网掩码输出可用地址范围与网络号 IP地址和网络号互译
# @author liyixiang545@gmail.com import re #引入正则表达式模块 import os import sys line_IP_cache = [] line_IP = [] def Masker(mask,NetorHost): global LastIP,FirstIP,line_IP 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)) lineIP = str(FirstIP+"-"+LastIP+"\n") line_IP_cache.append(lineIP) print("可用地址范围:",lineIP) print("") line_IP = line_IP_cache #读取txt中每行数据,如192.168.1.0/24 lines = open('ip_mask.txt','r').readlines() #打开文件,读入每一行 #print(lines) j = 1 for s in lines : print("正在处理第",j,"个") print("IP :",s[:-4])# 输出处理的行数据,获取到IP网络号地址 print("MASK:",s[-3:])# 输出处理的行数据,获取到子网掩码 IPAddr=s[:-4] IPMask=s[-3:] #此处为赋值到IP变量 #处理数据 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地址统一转换成四位二进制形式的数列,最后用空字符串拼接成一个整体 Masker(int(IPMask),0) #网络地址,就是说主机部分等于0 Masker(int(IPMask),1) #主机地址,就是说主机部分不为0 j+=1 with open("ip_mask_2.txt", mode='w', encoding='utf-8') as fp: for f in line_IP: fp.write(f) # write是写入 #fp.close() # 关闭文件 print("写入完成")
1、如已获取IP+掩码形式的IP地址,需要输出可使用地址范围
未规范:

2、在txt文本读取每行数据进行输出
规范后:

3、python终端输出

本文来自博客园,作者:liyixiang545,转载请注明原文链接:https://www.cnblogs.com/liyixiang545/articles/17599708.html

浙公网安备 33010602011771号