返回IT运维网
  • |
  • 文章EID:
  • |
  • 账号:
  • 密码:
借助脚本语言实现网络设备配置的有效管理
2018-01-22 网络安全和信息化 / 西安 张文良

一、实现思路

    作为企业网络管理员必须做到,确保企业的网络正常运行,能够适时满足企业网络用户及业务变更的需求,故网络设备的配置也要时常依据需求进行批量设备配置修改,设备本机保存。如果不借助网络维护工具,分布在企业不同区域的数百台网络设备,要依据需求随时进行配置修改、测试等其他维护工作,效率很低,工作量大,维护过程难以避免失误造成网络应用异常。目前虽然市场上有许多网络管理程序,但是均不是针对企业自身定制开发的,加之企业网络应用需求也在不断发生变化,所以使用起来永远存在这样那样的问题,由此可见,根据企业网络现状,编写一套网络设备管理程序,且当需求和网络结构等发生变化时,可随时改写程序代码,持续使用,并能起到事半功倍的效果,是网络运维管理者的必然需求。

脚本语言发展到今天,已可以用来完成控制软件应用程序,能让网管员根据工作需求随时快速实现网络设备的配置管理,故障排查,功能测试等其他网络维护工作,通过必要的脚本程序编写,细心观察,分析原因,便能及时排除网络隐患。

SecureCRT工具软件提供了脚本语言调用时解释执行的工作平台,是一款支持SSH的终端仿真程序,同时支持Telnet和rlogin协议,用于连接运行包括Windows、UNIX和VMS的远程系统的工具软件。网管员借助脚本语言和此软件工具,工作起来势如破竹,如虎添翼,保障网络能够随时、持续满足企业对网络的需求变化(如:升级改造现有网络等),提升网络运行维护效率。

二、网络设备配置管理VBS编程实例简述

    这里的实例,是针对笔者所在企业的网络现状,“量身定制”的一套VBS程序代码,其主要功能是针对企业不同区域的建筑,即中心机房、A座、B座、C座等其它建筑内的不同网络设备配置,随时进行批量设备本机配置保存和异地远程自动批量(备份/恢复)设备配置。此程序代码主要是设备配置管理,但稍作添加和修改便可完成诸多设备管理功能,如:随时查看设备资源使用情况、批量设备时间校准、随时查看和获取设备配件损坏报警及运行日志信息等,希望能起到“抛砖引玉”的效果。代码的编写不在详述,见程序注解。

三、程序代码运行说明:

1、支撑平台:Windowns 、SecureCRT

2、程序代码文件:FSDI-network.vbs,见:程序代码及注解

3、数据文件 :存放在程序代码文件目录下的“netdrv-ip”文件夹内,可根据实际情况随时修改,及时满足网络运维需求。

    ip&password&n-a.txt (A座网络设备管理IP及登录密码)

    ip&password&n-b.txt (B座网络设备管理IP及登录密码)

    ip&password&n-c.txt  (C座网络设备管理IP及登录密码)

    ip&password&n-o.txt  (其他建筑内网络管理IP及登录密码)

    ip&password&n-r.txt  (中心机房网络设备管理IP及登录密码)

    ip&password&n-all.txt (全部网络设备管理IP及登录密码)

4、网络设备配置备份保存:设备配置保存到FTP服务器上。

    在/ftp-service-dir/ netdrvbak/ 目录下程序会自动建立以下目录:all-drv 、a-zuo、b-zuo、c-zuo、other、pc-room;并按IP对应关系存放设备配置文件,包括堆叠设备的配置文件及所有设备配置文件打包备存文件(网络设备配置文件20151010155749.rar)。

四、程序代码及注解

FSDI-network.vbs文件:

 

# $language = "VBScript"

# $interface = "1.0"

Const ForReading = 1  '定义常量

