snmp 中的本地化
Posted
技术标签:
【中文标题】snmp 中的本地化【英文标题】:Localization in snmp 【发布时间】:2017-06-21 06:59:33 【问题描述】:我们的产品中有 snmp 代理,它将系统警报发送到 snmp 服务器,我们的警报可能是 Unicode。我们使用 3rd 方库进行发送,默认情况下将字符串编码为 ASKII 字节数组。最后我们收到了垃圾邮件。
snmp 协议有 unicode 支持吗?
【问题讨论】:
SNMP 仅传输字节(其 OCTET STRING 类型不适用于带有编码的“现代字符串”)。因此,您有责任在发送之前对数据进行编码,并在接收到正确的解码代码时解析数据。你不应该期望 SNMP 为你做更多的事情。 当然,但是接收者将如何确定它是否是 Unicode,来决定如何解码?我认为它应该得到协议本身的支持。 文本编码超出了 SNMP 的范围。在收到该文本的字节后,您的应用程序将负责将其编码和解码字节声明为文本。 是否意味着在第 3 方 SNMP 接收方的情况下,无法本地化消息? 你有第三方库的源代码吗?一个设计好的应该让你灵活地指定文本编码(我的个人项目就是这样),如果你碰巧碰到一个坏的,你就会被卡住。 【参考方案1】:正如 Lex Li 已经提到的,SNMP 不关心字符串编码。 OCTET STRING 只是一个字节数组。因此,当您必须处理本地化/国际化时,正确的解决方案绝对是使用 UTF-8 编码/解码。但请记住,SNMP4J 和许多其他库在 toString()
等方法中将字节数组视为 ASCII 字符串。所以你必须编写自己的扩展。
【讨论】:
【参考方案2】:正确本地化消息是 SNMP 代理的工作。 正确解码消息是 SNMP 管理工具的工作。
WireShark 跟踪将显示您的代理是否在网络上放置了正确的字节数组。 如果您的消息是 Unicode,则字节应以有效的 Unicode 前导码开头。
此外,根据您的设备类型,代理的 MIB 中还有其他区域可帮助管理工具正确解码消息。
例如,打印机的 prtLocalizationTable 应该显示对 Unicode 的支持,而 prtGeneralCurrentLocalization 帮助管理工具知道如何正确解码消息。
【讨论】:
Larry,我明白,但是有没有办法通过协议“指定”消息的正确本地化,我找到了 prtGeneralCurrentLocalization snmp object ,但不确定它是关于什么的。 管理工具可以设置 prtGeneralCurrentLocalization 的值,以便以管理工具所需的语言检索本地化字符串。例如,对于本地walk up 用户,打印机控制台语言可能是法语,但管理工具希望所有字符串都以英语返回。因此,在检索本地化字符串之前,管理工具会检查或将打印机的 prtGeneralCurrentLocalization 设置为英语,检索本地化字符串,并尝试将其解码为英语。以上是关于snmp 中的本地化的主要内容,如果未能解决你的问题,请参考以下文章