【发布时间】:2019-07-08 21:27:59
【问题描述】:
当我使用 snmp-walk 或 snmp-get 等工具查询返回类型为 MacAddress 的 OID 时,它总是将数据解析为 HexString 并正确显示。即使他们没有加载 MIB,它仍然可以工作。
bash#snmpwalk -v 2c -c public 10.1.2.3 1.3.6.1.4.1.14179.2.2.1.1
SNMPv2-SMI::enterprises.14179.2.2.1.1.1.16.189.24.206.212.64 = Hex-STRING: 10 BD 18 CE D4 40
SNMPv2-SMI::enterprises.14179.2.2.1.1.1.100.233.80.151.114.192 = Hex-STRING: 64 E9 50 97 72 C0
但是,我似乎无法从 Lextm.SharpSnmpLib (11.2.0) 获得相同的结果。 MacAddress 的数据类型无法正确解码,将其转换为正确的 MAC 是一个手动过程。
public void WalkTable()
{
const string baseOid = "1.3.6.1.4.1.14179.2.2.1.1"; //The entire table
const string community = "public";
var ep = new IPEndPoint(IPAddress.Parse("10.1.2.3"), 161);
var results = new List<Variable>();
Messenger.Walk(VersionCode.V2, ep, new OctetString(community), new ObjectIdentifier(baseOid), results, 60000, WalkMode.WithinSubtree);
foreach(var v in results)
Console.WriteLine(v.Data.ToString());
}
是我做错了什么还是图书馆的工作方式如此?
【问题讨论】:
-
“即使他们没有加载 MIB,它仍然可以工作”不是真的。 NET-SNMP 附带一些 MIB 文档,net-snmp.sourceforge.net/wiki/index.php/…
-
我已经更新了我的帖子以包含来自 snmp-walk 的结果。是的,net-snmp 确实包含一组基本 MIB,但它没有用于相关 OID 的 MIB。由于在 SNMPv2-TC(已加载)中定义了“MacAddress”,这就是为什么 snmp-walk 正确解码它的原因?我不知道在 get-response 数据包中传回的数据类型,我认为它需要 MIB 知道。
-
OCTET STRING 类型被传回。显示此 OCTET STRING 的应用程序,在没有 TC 的情况下,通常有规则是否以 ASCII 或 Hex 显示,例如。如果都是 ASCII,则以 ASCII 显示,否则以十六进制显示。也许 snmpwalk 也有?
标签: sharp-snmp