第3章、snmp工具、snml语言执行概述

邮差的信 提交于 2020-02-29 09:50:23

第3章、snmp工具、snml语言执行概述

简单网络管理语言(snml)支持CLI(命令行接口)和SNMP(简单网络管理协议)两种方式自动化的进行网络设备配置和管理。CLI 是基于telnet、ssh的人机交互界面,用于设备的参数配置和状态的查看。SNMP 是基于通讯协议的管理工具,实现网络设备参数的自动化监控和远程配置。
  网络设备的配置和管理的新技术是SDN(Software Defined Netrork)。软件定义网络是2006年斯坦福大学提出的网络设备分层编程控制系统,全新的网络设备自动化配置和管理体系。
  手册最新版:https://ladybirdsnml.github.io/snmlipv6utf8snmptelnetsshweb/snmldoc_utf8ipv6.html


  snmp( Simple Network Management Protocol )简单网络管理协议是可以管理不同厂家网络设备的简单通讯协议。

1、网络设备开启snmp功能

Cisco设备配置snmp
参考文档: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/snmp/configuration/12-4t/snmp-12-4t-book/nm-snmp-cfg-snmp-support.html#GUID-048B997C-AB98-4602-B07B-3130577154F1
举例 :
Router>enable
Router# configure terminal
Router(config)# snmp-server community MyPassword RO

HUAWEI设备配置snmp
参考文档: https://support.huawei.com/enterprise/zh/doc/DOC1000088739?section=j005
H3C设备配置snmp
参考文档: http://www.h3c.com/cn/d_201108/723419_30005_0.htm
举例 :
<Sysname>system-view
[Sysname] snmp-agent
[Sysname] snmp-agent sys-info version v1 v2c
[Sysname] snmp-agent community read MyPassword

2、查看示例脚本[C:\snmlipv6\snmp\snmp_ipv4.txt]

 C:\snmlipv6\snmp\snmp_ipv4.txt
001 snmp.open version {2c} ip {192.168.186.132} port {161} password {cisco}
002 snmp.get var {cisco7200} oid {1.3.6.1.2.1.1.5.0}
003 screen.text at point {5} {20} string {snmp.get (oid:1.3.6.1.2.1.1.5.0) return value: [~cisco7200~]}
004 snmp.getnext oid {1.3.6.1.2.1.1.3}
005 screen.text at point {5} {40} string {snmp.getnext (oid:1.3.6.1.2.1.1.5.0) }
006 screen.text at point {55} {60} string {return oid: [~snmp.oid~] return value: [~snmp.value~]}
007 run.end

 

3、由解释器 [C:\snmlipv6\snml.exe] 逐行解析执行脚本

  批处理文件C:\snmlipv6\snmp_ipv4.bat,双击执行,开始调用解释器程序。


C:\snmlipv6\snml.exe nolog C:\snmlipv6\snmp\snmp_ipv4.txt

  批处理文件中执行C:\snmlipv6\snml.exe,snml.exe是简单网络管理语言的解释器。后面两个命令行参数,第一个参数nolog参数的含义是不记录日志,第二个参数C:\snmlipv6\snmp\snmp_ipv4.txt为网管脚本文件的文件名。
  点击“Go”或“run”执行脚本,脚本执行结果如下:

4、示例脚本[C:\snmlipv6\snmp\snmp_ipv4.txt]语法解析


1)snmp.open version {2c} ip {192.168.186.132} port {161} password {MyPassword}
snmp.open语句用来打开snmp管理协议,有4个参数,所有参数用左右大括弧{}括起来。
第一个参数{2c}为snmp协议的版本号,支持1、2、2c;
第二个参数{192.168.186.132}为网络设备的IP地址;
第三个参数{161}为网络设备snmp服务的端口号,默认值为UDP的161端口;
第四个参数{MyPassword}为网络设备snmp服务的密码

2)snmp.get var {cisco7200_SysName} oid {1.3.6.1.2.1.1.5.0}
snmp.get语句向snmp.open指定的网络设备发送snmp.get请求报文,并接收应答。
第二个参数{1.3.6.1.2.1.1.5.0}为请求网络设备参数的oid值;
第一个参数{cisco7200_SysName}为变量名字,该变量用来保存网络设备返回值;
在本例子中网络设备返回oid {1.3.6.1.2.1.1.5.0} 对应的值“R2_7206.test.cisco”,
变量区生成或更新变量:cisco7200_SysName=[R2_7206.test.cisco];

