2014-09-22 37 views
0

如何在PHP中使用snmp v2時設置最大消息大小?PHP SNMP v2步行碎片/阻塞

我使用PHP來執行設備的SNMP漫遊,並且我的組織有非常嚴格的防火牆。我遇到了一個問題,如果數據包較大並且分段,(snmp2_real_walk或snmp2_walk)會導致生產服務器超時。我想知道是否有辦法將最大數據包大小設置爲更小以防止碎片。

我在Ubuntu 12.04和Net-SNMP 5.4.3上使用php 5.4.10。

當我捕獲流量時,事實證明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 2014-09-23 08:25:19

+0

奇怪的是,我可以從同一臺機器上運行getBulk的cli版本到相同的目標主機,並且它不會產生也是太多的數據包大。我還需要在我的步行中使用OID,以便我可以將它們連接到共享OID的相同部分的其他信息。 (最後一部分)。 – Trenton 2014-09-24 12:49:15

+0

我明白了你對中繼器的意義......如果我在命令中使用-C r20,我現在能夠從CLI複製碎片。現在看看是否有可能讓我告訴PHP減少它的重複。 – Trenton 2014-09-24 18:11:25

回答

0

它沒有出現有辦法告訴PHP請求自定義最大重複設置。而且,PHP的get next效果不佳,因爲它將繼續通過SNMP樹進入下一個分支(即,如果您正在遍歷.17.x,則17.z中的最後一個會給您18.1)。

爲了解決這個問題,我最終使用exec和消毒數據來確保沒有變量可以劫持系統。