推荐给好友 上一篇 | 下一篇

使用secureCRT自动轮询华为交换机端口MAC

雷雨天对网络来说是比较郁闷的,雷很容易从网络打入,损坏下联交换机,严重的会影响上联设备.因此有雷击的天气,就要对设备进行端口MAC轮询,以迟早发现出问题的下联光点,尽快修复.
    以前人工操作的情况下,必须一台台设备登陆上去,一台台的看.工作量大,且效率不高.为此,本人研究了一下SecureCRT的脚本编程,并参考网上的的资料,经自己动手,现在已经实现了设备自动轮询,轮询后自动生成TXT和EXCEL表,以方便判断,虽然从故障点的判断上还要结合网管员的经验和报修单的情况来判断,但已经比过去减少很多工作量.
    本脚本的基本思路是,利用ACCESS数据库和IP地址表,将要轮询的设备信息写入数据表中,然后利用VBS脚本语言,读取数据库字段,登陆到交换机上去进行查询.
    经测试,该脚本还是有一定的效果的,本人现在将代码放上,希望能给网管员们减轻工作量,也希望大家能对代码进行改进,增加一些有用的功能,做出更好的脚本来.
***********************************************************************
***************考虑到本网络内部结构的保密,敏感数据都清空了***********
***********************************************************************
VBS主脚本如下:
checkmac.vbs
''''''''''''''''''''''''''''''''''''''''
'IP表文件格式为TXT,每条IP地址单独一行
'数据库中每台设备一个表,表中有三个字段
'字段一:编号,自动编号,主键
'字段二:portNum,文本
'字段三:portDes,文本
'每个表的表名是IP地址是最后一段,比如172.30.1.1的端口描述表的表名是1
''''''''''''''''''''''''''''''''''''''''''''
#$language = "VBScript"
#$interface = "1.0"



'定义IP,MAC相关变量

Dim ipFSO,macFSO
Dim line
Dim IPFile,NoMacFile
Dim splitIP



'定义文件操作变量
Const ForReading = 1
Set ipFSO = CreateObject("Scripting.FileSystemObject")
Set macFSO = CreateObject("Scripting.FileSystemObject")



'设置IP列表和输出文件的位置
Set IPFile = ipFSO.OpenTextFile("D:\checkmac\eqIP.txt",ForReading)
Set NoMacFile = macFSO.CreateTextFile("D:\checkmac\"&date&"-NoMac.txt",true)



'定义EXCEL
Dim objXL
Set objXL=CreateObject("Excel.Application")
objXL.Visible=False

Set objNMac = objXL.WorkBooks.Open("D:\checkmac\NoMac.xls")



'复制模板保存文件名为当天日期
objXL.ActiveWorkBook.SaveCopyAs("D:\checkmac\"&date&"-NoMac.xls")

Set objNMac = objXL.WorkBooks.Open ("D:\checkmac\"&date&"-NoMac.xls")

Set objNMac = objXL.ActiveWorkBook.WorkSheets(1)



'定义excel报表开始写入的行,分为列索引和行索引,因为判断MAC时要判断端口的UP,DOWN状态,所有还有UP行的行索引和DOWN行的行索引,不一样的.

rowindex=3
colindex=1
upindex=3
downindex=3



'定义数据库变量
Dim cn,rs
Set rs=CreateObject("ADODB.Recordset")
Dim portStatus


'端口MAC枚举函数
Function SwPortEmu(myIP)
    splitIP = split(cstr(myIP),".")
rs.Open "select * from "+splitIP(3),cn,1,3
While (Not rs.EOF)
     If rs("portDes")<>"" Then
  crt.Screen.Send "dis int eth 1/0/" & rs("portNum") & VbCr
  If (crt.Screen.WaitForString ("current state : UP",1)<>False) Then
   portStatus="PortUP"
   colindex=1
   rowindex=upindex
  Else
   portStatus="PortDown"
   colindex=5
   rowindex=downindex
  End If
  crt.Screen.Send " "
  crt.Screen.Send " "
'查看端口MAC
         crt.Screen.Send "dis mac-address int eth 1/0/" & rs("portNum") & VbCr

'输入多个空格,以防止MAC地址多时一页显示不下的问题.你可以根据自己的情况适当的减少
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
  crt.Screen.Send " "
         If (crt.Screen.WaitForString ("No Mac address",1)<>False) then
             NoMacFile.WriteLine("IP:"&myIP&"  "&"端口:"&rs("portNum")&Chr(09)&" 描述:"&rs("portDes")&Chr(09)&Chr(09)&Chr(09)&"端口状态:"&portStatus)
             objNMac.Cells(rowindex,colindex).value=myIP
             objNMac.Cells(rowindex,colindex+1).value=rs("portNum")
             objNMac.Cells(rowindex,colindex+2).value=rs("portDes")
             If portStatus<>"PortUP" Then
                 downindex=downindex+1
             Else
                 upindex=upindex+1
             End If
         End If
     End If
     crt.Screen.Send VbCr
     crt.Screen.WaitForString ">"
     rs.MoveNext
Wend
rs.Close
End function

Sub main
    '数据库路径及连接参数
    Set cn=CreateObject("ADODB.Connection")
    Cnstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\checkmac\equPort.mdb;Persist Security Info=False"
    cn.Open Cnstr
   
While IPFile.AtEndOfStream<>True

     '从IP列表中读取一条IP记录并将其保存到line变量中
     line=IPFile.ReadLine
     '连接设备



  'crt.Screen.WaitForString "2,3]"
  'crt.Screen.Send "1" & VbCr
  'crt.Screen.WaitForString "ip address and Enter:"
  'crt.Screen.Send line & VbCr

  '特别说明,因为我这边的网络环境是通过一台安全网关路由再登陆上去的,如果是和我一样的,请用上面的代码,如果是直接TELNET的,请下面的这行代码

  crt.Session.Connect("/telnet "&line)
  crt.Screen.WaitForString "Username:"
  crt.Screen.Send "username" & VbCr
  crt.Screen.WaitForString "Password:"
  crt.Screen.Send "password" &VbCr

  '网上有判断是否连接上的代码,大家可以去参考一下
  crt.Screen.Send VbCr
  crt.Screen.Send VbCr

  '判断是否登陆成功,这里是以用户模式来判断的,其它情况请自行判断.
  crt.Screen.WaitForString ">"
  '判断是否有MAC
  SwPortEmu(cstr(line))
  crt.Screen.Send "quit" & VbCr
Wend
crt.Screen.WaitForString ",2,3]"
crt.Screen.Send "3" & VbCr
objXL.save
objXL.quit
objXL.WorkBooks.Open ("D:\checkmac\"&date&"-NoMac.xls")
crt.Dialog.MessageBox "检测完成","成功",0
End Sub

************************************************************************

基本的代码是这样的,如果大家有更好的代码,请不要吝啬哦.

我的邮箱是wang_com@vip.163.com,如果大家有更好的代码,希望大家可以交流,如果有什么问题,也可以给我发邮件.
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
[站长微博]欢迎访问剑心通明的腾讯微博,  BSD爱好者微群,  点击此处开通微博同时与剑心互听

TAG: 交换机 端口 securecrt
 

评分:0

我来说两句

seccode