2020-02-17第3章、snmp工具、snml语言执行概述

简单网络管理语言(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

举例 :

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

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、全部语句

你可能感兴趣的:(2020-02-17第3章、snmp工具、snml语言执行概述)