IS-IS网络

2019-05-21 三种方法使用Python脚本从IP地址生成

2019-05-20  本文已影响0人  AK蜗牛

上次我们说到,一般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)

第一种最简单,第三种更合理,个人觉得。

上一篇 下一篇

猜你喜欢

热点阅读