如何配置 snmpsim 来模拟多个代理,每个代理监听不同的 IP 地址并服务器相同的对象,但有一些变化?

问题描述 投票:0回答:1

我正在使用 snmpsim-lextudio python 项目来模拟多个SNMP代理,我想实现以下目标:

  • 仅使用 SNMP v1/v2c,而不是 v3。
  • 社区应该是公开的
  • 所有代理监听 161 端口
  • 每个代理监听不同的IP地址。
  • 每个代理提供不同的数据文件。或相同的数据文件,但根据代理地址更改一些对象。
  • 对于同一个代理,有些对象具有固定值,但对于代理来说是唯一的,有些对象会随着时间的推移而增加,并且如果代理停止则必须存储。
  • 我更喜欢在单独的进程中运行每个代理,请注意,我使用的是 Windows。

我怎样才能实现这一目标?

到目前为止,我设法使用以下命令从单独的控制台运行每个代理:

snmpsim-command-responder-lite --agent-udpv4-endpoint=127.0.0.1:161 --data-dir=.\data

每个都有不同的IP和数据文件夹。但如果我想运行 100 个代理,这并不理想!

谢谢

阿敏

python snmp simulator
1个回答
0
投票

单独的流程

如果您希望每个代理都有一个单独的进程,请尝试运行

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 的额外开销。

© www.soinside.com 2019 - 2024. All rights reserved.