2014-09-22 3 views
0

Как установить максимальный размер сообщения при использовании snmp v2 в PHP?PHP SNMP v2 Walk Fragmenting/Blocked

Я использую PHP для работы с SNMP-устройствами, и у моей организации очень строгие брандмауэры. Я столкнулся с проблемой, когда (snmp2_real_walk или snmp2_walk) приводят к тайм-аутам с моего производственного сервера, если пакеты больше и становятся фрагментированными. Мне интересно, есть ли способ установить максимальный размер пакета на меньшее, чтобы предотвратить фрагментацию.

Я использую php 5.4.10 на Ubuntu 12.04 и 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 

(чувствительные данные удалены).

+0

Проблемный размер пакета - это не тот запрос, который вы отправляете, но ответ, который вы получаете, не так ли? Вы не можете решить, как другая сторона решит ответить, кроме установки в запросе флага «max-repeaters». Моя рекомендация состояла бы в том, чтобы избежать использования get-bulk в этой сети и вместо этого использовать вместо этого запросы get-next. Таким образом, ответы будут намного меньше. (Но по-прежнему нет гарантии, что они не будут фрагментированы.) – Jolta

+0

Странно, что я могу запустить CLI-версию getBulk с одного и того же компьютера на один и тот же хост-адрес, и он не создает пакеты, которые тоже большой. Мне также нужны OID в моей прогулке, чтобы я мог подключить их к другой информации, которая разделяет ту же часть OID. (последняя часть). – Trenton

+0

Я вижу, что вы имеете в виду для ретрансляторов ... Теперь я могу дублировать фрагментацию из CLI, если я использую -C r20 в команде. Теперь, чтобы узнать, возможно ли мне сказать PHP, чтобы уменьшить его повторения. – Trenton

ответ

0

Невозможно сказать PHP, чтобы запросить пользовательский параметр максимального повторения. Кроме того, PHP в следующий раз не работает слишком хорошо, так как он будет продолжать проходить через дерево SNMP в следующую ветку (т. Е. Если вы пересекаете .17.x, последний на 17.z даст вам 18.1).

Чтобы обойти эту проблему, я закончил использование exec и дезинформировал данные, чтобы гарантировать, что никакие переменные не смогут захватить систему.