如何让SNMP Input Trap插件支持任意社区字符串并关闭授权?
让SNMP Input Trap插件支持任意社区字符串的解决方案
针对你遇到的问题——插件要求必须指定社区字符串、不支持关闭授权,但需要接收任意社区字符串的SNMP Trap,这里有两种可行的解决方向:
先试试配置层面的技巧(依赖插件特性)
如果你的SNMP Trap插件支持用正则表达式作为社区字符串匹配规则,那可以直接配置一个匹配任意字符串的正则,就能接收所有社区的Trap了:
snmptrap { port => 10162 community => ".*" }
要是你还想保留特定社区的兼容,也可以用数组形式混合配置:
snmptrap { port => 10162 community => ["my-community-string", ".*"] }
⚠️ 注意:不是所有同类型插件都支持正则匹配,建议你测试一下——发送几个不同社区字符串的Trap,看插件是否都能正常接收。
修改插件代码(彻底解决限制)
如果插件不支持正则匹配,而且没有提供关闭授权的配置项,那只能通过修改插件代码来跳过社区验证:
- 找到插件处理SNMP Trap请求的核心代码,定位到社区字符串的验证逻辑
- 注释掉或者移除验证社区字符串的判断代码,或者把判断条件改成永远通过
- 重新打包或安装修改后的插件
举个常见的Ruby插件示例(比如Logstash的snmptrap插件),你可能会找到类似这样的验证代码:
unless @communities.include?(community) logger.warn("Received SNMP trap with invalid community string", community: community) return end
把这段代码注释掉,或者直接删除,就能让插件接受任意社区字符串的Trap了。
内容的提问来源于stack exchange,提问作者Ajinkya Dhote
相关产品推荐
相关产品推荐

