snmp虚拟设备模拟器 SnmpSim windows 安装测试过程
介绍
Snmp模拟器是适用于模拟网络上大量的不同类型的支持SNMP设备响应请求的过程,其原理通过监听本地的本地IP接口和/或UDP端口,一旦SNMP请求进入,SNMP模拟器查找snmprec文件并以snmp协议格式响应给服务器。安装过程如下:
安装条件
操作系统准备:win10 64位系统
前置条件:安装python,安装过程链接https://baijiahao.baidu.com/s?id=1606573927720991570&wfr=spider&for=pc
修改pip下载源为本地源
https://www.cnblogs.com/huao990928/p/11828945.html
写入文件内容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
在windows中:
直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini
管理员模式运行cmd
运行命令:”pip install pysnmp”
过程中可能会提示缺少某些包,再次运行:”pip
install 缺少包”即可
安装snmpsim软件
下载地址:https://jaist.dl.sourceforge.net/project/snmpsim/snmpsim/0.3.0/snmpsim-0.3.0.tar.gz
管理员模式运行cmd,cd到该项目文件目录下,运行命令“python setup.py
install”
即可安装完成。
构造snmpprc文件
该文件是把获取设备mib,以“OID | TYPE |
VALUE”形式的单个SNMP对象组织在一起的文本文件,以.snmprec作为后缀。模拟器模拟设备需要用此文件
获取设备mib的方法有三种
1)手工创建
该方法还未试验。参考http://www.51testing.com/html/03/n-4458603.html
2)真实设备模拟
找到一个开启snmp服务的真实设备,输入以下命令:
通过如下命令生成:
snmprec.py --agent-udpv4-endpoint=需要模拟的真实设备IP:161
--output-file=./data/demo.snmprec(模拟数据文件)--protocol-version=2c --community=public
即生成demo.snmprec文件,其内容如下:
将其复制到snmpsim项目文件目录下,并改名为public.snmprc
3)MIB文件构建
参考http://snmplabs.com/snmpsim/quickstart.html#simulate-from-mib
,未做验证。
新建虚拟IP
模拟完成后,若模拟多台虚拟设备,需要在本地网卡新建虚拟IP,参考http://www.dngswin10.com/newdngs/51476.html
当需要模拟大量设备时,可是在管理员模式下运行cmd
键入命令“for /l %i
in (1,1,255) do netsh interface ip add address "本地连接" 192.168.10.%i 255.255.255.0”
此命令可完成从192.168.10.1至192.168.10.255 在本地网卡上的虚拟IP创建。
运行过程如下:
完成后,在高级TCP/IP设置里即可看到多个IP
运行模拟程序
添加完成并测试虚拟IP可以连通后,即可运行模拟程序。在管理员模式下进入cmd,到snmpsim项目文件目录下运行命令
snmpsimd.py--data-dir=.\data\linux --agent-udpv4-endpoint=192.168.10.12:161
即可完成对单个设备的模拟。注意--data-dir目录地址为存放欲模拟设备数据文件public.snmprc目录。
若要批量模拟多个设备,可新建批处理文件addvirtualIP.bat
,内容为:
@echo off
echo >parm.txt
set /a i=1
:loopstart
echo^--agent-udpv4-endpoint=192.168.10.%i%^:161>>parm.txt
set /a i=i+1
if not %i% == 255 gotoloopstart
运行此文件,即可在当前文件目录下生成param.txt 文件,内容为从192.168.10.1到192.168.10.255的ip参数,如下图
snmpsimd.py
--data-dir=.\data\linux --args-from-file=.\parm.txt即可完成对批量多个设备的模拟。如下图:
测试
完成后需要测试,可用snmpwalk命令,也可以通过snmputil工具,链接https://www.jb51.net/softs/563509.html#downintro2
如下图:
可以看到1.3.6.1.2.1.1.0 OID 的值可以获取到,都为linux系统版本,与模拟设备数据文件相同,即可说明测试成功。
常见问题分析与解决
1)基本环境配置
起码要保证模拟器和欲模拟的虚拟设备IP之间能ping通;
对于监听多个IP接口时,需要将其逐个添加到网卡
2)模拟的返回节点报no such instance
当节点不存在时回报该错误。
首先通过抓包,检查所属的团体字,在对应的.snmprec文件下查找该节点是否存在。
3)同步问题
实际测试中模拟多台设备同时并发时,发现SNMP 请求时同步执行。
该问题,通过查找相关API,可知:SNMP Simulator是一个单线程应用程序,这意味着它只能一次处理单个请求。最重要的是,一些变体模块可能会给请求处理带来额外的延迟,这可能导致后续请求在输入队列中累积并导致延迟增加。为了最大化吞吐量和最小化延迟,可以绑定到不同IP接口或端口的snmpsimd.py的多个实例,这有效地使SNMP模拟器一次执行多个请求,只要它们被发送到不同的snmpsimd.py实例。
4)基于IP接口文件的配置
实际应用中发现,IP接口文件有个数限制,建议最多配置500个。