【问题标题】:PHP SNMP v2 Walk Fragmenting/BlockedPHP SNMP v2 Walk 分片/阻塞
【发布时间】: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


【解决方案1】:

似乎没有办法告诉 PHP 请求自定义最大重复设置。此外,PHP 的 get next 也不能​​很好地工作,因为它将继续通过 SNMP 树进入下一个分支(即,如果您正在遍历 .17.x,则 17.z 上的最后一个将为您提供 18.1)。

为了解决这个问题,我最终使用了 exec 并清理了数据以确保没有变量可以劫持系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多