我正在使用 snmpsim-lextudio python 项目来模拟多个SNMP代理,我想实现以下目标:
我怎样才能实现这一目标?
到目前为止,我设法使用以下命令从单独的控制台运行每个代理:
snmpsim-command-responder-lite --agent-udpv4-endpoint=127.0.0.1:161 --data-dir=.\data
每个都有不同的IP和数据文件夹。但如果我想运行 100 个代理,这并不理想!
谢谢
阿敏
如果您希望每个代理都有一个单独的进程,请尝试运行
snmpsim-command-responder-lite --agent-udpv4-endpoint=xxx.xxx.xxx.xxx:161 --data-dir=.\data\xxxx\ --daemonize --logging-method=null
(将“x”替换为每个代理的 IP 地址和数据目录)。
--daemonize
选项会将进程与终端分离,以便您可以从同一终端启动任意数量的进程。您可以更改日志记录方法以从代理获取输出(具体信息可以在docs中找到)。我在使用守护进程版本时遇到了相对文件路径的问题,因此您可能会发现必须为数据目录指定绝对路径。
如果您希望对象随时间变化,您可以使用子流程变化模块指定要运行的脚本,该脚本将在查询 OID 时执行。更多信息这里。在链接页面的示例中,它使用
--variation-module-options=subprocess:shell:1
,但是我在传递参数时遇到问题,并且在同一页面上还有关于使用 shell:1
的警告,所以我会使用 --variation-module-options=subprocess:shell:0
来代替。
我发现为每个代理使用单独的进程非常消耗内存。更好的选择是从同一进程启动所有代理。您可以使用
snmpsim-command-responder --args-from-file=ips.txt --data-dir=./data --pid-file=./pids --daemonize --logging-method=null
来完成此操作,其中 ips.txt
是换行符分隔的端点列表,例如
--agent-udpv4-endpoint=127.0.0.1:161
--agent-udpv4-endpoint=127.0.0.2:161
--agent-udpv4-endpoint=127.0.0.3:161
请注意,您需要调整存储 SNMPREC 文件的方式(更多信息此处),并且此方法不适用于仅 v1/v2c 的精简版。然而,与每个代理使用单独的进程相比,这将使用更少的内存(几个数量级,具体取决于代理的数量),因此值得 v3 的额外开销。