一个有关snmp4j开源包的问题!!!急!!!小女子先谢过了!!!!在线等待

时间:2022-07-11 16:58:15
我想将一些文本内容发送到snmp管理基站上,在网上看到说是可以用snmp4j包,所以我就下载了一个,但是这个开源包的例子太少了,也不完全,现在写了一个test,却发现有错误,但是我用捉包软件看了,有发送一个snmp的包,且不知,要怎么将我想发送的文本内容放置到PDU里,请各位大侠多多帮忙!!!


      Address targetAddress = GenericAddress.parse("udp:192.168.14.165/161");
      PDUv1 pdu = new PDUv1();
      pdu.setType(PDU.V1TRAP);
      pdu.setGenericTrap(PDUv1.COLDSTART);
      
      pdu.add(new VariableBinding(SnmpConstants.sysUpTime,new TimeTicks(sysUpTime)));
      pdu.add(new VariableBinding(SnmpConstants.sysDescr));
      pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,SnmpConstants.linkDown));

      CommunityTarget target = new CommunityTarget();
      target.setCommunity(new OctetString("yangru"));
      target.setAddress(targetAddress);
      target.setVersion(SnmpConstants.version1);

      DefaultUdpTransportMapping udpTransportMap=new DefaultUdpTransportMapping();
      Snmp snmp = new Snmp(udpTransportMap);
      System.out.println("----------snmp.send start----------");
      ResponseEvent response = snmp.send(pdu, target);
      System.out.println("----------snmp.send end----------");
      //会出错的一行
      if (response.getResponse() == null) {
        // request timed out
      }
      else {
        System.out.println("Received response from: " +
                           response.getPeerAddress());
        // dump response PDU
        System.out.println(response.getResponse().toString());
      }

以上是我的代码,出错信息是在if (response.getResponse() == null) ,好象没有回应,不知道如何解释,且如何把我想要的发送的文本内容设置成PDU!!!

13 个解决方案

#1


都没有人用过snmp4j这个组件吗?

#2



ResponseEvent response = snmp.send(pdu, target);
可以看出,
内容不是放在pdu就是target对象中

你可以查一下PDUv1、CommunityTarget 类中有没有相关的方法。

#3


有没有具体的例子?就是简单的一个将文本内容发给snmp服务器!!!谢谢!!!!

100分相送啊!!!
http://community.csdn.net/Expert/topic/4319/4319389.xml?temp=.7871057
这个是在另一个地方的同样的问题!!!!

#4


我来看看,不过我还没有用过snmp4j,以前一直用得是snmp stack

#5


程序没问题啊,可以成功发送出Trap PDU,因为你这个是一个TRAP PDU,所以是没有响应值的,所以Response是null,也就不能执行getResponse()方法,出现空指针错误,Trap发出去之后是不期响应的,不是Get Request PDU,发出去之后,期望Agent,回送一个Get Response过来

如果你希望发送自己的字符串只要,在你的PDU中这样处理
pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("You System Description")));

后面的值是一个Variable,是一种合法的ASN类型

不知道你在哪,怎么小女子也做起这些事情来了

#6


听君一席话,胜读十年书啊!!!太谢谢 kypfos(不在寻梦) !!!!
初学snmp,有很多东西都不明白!想向你请教.
如何知道这个发送的消息已经成功发送到snmp的服务器去了呢?现在我是用一个捉包的工具Ethereal来看的,虽然能看到发送出去两个包snmp的包,但是却没有看到是发送出去的内容You System Description.
还有trap和get request PDU有什么区别?
真不好意思,让你见笑了,没办法,生活所逼啊!!!:P

#7


建议你买一本SNMP协议的书看看,一般介绍tcp/ip议的书籍也都有讲到snmp应用协议,v1版有5种PDU,v2版加入了两促PDU,v3版引入安全机制,安全性处理复杂得多

另外建议你用一个比Ethereal更好的工具,Ethereal界面太丑啦,忘记叫什么名字了,非常类似于Ethereal的功能,但是界面要友好,支持协议也多了

不过你要在Linux用监听工具就用Ethereal好了

我用包监听工具完整的看到了三个OID及对应的值都发送出去了

你可以安装windows组件的snmp代理,来测试其他PDU的构成

#8


是Packetyzer,玩转snmp还需要一些其他的工具测试,比照理解

