zoukankan      html  css  js  c++  java
  • 利用 pexpect 模块实现通过 CLI 自动化配置网络设备

    本人工作需要经常配置出厂模式的防火墙,每次GUI上重复劳动。所以利用 python 的 expect 实现 pexpect 编写自动配置脚本,是通过 CLI 交互的。

    此脚本是一开始配置 WAN 口的,因为此时没有配置 WAN IP,只能通过 console (实际 test bed 用的是 telnet )进行配置。以后的脚本直接通过

    ssh 连接到 WAN 口。

    #!/usr/local/bin/python
    
    import pexpect
    import time
    import sys
    
    #get port number
    ipDict = {'10.0.0.66':'2029',
    '10.0.0.25':'2011',
    '10.0.0.20':'2043',
    '10.0.0.61':'2022',
    '10.0.0.64':'2025'}
    
    usage = '''Usage: command WANIP
    e.g. ./cfgWANIP.py 10.0.0.25'''
    
    while True:
        if len(sys.argv) == 1:
            print usage
            sys.exit()
        elif sys.argv[1] == '-h' or sys.argv[1] == '--help':
            print usage
            sys.exit()
        elif len(sys.argv) != 2:
            print usage
            sys.exit()
        else:
            break
    
    #telnet login (console login)
    wanip = sys.argv[1]
    port = ipDict[wanip]
    
    child = pexpect.spawn("telnet 10.103.64.8 %s" % port)
    child.logfile = sys.stdout
    child.expect("login:")
    child.sendline("admin")
    child.expect("Password:")
    child.sendline("password")
    time.sleep(1)
    child.sendline("")
    
    while True:
        index = child.expect(["User", "admin@[A-Z0-9]{12}>"])
        if index == 0:
            child.sendline("admin")
            child.expect("Password:")
            child.sendline("password")
            child.expect("admin@[A-Z0-9]{12}>")
            child.sendline("configure terminal")
            break
        elif index == 1:
            child.sendline("configure terminal")        
            break
        else:
            print "Program error! Exit."
            sys.exit()
    
    # login to UTM console, starting to configure WAN IP
    child.expect("config([A-Z0-9]{12})#")
    child.sendline("interface X1")
    
    child.expect("(edit-interface[X1])#")
    child.sendline("ip-assignment WAN static")
    
    child.expect("(edit-WAN-static[X1])#")
    child.sendline("ip %s netmask 255.255.255.0" % wanip)
    
    child.expect("(edit-WAN-static[X1])#")
    child.sendline("gateway 10.0.0.1")
    
    child.expect("(edit-WAN-static[X1])#")
    child.sendline("dns primary 10.217.131.101")
    
    child.expect("(edit-WAN-static[X1])#")
    child.sendline("exit")
    
    child.expect("(edit-interface[X1])#")
    child.sendline("management https")
    
    child.expect("(edit-interface[X1])#")
    child.sendline("management ssh")
    
    child.expect("(edit-interface[X1])#")
    child.sendline("management ping")
    
    child.expect("(edit-interface[X1])#")
    child.sendline("commit")
    
    time.sleep(2)
    child.close()
  • 相关阅读:
    XSS
    XSS
    检查空引用
    LockInt
    Unity Shaderlab: Object Outlines 转
    git 恢复单个文件的历史版本
    烽火HG220G-U E00L2.03M2000光猫改桥接教程
    mark mem
    转 class和struct最本质的区别
    unity shader base pass and additional pass
  • 原文地址:https://www.cnblogs.com/alex-xia/p/6296981.html
Copyright © 2011-2022 走看看