Sub main '主控程序

  Dim fso, f, zone,zonepath,bakupname '声明变量的数据类型

  Set fso = CreateObject("Scripting.FileSystemObject")'创建数据文件,

  '------程序主菜单------ 

  zone=inputbox(chr(13)&chr(10)&"区域:1(A)__A座; 2(B)__B座; 3(C)__C座;

"&chr(13)&chr(10)&""&chr(13)&chr(10)&" 4(O)__其他;5(R)__机房;6(ALL)__全部区域"&chr(13)&chr(10)&""&chr(13)&chr(10)&""&chr(13)&chr(10)&

"异机备份与本机保存选择:( 1, 2, 3, 4, 5, 6)"

&chr(13)&chr(10)&""&chr(13)&chr(10)&""&chr(13)&chr(10)

&"备份配置恢复选择:(A,B,C,O,R,ALL;大写)"

&chr(13)&chr(10)&""&chr(13)&chr(10)&chr(13)&chr(10)

&"所有配置文件打包备存:dl"

&chr(13)&chr(10)&""&chr(13)&chr(10)&chr(13)&chr(10)

&"其他:other "&"    请选择______" ,"铁一院  网络设备配置管理","1")

    '---不同区域设备操作选择及对应的数据文件,备份保存目录---

    Select Case zone

      Case "1","A"

      zonepath="ip&password&n-a.txt"   '---A

      bakupname="A-zuo"      

      Case "2","B"

      zonepath="ip&password&n-b.txt"   '---B

      bakupname="B-zuo"

      Case "3" ,"C" 

      zonepath="ip&password&n-c.txt"   '---C

      bakupname="C-zuo"

      Case "4","O"

      zonepath="ip&password&n-o.txt"   '---其他建筑

      bakupname="other"

      Case "5","R"

      zonepath="ip&password&n-r.txt"   '---中心机房

      bakupname="pc-room"

      Case "6","ALL"

      zonepath="ip&password&n-all.txt" '---所有网络设备

      bakupname="all-drv"

      case "dl"

           remotetel() '---将FTP服务器上保存的所有设备配置文件打包备存

           crt.sleep 2000  '调试时确认最佳值                

           crt.session.disconnect '---断开当前SESSION连接

           crt.quit  '---退出SecureCRT

      Case Else

           crt.session.disconnect

           crt.quit

    End Select

    '---打开选择区域对应的数据文件,获取设备管理IP及登录密码

    '以ASCII码格式 只读打开文件      

    Set f = fso.OpenTextFile("netdrv-ip\"&zonepath, ForReading, 0)

    Dim line, params ,count,acount,bcount,ccount,other,itcount,getstr,waitstr

    crt.screen.synchronous=true  '执行过程同步显示在SecureCRT

    count=0,acount=0,bcount=0,ccount=0,itcount=0,pcroom=0 '设备计数器

    Do While f.AtEndOfStream <> True

       '---逐行读取数据文件,一直到达文件结尾

       count=count+1

       line = f.Readline  '读取一整行

       params = Split( line ) '分离参数(设备IP  密码)

       crt.Session.Connect "/TELNET " & params(0) & vbcr '---登录到网络设备

       If crt.Screen.WaitForString ("Username:") <> 0 Then

           crt.Screen.Send "admin" & vbcr

           crt.Screen.WaitForString "Password:"     

           crt.Screen.Send params(1) & vbcr

          '---如果网络设备是堆叠方式,首先进入第一台设备---

           crt.Screen.Send vbcr & "cd " &" unit1>flash:" & VbCr

      Select Case zone

        Case "A","B","C","O","R","ALL" '---将备份的设备配置文件导入设备---

          CALL machinerecovery(bakupname,params,count) '自定义函数,备份恢复

        Case "1","2","3","4","5","6"   '---设备配置文件异机备份,本机保存---

           '---连接FTP服务器,指定FTP帐户名和密码

           '---修改FTP服务的默认端口,目的是为了安全畅通

           crt.Screen.Send "ftp 192.168.1.119 55" & VbCr

           crt.Screen.WaitForString "none"

           crt.Screen.Send "adminftp" & vbcr

           crt.Screen.WaitForString "Password:"

           crt.Screen.Send "ftp-mima" & vbcr

           crt.screen.waitforstring "in"       

           '---在FTP服务器上建立设备配置保存目录,指定保存路径---

           crt.Screen.Send vbcr & "mkdir " & "netdrvbak" & VbCr

           crt.Screen.Send vbcr & "cd " &" netdrvbak" & VbCr

           crt.Screen.Send vbcr & "mkdir " & bakupname & VbCr

           crt.Screen.Send vbcr & "cd " & bakupname & VbCr

           crt.Screen.Send vbcr & "mkdir " & params(0) & VbCr

           crt.Screen.Send vbcr & "cd " & params(0) & VbCr

           crt.Screen.Send vbcr & "bin" & VbCr

        if  params(0)="192.168.255.2"then  '---特殊设备判定,确认配置文件---

          crt.Screen.Send vbcr & "put vrpcfg.zip" & VbCr

          crt.sleep 900

        else  '---H3C及华为网络设备默认配置文件---

          crt.Screen.Send vbcr & "put vrpcfg.cfg" & VbCr

          crt.Screen.Send vbcr & "put config.cfg" & VbCr

          crt.Screen.Send vbcr & "put startup.cfg" & VbCr

        end if

          crt.Screen.Send vbcr & "cd /"  & VbCr

          crt.Screen.Send vbcr & "quit" & VbCr

          WaitForCmdEnd()  '---等待FTP连接断开,回到设备命令提示符">"

          '------进入堆叠的第二台设备------

          crt.Screen.Send vbcr & "cd " &" unit2>flash:" & VbCr

          crt.Screen.Send vbcr & "pwd " & VbCr

          crt.Screen.WaitForString "pwd"

          crt.Screen.WaitForString "flash:"

          getstr=crt.Screen.Get(23,1,23,12)  '---捕捉终端回显字符

      if getstr="unit2>flash:" then

         count=count+1

         '---连接FTP,指定堆叠的第二台设备配置文件保存路径

         crt.Screen.Send "ftp 192.168.1.119 55" & VbCr

         crt.Screen.WaitForString "(none)"

         crt.Screen.Send "adminftp" & vbcr

         crt.Screen.WaitForString "Password:"

         crt.Screen.Send "ftp-mima" & vbcr

         crt.Screen.Send vbcr & "cd " &" netdrvbak" & VbCr

         crt.Screen.Send vbcr & "cd " & bakupname & VbCr

         crt.Screen.Send vbcr & "cd " & params(0) & VbCr

         crt.Screen.Send vbcr & "mkdir " & "Second" & VbCr

         crt.Screen.Send vbcr & "cd " & "Second" & VbCr

         crt.Screen.Send vbcr & "bin" & VbCr

         if  params(0)="192.168.255.2" then  '---特殊设备判定,确认配置文件

           crt.Screen.Send vbcr & "put vrpcfg.zip" & VbCr

           crt.sleep 900

         else

           crt.Screen.Send vbcr & "put vrpcfg.cfg" & VbCr

           crt.Screen.Send vbcr & "put config.cfg" & VbCr

           crt.Screen.Send vbcr & "put startup.cfg" & VbCr

         end if

         crt.Screen.Send vbcr & "cd \"  & VbCr

         crt.Screen.Send vbcr & "quit" & VbCr

         WaitForCmdEnd() '---自定义函数,等待FTP连接退出,返回设备系统命令状态

    end if

      thismachinesave(params) '---自定义函数,设备配置文件本机保存

      WaitForCmdEnd()         '---等待堆叠的第二台设备操作完成

        Case Else

      End Select 

      crt.Session.Disconnect  '断开设备telnet连接 

      '---不同区域维护设备数量统计,数据文件最后一个IP作为结束字符串

      Select Case params(0)

        Case "192.168.190.50"

            acount=count

        Msgbox("A座设备检查,维护工作完成,回车继续。" & acount & "台")

        Case "192.168.190.74"

            bcount=count-acount

            Msgbox("B座设备检查,维护工作完成,回车继续。" & bcount & "台")

        Case "192.168.190.2"

            ccount=count-acount-bcount     

            Msgbox(" C座设备检查,维护工作完成,回车继续。" & ccount & "台")      

        Case "192.168.190.73"

            other=count-acount-bcount-ccount        

            Msgbox("其他区域设备检查,维护工作完成,回车继续。" & other & "台")

        Case "192.168.189.253"

            pcroom=count-acount-bcount-ccount-other

            Msgbox("机房网络设备检查,维护工作完成,回车继续." & pcroom & "台")

        Case Else

      End Select 

      else

      msgbox(params(0)&"连接超时")    

      end if

    Loop

End Sub

'---下面是自定义函数---

Function WaitForCmdEnd()  '等待设备命令提示符">"出现

    Do while (crt.Screen.WaitForString(">",1)<>True)                                     

             crt.Screen.Send " "                                                             

    Loop    '在1秒内没有检测到字符串">"出现,就向终端屏幕发出空格提醒

End Function

Function thismachinesave(params)  '---在设备本机保存当前配置---

    crt.screen.send vbcr & "save" & VbCr

    crt.Screen.WaitForString "[Y/N]"

    crt.screen.send vbcr & "y" & VbCr

    crt.screen.send vbcr & "y" & VbCr  

    crt.Screen.WaitForString ":"

    if params(0)="192.168.254.5" or params(0)="192.168.190.2" or params(0)="192.168.253.253" then  '---特殊设备处理(如:防火墙设备)---

    crt.screen.send vbcr & "y" & VbCr

    end if

    crt.screen.send vbcr & VbCr & vbcr

    WaitForCmdEnd()

end function

'---设备配置文件备份导入在线设备---

function machinerecovery(bakupname,params,count)

    crt.Screen.Send "ftp 192.168.1.119 55" & VbCr '---连接FTP服务器---

    crt.Screen.WaitForString "none"

    crt.Screen.Send "adminftp" & vbcr

    crt.Screen.WaitForString "Password:"

    crt.Screen.Send "ftp-mima" & vbcr

    crt.screen.waitforstring "in"       

    '---进入FTP服务器设备配置备份目录"netdrvbak"/bakupname/params(0)" 

    crt.Screen.Send vbcr & "cd " &" netdrvbak" & VbCr

    crt.Screen.Send vbcr & "cd " & bakupname & VbCr

    crt.Screen.Send vbcr & "cd " & params(0) & VbCr

    '---发送FTP 命令,上传设备配置文件(put--->get)

    crt.Screen.Send vbcr & "bin" & VbCr

    crt.Screen.Send vbcr & "get *.cfg" & VbCr  '---注意特殊设备配置文件后缀---

    crt.Screen.WaitForString "[Y/N]:"

    crt.Screen.Send "Y" & vbcr

    crt.sleep 600

    crt.Screen.Send vbcr & "quit" & VbCr

    WaitForCmdEnd()

    '---堆叠的第二台设备备份文件导入开始---

    crt.Screen.Send vbcr & "cd " &" unit2>flash:" & VbCr

    crt.Screen.Send vbcr & "pwd " & VbCr

    crt.Screen.WaitForString "pwd"

    crt.Screen.WaitForString "flash:"

    getstr=crt.Screen.Get(23,1,23,12)

    'msgbox( getstr )

    if getstr="unit2>flash:" then '---判定是否有堆叠的第二台设备

          count=count+1

         '---连接FTP服务器-----'

         crt.Screen.Send "ftp 192.168.1.119 55" & VbCr

         crt.Screen.WaitForString "(none)"

         crt.Screen.Send "ftpadmin" & vbcr

         crt.Screen.WaitForString "Password:"

         crt.Screen.Send "ftp-mima" & vbcr

         crt.Screen.Send vbcr & "cd " &" netdrvbak" & VbCr

         crt.Screen.Send vbcr & "cd " & bakupname & VbCr

         crt.Screen.Send vbcr & "cd " & params(0) & VbCr

         crt.Screen.Send vbcr & "cd " & "Second" & VbCr

         '---发送FTP 命令,上传设备配置文件(put--->get)

         crt.Screen.Send vbcr & "bin" & VbCr

         crt.Screen.Send vbcr & "get *.cfg" & VbCr

         crt.Screen.WaitForString "[Y/N]:"

         crt.Screen.Send "Y" & vbcr

         crt.sleep 600

         crt.Screen.Send vbcr & "quit" & VbCr

         crt.Screen.Send vbcr & "dir" & VbCr

         crt.Screen.Send vbcr & "quit" & VbCr

    end if

    WaitForCmdEnd()

    '---堆叠的第二台设备操作完成---

     machinerecovery=count

end function

'---所有在线设备配置文件备份打包备存---

Function remotetel() 

    '---远程Telnet 连接FTP,修改telnet服务的默认端口,目的是为了安全畅通

    crt.Session.Connect "/TELNET " & "192.168.1.119 650" & vbcr

    crt.Screen.WaitForString "login:"          

    crt.Screen.Send "adminftp" & vbcr & "ftp-mima" & vbcr

    crt.sleep 1000 'Telnet 连接相对较慢,调试时,确定最佳值

    crt.Screen.Send "e:" & vbcr

    '指定打包程序,进入配置文件备份工作盘及目录

    crt.Screen.Send "PATH=C:\Program Files\WinRAR" & vbcr

    crt.Screen.Send "cd ftp-service-dir\netdrvbak "& vbcr

    'crt.Screen.Send "del *.rar" & vbcr

    crt.Screen.Send "rar a -ag -r -s 网络设备配置文件" & vbcr

    crt.sleep 500 '调试时,确定最佳值

    crt.Screen.Send "exit" & vbcr

    crt.sleep 1000

End Function

相关评论 [查看所有评论]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
心情:
  • 支持
  • 高兴
  • 枪稿
  • 不解
  • 搞笑
  • 愤怒
  • 谎言
账号: 密码:
验证码 看不清?点击更换
相关阅读