上次我们说到,一般ISIS 的网络号通常看起来是这样: “49.0001.0912.0908.6001.00”, 其中“0912.0908.6001” 这一段,通常是把loopback地址先补足3位,再分成3段算出来,比如192.168.10.1, 先变成192.168.010.001,去掉“.”,再按4位分割则是: 1921.6801.0001,网络号就是“49.0001.1921.6801.0001.00”
那么,现在有3种方法可以通过IP地址生成相应的ISIS网络号。
1、已知IP地址段的情况下:
def net_from_ip(ip):
return '49.0001.0912.0908.6{:03d}.00'.format(int(ip.split('.')[3]))
比如我要转换的地址段,是91.209.86.0/24, 按照计算规则,网络号的前几位都是相同的: “49.0001.0912.0908.6XXX.00,变量只有”XXX“,就是IP地址的最后部分补0之后生成的3位数,直接把IP地址的最后一个"."格式化即可。
2、For循环
def ip_net(argv): #转换IP地址到ISIS网络号
ip = argv[1]
ip_list = ip.split('.')
for n in range(0,4):
if len(ip_list[n]) == 3:
pass
if len(ip_list[n]) == 2:
ip_list[n] = "0" + ip_list[n]
print(ip_list[n])
if len(ip_list[n]) == 1:
ip_list[n] = "00" + ip_list[n]
print(ip_list[n])
net2 = ''.join(ip_list)
net3 = "49.0001." + net2[0:4] + "." + net2[4:8] + "." + net2[8:12] + ".00"
return(net3)
这个是笨办法,原理是计算分割IP地址字符串,补0后再改写成ISIS网络号的格式。
3、for 循环,但是根据key值计算value
def ip_net():
ip1 = input("Please input ip address: ")
ip_list = ip1.split('.')
for k in range(0,len(ip_list)):
# k = the key
v = ip_list[k] # The value
ip_list[k] = ("0"*(3-len(v)))+v
net2 = ''.join(ip_list)
net3 = "49.0001." + net2[0:4] + "." + net2[4:8] + "." + net2[8:12] + ".00"
return(net3)
第一种最简单,第三种更合理,个人觉得。
网友评论