救助!delpi中用IDSNMP控件查询OID值,没能得到正确结果!

xiejifa 2008-02-22 04:49:33
代码如下:
begin
SNMP.Community := Community.Text;
SNMP.Host := IPaddress.Text;
SNMP.Query.Clear;
origOID := '1.3.6.1.2.1.1.1.0';
SNMP.Query.MIBAdd(origOID, '');
SNMP.Query.PDUType := PDUGetRequest;
while SNMP.SendQuery do
begin
for I := 0 to SNMP.Reply.ValueCount - 1 do
memo1.Lines.Add(SNMP.Reply.Value[I]);
SNMP.Query.Clear;
SNMP.Query.MIBAdd(SNMP.Reply.ValueOID[0], '');
SNMP.Query.PDUType := PDUGetNextRequest;

end;
end;
以上代码以实现查询,但有些结果不正确,例如设备总运行时间,只是显示形如"24825"这样的一串数字,但我用其它MIB浏览器除了能看到这串数字外,还能看到运行小时,分,秒等内容;还有查询设备MAC地址时,内容为空,用其它MIB浏览器查看时内容是分两行显示,第一行内容为空,第二行内容才是MAC地址,不知如何修改控件代码才能正确读取到OID-VALUE值的第二行内容呢?按照我的观察,以上问题都是程序只读取的是VALUE值的第一行内容,没有读取第二行内容而造成的,还有如果我想读取OID的描述,还有OID的对像名称(不是OID的值)该如何实现呢?希望各位高手给我帮助!xiejifa@163.com,或者直接回复,谢谢!
...全文
181 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
UltraBejing 2008-05-01
有点难度哦
回复
lextm 2008-02-25
一般查出来都是表格,现在的机器很少只有一个了。先get一下1.3.6.1.2.1.2.2.0的值,看看设备有几个MAC,然后

1.3.6.1.2.1.2.2.1.6.1是第一个卡的MAC
1.3.6.1.2.1.2.2.1.6.2是第二个卡的MAC

依此类推。

空值的那个是给127.0.0.×用的,是个虚拟的网卡,所以你拿到空值是正常的。其他的查出来的值都是字符串呀,没必要转换吧。

如果取不到值,应该是SNMP无返回或者异常,只要有返回就是读到了。
回复
xiejifa 2008-02-25
LELE所言极是!小弟是初学DELPHI,对SNMP协议也还不太了解,但我还有一个问题就是,如何用表查询的方式来查询MAC地址呀?曾经在论坛上有人说过也是用上面代码取MAC地址,还要加一段转换才能正确输出MAC格式地址,但不知在哪里加?而且我现在的问题是MAC提取出来的空值,又跟别人的不一样,该怎样跟踪MAC的取值呢(不知是否取到了值)?问些这么简单的问题,大家别见笑!
回复
lextm 2008-02-25
你这个的确我不清楚,似乎和我的机器差别很大呢,呵呵。MIB Browser可以取得整个表格的,你看看这个表有没有什么蹊跷的规律吧。

详细的东西其实都应该看SNMP入门的书,那上面对于SNMP的基本操作介绍的很多。像查表这样的就是基本操作。
回复
xiejifa 2008-02-25
查询1.3.6.1.2.1.2.2.0及1.3.6.1.2.1.2.2.1.6.2没反应,查询1.3.6.1.2.1.2.2.1.6.1及1.3.6.1.2.1.2.2.1.6.3均返回空值,不知为何?用MIB Browser能查询到1.3.6.1.2.1.2.2.1.6.3的值,查看详细属性,显示如下:
MIB IF-MIB
Name ifPhysAddress.3

iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifPhysAddress.3

OID 1.3.6.1.2.1.2.2.1.6.3
Type PhysAddress
Units
Access read-only
Status mandatory
Value
0016.D39D.777D


The interface's address at its protocol sub-layer.
The interface's media-specific MIB must define the bit
and byte ordering and format of the value contained by
this object. For interfaces which do not have such an
address (e.g. , a serial line) , this object should
contain an octet string of zero length.
---------
上面显示的VALUE的第一行的值是空的,第二行才有值.是以上代码有误吗?LELE大侠能给段代码我吗?非常感谢!我是把自己的电脑开启了SNMP协议,当作设备来查询的,操作系统XP.
回复
lextm 2008-02-22
老实告诉你,查到的实际数据就是这个数字,这才是基本类型。至于MIB Browser看到的,都是处理后的结果。你处理一下24825也可以变成小时分钟形式。

至于MAC地址那是一张表,需要用表查询的方式,和标量查询不一样,所以建议你仔细研究SNMP,拜托。

如果是要从OID翻译到文字名,那需要自己解析MIB文件做翻译,或者使用NetSNMP现成的工具,都很麻烦,因为对于基于SNMP的管理软件来说,名字一点也不重要,所有操作都可以用OID做。

综上所述,主要是你的SNMP知识储备太少,而不是Indy有问题。我仔细的看过Indy的这个单元,可以说和那些动辄上万块收费软件的功能几乎一样,所以用好了真是很好很强大哟。
回复
相关推荐
发帖
网络通信/分布式开发
创建于2007-08-02

1573

社区成员

Delphi 网络通信/分布式开发
申请成为版主
帖子事件
创建了帖子
2008-02-22 04:49
社区公告
暂无公告