实现用户行为的远程监控
2017-11-08
SNMP协议简介
SNMP是任何网管软件的核心协议,位于OSI(开放系统互连)7层协议的第5层,工作于TCP/UDP协议之上,是NMS(网管系统,即管理主机上运行的网管软件)与AGENT(代理,即被管理的设备上运行的SNMP服务)之间相互通讯的协议。
图1 SNMP原理示意图
图2 MIB结构示意图
任何信息设备,只要其支持TCP/IP协议并且运行SNMP服务,都可以纳入网络管理系统进行管理。显然,信息设备若想加入网管系统,必须启动SNMP服务,设定通行字,并使之可被访问。SNMP原理参见图1,图2。
实现原理
通过前面的介绍可知,开发用户行为远程监控程序,就是开发管理端的NMS,而被监控计算机需要运行Agent程序(SNMP服务),并设置通行字,如图2,被监控主机为10.19.138.69,通行字为public(可任意设定,系统缺省为 public),RTX.exe(腾讯通)的 OID为1.3.6.1.2.1.25.4.2.1.2,例程号n为208。
说 明:SNMP是 Windows系统的一个组件,若没有被安装,应安装“管理和监视工具”中的“简单网络管理协议”,安装后,需设置通行字,SNMP服务会自动启动。
得到OID内容的方法有两种,一是Get方法,二是GetNext方法。两种方法是按照OID.n的参数访问具体值,如上述腾讯通TRX.exe进程名称存储在1.3.6.1.2.1.25.4.2.1.2.2 08中。Get得到某个具体的OID值,GetNext是0在Get基础上得到其下一个值和下一个OID.n,NMS是通过调用SNMP的API函数得到一个或一组OID值,将用户行为相关OID值显示在用户界面。
实现方法
1.首先通过snmpWalk等软件确定所需要的OID
本程序访问的OID如下:
正在运行的进程proc ="1.3.6.1.2.1.25.4.2.1.2"
进程的安装路径Path ="1.3.6.1.2.1.25.4.2.1.4"(此项可指示应用的安装目录)
发光细菌归属于微生物范畴,对水体污染物较为敏感,在细菌正常代谢期间,发光强度稳定,持续时间较长,但若受到外部环境的影响,其发光会受到限制,因此,可结合发光抑制率监测水体综合毒性。以往有研究资料显示,再生水的原水对发光菌有一定的毒性作用,以工业废水为主的再生水对发光菌的抑制率约为50.00%。选择Y城与M城作为研究对象进行发光细菌毒性测试,结果如表1所示。此结果显示出,二级生物处理可降低污水的毒性,但氯消毒后会增加水毒性。
进程执行的参数para ="1.3.6.1.2.1.25.4.2.1.5"(进程或服务的启动参数)
安装的程序名称prog ="1.3.6.1.2.1.25.6.3.1.2"
程序的安装日 期date_time="1.3.6.1.2.1.25.6.3.1.5"
计算机系统设备device="1.3.6.1.2.1.25.3.2.1.3"
存储设备名称 storage_name="1.3.6.1.2.1.25.2.3.1.3”(包括磁盘、光盘、U盘和内存)
存储设备分配单 元storage_unit="1.3.6.1.2.1.25.2.3.1.4"(是后面两项大小的数量单位)
存储设备大小 storage_size="1.3.6.1.2.1.25.2.3.1.5"
存储设备占用 storage_used="1.3.6.1.2.1.25.2.3.1.6"
系统上线时间uplink="1.3.6.1.2.1.1.3"
2.通过wsnmp32.dll动态链接库访问Agent
要完成从Agent得到OID.n的内容,需要四个步骤,第一步是建立对话,设置SNMP版本,启动API,得到句柄,为后续操作做准备;第二步是对连接参数的格式进行转换,根据不同的操作类型形成对应的PDU并发给 Agent,Agent端若启动了SNMP服务,就会响应这一请求,若与指定通讯串匹配,ODI在Agent端的MIB中也存在,就会返回请求数据。而若有一项不符合条件,就会返回错误。
例如,本机192.168.1.1向192.168.1.2发出请求,SNMP通讯串为public,版本号为V1,超时timeout=2秒,需访问的OID="1.3.6.1.2.1.1.3.0"(系统上线时间),把以上信息的格式通过转换,连同操作类型Get形成PDU发出,可得到字符串型的时间数据。
特别地,若需要得到一组数据(如所有的进程)时,第一个操作应该是Get,后续的操作为GetNext,并应依据返回的OID判断何处是本组数据的最后一个。
第三步是处理Agent返回的数据,得到PDU,从PDU中提取需要的数据,对数据格式进行转换,形成需要的格式并显示在界面中。第四步是关闭会话,释放资源。
3.返回数据的处理
返回的PDU中的数据,无论是字符型还是(长)整型,都以占用字节数确定长度。正常情况下,取出的数据存在字符型数组中,字符串型数据可直接使用。例如,程序名称,长整型数据转换后也可直接使用。但是,长整型数据取出到字符型数组有时会发生问题,取出后导致长度会发生改变,数据发生错误。
经分析发现,当长整型数据的内码(16进制序列)中含有大于等于“A0”的字节时就会导致错误。例如,程序名OID=.1.3.6.1.2.1.25.6.3.1.5.1,Type=OctetString,Value=07 E0 0C 1A 0E 07 3A 00,而大于“A0”的字节是汉字区位码标志,不知wsnmp32.ddl是否因此导致了错误。总之,这或许是个BUG。
4.程序功能
本程序使用VB6开发,程序分单机查询和多机查询两个模块。
单机模块可以通过DOS命令调用,格式为show_win
图4 用户行为远程监控单机查询界面
图5 多用户运行程序查询程序界面
图6 运行程序扫描结果
多机查询为Windows程序,只需有一张包含用户IP地址的excel表格,指定通讯串和IP地址所在表格中的位置,既可对程序名称进行模糊查询,界面如图5所示,查询结果自动加入IP地址表中,如图6所示。在图6中看到的是对多个用户运行360杀毒软件(360sd.exe)和腾讯通程序(RTX.exe)的查询结果,表中显示哪个用户运行了(标为“Yes”),哪个用户没运行(标为”No”),网不通标为“ping不通”,网通但对方SNMP服务未启动或通讯串不匹配标为“SNMP错误”。显然,这一功能对于大范围检查用户是否运行规定的程序是非常高效的。
结束语
限于篇幅,本文只是给出了程序的编制思路和方法,没有介绍具体编码。掌握了这一方法,就可按需要开发各种网管程序,例如,机房温度的远程监控就可通过监控交换机的环境温度实现,也可以通过SNMP Trap监控交换机接口的上线/下线等。