0

我在通过 snmpwalk 命令运行脚本时遇到问题,该命令应该将随机数重定向到输出文件中:

我已将 snmpd.conf undet /etc/snmp/ 中脚本的 OID 配置为 exec .1.3.6.1.4.1.99.1.53.1006 script.sh.sh /root/my_folder/script.sh


我的脚本如下:

#!/usr/bin/ksh 

Out_Path="$HOME/output.txt" 

echo $RANDOM >> $Out_Path
--------------------------

现在我正在执行 snmpwalk 命令: snmpwalk -t 10 -v 1 -c public 127.0.0.1.1.3.6.1.4.1.99.1.53.1006 并且在输出文件中我得到 2 个随机数而不是 1。我只期待一个随机数应存在于 output.txt 文件中。任何人都可以解释这种行为或一些解决方案吗?


实际问题:

我正在解释我想要实现的目标。我需要通过 snmpget 命令执行脚本。

问题 1:当我使用SNMPGET命令时,脚本执行并且响应(内部)我已经满了(超过 1 KB),但是在将这个响应保存在一个文件中之后,我在一个 while 循环中执行echo $line,它将占用该行一个文件,正如我期望的那样,它应该向我展示整个数据。(但我只能获取 1 KB 数据)

问题 2:为了解决问题 1,我采用了一种新设计,就像从 1 个 OID(脚本)我在一个文件中获取了整个数据。之后我使用新 OID 执行一个新脚本,它将获取 1 个记录(1KB)并修改现有数据并更新数据。所以像这样我将使用具有不同 OID 的 snmpwalk 多次执行第二个脚本,所以我将获得所有记录。但我的问题是当我尝试更新 reord(file) 时,然后在一次执行中它正在删除 2 KB 数据,因为这个原因我发布了这个问题。(1 snmpwalk 命令中的 2 次随机数)。

我希望你现在明白这个问题,但如果你想了解更多细节,我会向你解释。

4

1 回答 1

0

snmpwalk 命令由 snmpgetnext 命令组成,只要子树中有要返回的内容就会重复。我想在这种情况下,两个 getnext 请求是在单个 snmpwalk 调用之后发送的,以确定没有更多数据可供检索。可以肯定的是,请使用 tcpdump 或一些 wireshark 解决方案来嗅探流量。顺便提一句。你确定 -t10 是正确的超时吗?我会将显式重复选项设置为 0 以避免重新传输(-r0 选项)。

您要做的是对上面提到的 OID 执行 snmp get/getnext 请求以执行脚本并将其输出作为 SNMP 响应返回。我认为 1 KB 问题是由其他原因引起的 - 在构建大响应时似乎不是 SNMP 代理问题。请尝试以下 SNMPv1 命令(如果您也有 SNMPv3 访问权限,请告诉我):

snmpget -v1 -t25 -r0 -cprivate <IP> .1.3.6.1.4.1.99.1.53.1006

或者

snmpgetnext -v1 -t25 -r0 -cprivate <IP> .1.3.6.1.4.1.99.1.53.1005

对于 snmpgetnext 请求,请注意 OID 末尾的 1005 字节。这样的 OID 可能不存在,getnext 应该首先正确访问 1006,1005 之后的现有 OID。

于 2012-12-19T12:19:30.020 回答