【发布时间】:2014-09-26 21:19:07
【问题描述】:
在 PHP 中使用 snmp v2 时如何设置最大消息大小?
我正在使用 PHP 对设备进行 SNMP 遍历,并且我的组织有非常严格的防火墙。我遇到了一个问题,如果数据包较大并且碎片化,(snmp2_real_walk 或 snmp2_walk)会导致我的生产服务器超时。我想知道是否有办法将最大数据包大小设置为更小以防止碎片。
我在 Ubuntu 12.04 上使用 php 5.4.10 和 Net-SNMP 5.4.3。
当我捕获流量时,事实证明 snmp2_real_walk 正在使用 getBulkRequest。我收到一个响应,说数据包是分段的,以及一个较小的后续数据包。在我的本地机器上,除了防火墙之外的相同环境,这有效。在我的生产机器上,它失败了。
var_dump(snmp2_real_walk("a.b.c.d", "public", '.o.i.d'));
如果我通过命令行调用它,它适用于较小的数据包。我不明白为什么。必须有一种方法来设置数据包/消息的大小,对吧?
snmpbulkwalk -v2c -cpublic a.b.c.d .o.i.d
(删除敏感数据)。
【问题讨论】:
-
有问题的数据包大小不是您发送的请求,而是您收到的响应,对吧?除了在请求中设置“max-repeaters”标志外,您无法决定对方如何回答。我的建议是避免在此网络上使用 get-bulk,而使用 get-next 请求。这样,答案会小很多。 (但仍然不能保证它们不会碎片化。)
-
奇怪的是,我可以在同一台机器上运行 cli 版本的 getBulk 到同一目标主机,而且它不会产生太大的数据包。我还需要步行中的 OID,以便我可以将它们连接到共享 OID 相同部分的其他信息。 (最后一部分)。
-
我明白你对中继器的意思...如果我在命令中使用 -C r20,我现在可以从 CLI 复制碎片。现在看看我是否有可能告诉 PHP 减少它的重复。
标签: php ubuntu-12.04 snmp net-snmp ip-fragmentation