我现在要做的东西很简单就是做个snmp manager,来查询agent的指定mid代码的设备状态
agent就是windows 的snmp server
比如
内存
1.3.6.1.4.1.311.1.1.3.1.1.1.2.0delphi7里面的idsnmp没有例子啊,不知道怎么用
网上下载的indy demo里面也没有idsnmp的例子

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
            mStr: string;
    begin
            IdSnmp1.QuickSend('1.3.6.1.4.1.311.1.1.3.1.1.1.2.0'
                    ,'public'
                    ,'192.168.1.188'
                    ,mStr);
            ShowMessage(mStr);
    end;
      

  2.   

    不行,是空值我用下面代码就可以
    procedure TForm1.Button1Click(Sender: TObject);
    var
        origOID:string;
        i:integer;
      begin
              IdSNMP1.Community   :=   'public';
              IdSNMP1.Host   :=   '127.0.0.1';
              IdSNMP1.Query.Clear;
              //origOID   :=   '1.3.6.1.2.1.1.1';
              origOID   :=   '1.3.6.1.2.1.1.1';
              IdSNMP1.Query.MIBAdd(origOID,   '');
              IdSNMP1.Query.PDUType   :=   PDUGetNextRequest;
              memo1.clear;
              while   IdSNMP1.SendQuery   do
                  begin
                      if   Copy(IdSNMP1.Reply.MIBOID[0],   1,   Length(origOID))   <>   origOID   then
                          Break;
                      for   I   :=   0   to   IdSNMP1.Reply.ValueCount   -   1   do
                      memo1.Lines.Add(IdSNMP1.Reply.Value[I]);
                      IdSNMP1.Query.Clear;
                      IdSNMP1.Query.MIBAdd(IdSNMP1.Reply.ValueOID[0],   '');
                      IdSNMP1.Query.PDUType   :=   PDUGetNextRequest;
                  end;end;
      

  3.   

    可是我查询你的Mid代码'1.3.6.1.4.1.311.1.1.3.1.1.1.2.0'也是空值,为什么啊?我的snmp agent就是win2000 server的snmp 服务
      

  4.   

    那估计是你的snmp agent有问题吧。
    你查一下这个试试,'1.3.6.1.2.1.1.1.0'
      

  5.   

    呵呵,刚睡醒,咱俩说的是一个oid。
      

  6.   

    奇怪啊
    我用'1.3.6.1.2.1.1.1.0'
    你的方法能取出来,跟我用'1.3.6.1.2.1.1.1'取出来的结果一样但是我的方法取不出来'1.3.6.1.2.1.1.1.0'为什么会这样?难道mib=oib最后位-1吗?
    我实在不懂,能否解释下我就是用的windows自带的snmp server做agent的
      

  7.   

    IdSNMP1.Query.PDUType   :=   PDUGetNextRequest;
    如果改成
    IdSnmp1.Query.PDUType := PDUGetRequest;
    就可以取出来了你那个实际取出来的就是'1.3.6.1.2.1.1.1.0',因为你的代码的意思是取'1.3.6.1.2.1.1.1'的下一个mib。
    用你的代码
    ShowMessage(IdSnmp1.Reply.MIBGet('1.3.6.1.2.1.1.1.0'));可以显示出值来

    ShowMessage(IdSnmp1.Reply.MIBGet('1.3.6.1.2.1.1.1'));显示的是空值
      

  8.   

    IdSnmp比较烂了,尤其在trap的时候,根本没发现能监听过还是用原生api函数吧http://borland.mblogger.cn/jinjazz/posts/18391.aspx
      

  9.   

    http://borland.mblogger.cn/jinjazz/posts/18391.aspx
    这个我用过,结果跟idsnmp一样的trap我都不懂是什么
    现在能取到部分mib的信息
    但是系统cpu,mem之类的,好像标准mib库没有
    查找网上资料
    给SNMP服务打补丁 
     这里说的补丁可不是微软的那些让人头疼的补丁,而是一个转为Windows2000的SNMP服务开发的增强工具,叫SNMP4W2K-STD,可以在http://www.wtcs.org/snmp4tpc/snmp4w2k.htm下载。 
     下载完成后,安装。安装完毕,进入CMD,(注意:进入CMD之前要把CMD的纵缓冲区设置为大于500的数值,否则会因为纵缓冲区不足而引起错误)执行: 
    引用:C:\Program Files\SNMP4W2K-STD\MIBINST.BAT根据提示进行选择,不过通常只要一路y就可以完成,最后程序会自动重新启动Windows2000的SNMP服务。这样,就成功的给SNMP服务打上了补丁。 3、获取CPU的MIB码: 
    代码:.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48 
    可是我安装了patch,取1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48 ,还是空值请问该怎么取cpu跟mem之类的信息?