3)screen.text at point {20} {20} string {snmp.get 返回值: ~cisco7200_SysName~}
screen.text语句在解释器的屏幕上显示文本。
第一、二个参数{20}和 {20}为屏幕的坐标点(20,20),在该位置开始显示文本;
第三个参数{snmp.get 返回值: ~cisco7200_SysName~}为要显示的文本内容,用两个~线连接一个变量,
在本语句中,显示“snmp.get 返回值:”+ 变量cisco7200_SysName的值,变量cisco7200_SysName=[R2_7206.test.cisco],最后显示内容为:“snmp.get 返回值:R2_7206.test.cisco”

4)snmp.getnext oid {1.3.6.1.2.1.1.3}
snmp.getnext语句向snmp.open指定的网络设备发送snmp.getnext请求报文,并接收应答。
第一个参数{1.3.6.1.2.1.1.3}为请求网络设备参数的oid值;
网络设备接收到snmp.getnext指令后,返回与指定oid紧邻的下一个oid值和及对应参数值,在本例中网络设备返回oid {1.3.6.1.2.1.1.3}的紧邻的下一个oid值为”1.3.6.1.2.1.1.3.0”,参数值为” 0 Days 1 Hours 1 Minutes 34 Seconds”;
由于本语句执行后产生的变量值有两个,语句用规定的两个变量名来保存网络设备返回的两个值,变量名和值如下:
snmp.oid=[1.3.6.1.2.1.1.3.0]
snmp.value=[0 Days 1 Hours 1 Minutes 34 Seconds]

5)screen.text at point {20} {100} string {snmp.getnext 返回oid值:~snmp.oid~ 返回值:~snmp.value~}
screen.text语句在解释器的屏幕上显示文本。
第一、二个参数{20}和 {100}为屏幕的坐标点(20,100),在该位置开始显示文本;
第三个参数{snmp.getnext 返回oid值:~snmp.oid~ 返回值:~snmp.value~}为要显示的文本内容,用两个~线连接一个变量,在本语句中,显示“snmp.getnext 返回oid值:”+ 变量snmp.oid的值+“返回值:”+变量snmp.value 的值,最后显示内容为:“snmp.getnext 返回oid值:1.3.6.1.2.1.1.3.0返回值:0 Days 1 Hours 1 Minutes 34 Seconds”
6)run.end
run.end语句表示脚本执行结束。

5、查看示例脚本[C:\snmlipv6\snmp\snmp_ipv6.txt]

 C:\snmlipv6\snmp\snmp_ipv6.txt
001 screen.set color red {0} green {0} blue {0}
002 screen.text at point {150} {30} string {10.snmp test (ipv6): snmp.open snmp.get snmp.getnext}
003 run.set loglevel {debug}
004 snmp.open version {2c} ip {fe80::2} port {161} password {cisco}
005 snmp.get var {v_snmp} oid {1.3.6.1.2.1.1.1.0}
006 screen.text at point {10} {60} string {Cisco3725 ipv6:[fe80::2], snmp.get(1.3.6.1.2.1.1.1.0)=[~v_snmp~]}
007  
008 var {v_y} value {140}
009 screen.text at point {10} {~v_y~} string {No.}
010 screen.text at point {50} {~v_y~} string {Test Method}
011 screen.line from point {10} {155} to point {230} {155}
012 screen.text at point {270} {~v_y~} string {snmp.oid}
013 screen.line from point {250} {155} to point {350} {155}
014 screen.text at point {390} {~v_y~} string {snmp.value}
015 screen.line from point {370} {155} to point {630} {155}
016  
017 var {v_time} value datetime
018 var {v_i} value {0}
019  
020  
021 var {snmp.oid} value {1.3.6.1.2.1.1.1.0}
022 loop.begin
023   
024   var {v_i} add number {1}
025   var {v_y} add number {18}
026   screen.text at point {10} {~v_y~} string {~v_i~}
027   
028   screen.text at point {50} {~v_y~} string {snmp.getnext(~snmp.oid~)}
029   snmp.getnext oid {~snmp.oid~}
030   screen.text at point {250} {~v_y~} string {~snmp.oid~}
031   screen.text at point {370} {~v_y~} string {~snmp.value~}
032   
033   var {v_y} add number {18}
034   snmp.get var {v_snmp} oid {~snmp.oid~}
035   screen.text at point {50} {~v_y~} string {snmp.get(~snmp.oid~)}
036   
037   screen.text at point {370} {~v_y~} string {~v_snmp~}
038   
039   if.var {v_y} > {400}
040     loop.exit
041   if.end
042 loop.end
043 run.end

脚本执行结果如下:




目录: 1、var 2、screen 3、snmp 4、telnet 5、text 6、if 7、loop 8、dns 9、ping 10、arp 11、excel 12、smtp 13、tcp 14、udp 15、ssh 16、web 17、mysql 18、sqlite 19、Run 20、sys 21、macro 附录1、全部语句
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!