在我学习SNMP时,我对SNMP字符串操作有一些疑问:
#$%^&
等)。他们怎么能被限制?答案 0 :(得分:4)
在SNMP中没有字符串概念。 OCTET STRING不是真正的字符串(与Java和C#等高级编程语言相比),因为这种数据结构无处存储编码信息。嗯,这太可怕了。
最大字符串大小仅受SNMP网络数据包大小的限制,因此您应该转到TCP / IP协议以获得答案。没有SNMP RFC定义最大长度。
我个人认为OCTET STRING是一个字节数组,因此任何字符都可以存储在其中。如果要限制它们,则应在SNMP代理/引擎实现中执行此操作。找到“无效”字符时,您可以返回SNMP错误。详细信息可以在RFC 3416 4.2.1中找到。或RFC 1157,4.1.5。
答案 1 :(得分:3)
OCTET STRING可能包含任何八位字节序列,因此无法保证它们是可打印字符。
许多其他“类型”基于OCTET STRING,通过添加限制。例如,IpAddress只是一个限制为四个字节的OCTET STRING。这在MIB模块中的文本约定定义中定义。 RFC1155-SMI包含IpAddress的定义。
如果您尝试选择变量的类型,例如在设计MIB模块时,您应该尝试尽可能限制,因为这对MIB模块的用户来说更有用。
特别是,如果您知道字符串应该是可打印的,请不要使用OCTET STRING。而是选择SnmpAdminString(几乎用于所有目的)或DisplayString(如果您绝对确定数据将只包含ASCII字符,并且没有扩展字符,如重音符号和非罗马字符)。两者都限制在255个八位字节,这对于大多数网络管理来说是合理的。如果您想传输大量数据,可能是因为您尝试做的事情不是为了方便而设计的。
答案 2 :(得分:-2)
OCTET STRING没有任何大小限制。这里唯一的限制是SNMP使用UDP作为传输协议。所以MTU = 1500。这是你的最大尺寸。
答案 3 :(得分:-2)
唯一的限制是SNMP使用UDP作为传输协议 - 我同意。但是,UDP的MTU是64k。 请参阅https://en.wikipedia.org/wiki/User_Datagram_Protocol。 MTU = 1500用于以太网标准数据包。 因此,在这种情况下,最大大小为64k。