简单网络管理语言(Simple Network Management Language)是一种类自然语言的脚本语言,它采用snmp、telnet、ping、dns、arp、ssh、tcp、udp、web等协议访问网络设备,内置smtp协议用于告警等邮件的发送,支持excel、mysql、sqlite等3种方式进行网管数据的存取。
手册最新版:https://ladybirdsnml.github.io/snmlipv6utf8snmptelnetsshweb/snmldoc_utf8ipv6.html
第3章、snmp工具、snml语言执行概述
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] 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
001snmp.open version {2c} ip {192.168.186.132} port {161} password {cisco}
002snmp.get var {cisco7200} oid {1.3.6.1.2.1.1.5.0}
003screen.text at point {5} {20} string {snmp.get (oid:1.3.6.1.2.1.1.5.0) return value: [~cisco7200~]}
004snmp.getnext oid {1.3.6.1.2.1.1.3}
005screen.text at point {5} {40} string {snmp.getnext (oid:1.3.6.1.2.1.1.5.0) }
006screen.text at point {55} {60} string {return oid: [~snmp.oid~] return value: [~snmp.value~]}
007run.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
001screen.set color red {0} green {0} blue {0}
002screen.text at point {150} {30} string {10.snmp test (ipv6): snmp.open snmp.get snmp.getnext}
003run.set loglevel {debug}
004snmp.open version {2c} ip {fe80::2} port {161} password {cisco}
005snmp.get var {v_snmp} oid {1.3.6.1.2.1.1.1.0}
006screen.text at point {10} {60} string {Cisco3725 ipv6:[fe80::2], snmp.get(1.3.6.1.2.1.1.1.0)=[~v_snmp~]}
007
008var {v_y} value {140}
009screen.text at point {10} {~v_y~} string {No.}
010screen.text at point {50} {~v_y~} string {Test Method}
011screen.line from point {10} {155} to point {230} {155}
012screen.text at point {270} {~v_y~} string {snmp.oid}
013screen.line from point {250} {155} to point {350} {155}
014screen.text at point {390} {~v_y~} string {snmp.value}
015screen.line from point {370} {155} to point {630} {155}
016
017var {v_time} value datetime
018var {v_i} value {0}
019
020
021var {snmp.oid} value {1.3.6.1.2.1.1.1.0}
022loop.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
042loop.end
043run.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、全部语句