#9


谢谢!我去网上找了TCP-IP详解这本书,看了里面对snmp的介绍,但是它对trap的介绍比较少,我现在想知道如果我想用trap来发送一个比较大的文本内容,它对发送的内容长度是否有限制,且不是说udp协议掉包的现象很普遍,那么当发送一个大的文本内容的话,如何保证它的完整性呢?

#10


包的大小好像是1300字节以下,相信这些字节已经够你发送信息了,一般一个trap只会上报几个简单的信息,snmp的Trap是以ascii明文的形式发送数据,像ipmi应用trap只需发送几个字节就能表示比较详细的信息

udp在局域网内掉包其实很少见的

#11


真是太谢谢你了!!!!帮我解决了一个大难题!!!
不知你有msn吗?可以加我吗?yyzzhy_hy@hotmail.com,希望以后还有机会能向你请教问题!

#12


我给你回过CSDN信息啊,你查看一下,很早以前的

#13


谢谢!

#1


都没有人用过snmp4j这个组件吗?

#2



ResponseEvent response = snmp.send(pdu, target);
可以看出,
内容不是放在pdu就是target对象中

你可以查一下PDUv1、CommunityTarget 类中有没有相关的方法。

#3


有没有具体的例子?就是简单的一个将文本内容发给snmp服务器!!!谢谢!!!!

100分相送啊!!!
http://community.csdn.net/Expert/topic/4319/4319389.xml?temp=.7871057
这个是在另一个地方的同样的问题!!!!

#4


我来看看,不过我还没有用过snmp4j,以前一直用得是snmp stack

#5


程序没问题啊,可以成功发送出Trap PDU,因为你这个是一个TRAP PDU,所以是没有响应值的,所以Response是null,也就不能执行getResponse()方法,出现空指针错误,Trap发出去之后是不期响应的,不是Get Request PDU,发出去之后,期望Agent,回送一个Get Response过来

如果你希望发送自己的字符串只要,在你的PDU中这样处理
pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("You System Description")));

后面的值是一个Variable,是一种合法的ASN类型

不知道你在哪,怎么小女子也做起这些事情来了

#6


听君一席话,胜读十年书啊!!!太谢谢 kypfos(不在寻梦) !!!!
初学snmp,有很多东西都不明白!想向你请教.
如何知道这个发送的消息已经成功发送到snmp的服务器去了呢?现在我是用一个捉包的工具Ethereal来看的,虽然能看到发送出去两个包snmp的包,但是却没有看到是发送出去的内容You System Description.
还有trap和get request PDU有什么区别?
真不好意思,让你见笑了,没办法,生活所逼啊!!!:P

#7


建议你买一本SNMP协议的书看看,一般介绍tcp/ip议的书籍也都有讲到snmp应用协议,v1版有5种PDU,v2版加入了两促PDU,v3版引入安全机制,安全性处理复杂得多

另外建议你用一个比Ethereal更好的工具,Ethereal界面太丑啦,忘记叫什么名字了,非常类似于Ethereal的功能,但是界面要友好,支持协议也多了

不过你要在Linux用监听工具就用Ethereal好了

我用包监听工具完整的看到了三个OID及对应的值都发送出去了

你可以安装windows组件的snmp代理,来测试其他PDU的构成

#8


是Packetyzer,玩转snmp还需要一些其他的工具测试,比照理解

#9


谢谢!我去网上找了TCP-IP详解这本书,看了里面对snmp的介绍,但是它对trap的介绍比较少,我现在想知道如果我想用trap来发送一个比较大的文本内容,它对发送的内容长度是否有限制,且不是说udp协议掉包的现象很普遍,那么当发送一个大的文本内容的话,如何保证它的完整性呢?

#10


包的大小好像是1300字节以下,相信这些字节已经够你发送信息了,一般一个trap只会上报几个简单的信息,snmp的Trap是以ascii明文的形式发送数据,像ipmi应用trap只需发送几个字节就能表示比较详细的信息

udp在局域网内掉包其实很少见的

#11


真是太谢谢你了!!!!帮我解决了一个大难题!!!
不知你有msn吗?可以加我吗?yyzzhy_hy@hotmail.com,希望以后还有机会能向你请教问题!

#12


我给你回过CSDN信息啊,你查看一下,很早以前的

#13


谢谢!