PHP SNMP v2漫游分段/阻止


PHP SNMP v2 Walk Fragmenting/Blocked

在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

(已删除敏感数据)。

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

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