snmpagent源码(snmp源码分析)
本文目录一览:
- 1、怎么实现私有trap,怎么关闭snmp agent服务?求解,求高手
- 2、请具体介绍一下 SNMP4J-Agent ,SNMP4J,SNMP4J-AgentX
- 3、怎么利用snmp4j-agent在PC端模拟snmp服务
- 4、200分求解:dom4j 使用XPATH解析。。诡异的问题
- 5、如何利用snmp4j-agent在PC端模拟snmp服务的相关文章推荐
怎么实现私有trap,怎么关闭snmp agent服务?求解,求高手
发送trapsnmpagent源码你可以参照一下net-snmp给你的例子snmpagent源码,源码文件中 net-snmp-5.6.1.1\agent\mibgroup\examples\notification.cnotification.c 你的做法和给出的例子几乎一致,看一下就好了。 当然发送trap你也可以参照一下snmptrap.c这个文件,调用net-snmp接口自己组建session 组建pdu发送trap。 ------解决方案-------------------------------------------------------- 函数snmp_alarm_register(30, /* seconds */ SA_REPEAT, /* repeat (every 30 seconds). */ send_trap, /* our callback 定时器触发调用的函数*/ NULL /* no callback data needed 回调函数的返回值*/
请具体介绍一下 SNMP4J-Agent ,SNMP4J,SNMP4J-AgentX
SNMP4J是用于java开发网管系统,通过SNMP协议访问设备的。
SNMP4J-Agent是用于开发SNMP Agent程序的,是别人通过SNMP协议来访问你的Agent,你的Agent为别人提供数据,另外,这个API的License是Apachae 2.0,所以可以免费使用且不用公开源码。
SNMP4J-AgentX跟SNMP4J-Agent的区别就在于License是GPL,需要购买Commercial License或是公开源码。
详情请看两种License官方文档。
怎么利用snmp4j-agent在PC端模拟snmp服务
CISCO做snmpagent源码的还是挺规范的snmpagent源码,可以直接用MIB文件读取(在我们实验室至少可以通过)。还有就是人家应该提供了SNMP专用的工具包snmpagent源码,可以打开MY文件。如果还不行的话,可以自己编写一个SNMP获取工具(我们用的是SNMP4J),可以向目标设备161端口发UDP数据包,通过OID值获取。
200分求解:dom4j 使用XPATH解析。。诡异的问题
snmpagent源码我也遇到同样snmpagent源码的问题,现在也没找到为什么!
snmpagent源码我的状况是这样的:
xml文件为 kpi.xml,如下
?xml version="1.0" encoding="UTF-8"?
xmlconfig
kpi id="1" name="CPU占用"
coltype name="SNMP" support="true"
snmpagentpublic|netcool/snmpagent
snmpruleid0/snmpruleid
/kpi
kpi id="2" name="XXX占用"
coltype name="SM" support="false"
snmpagentpublic|netcool/snmpagent
snmpruleid0/snmpruleid
/kpi
/xmlconfig
main函数里面方法如下:
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public static void main(String args[]) {
String file = "d://kpi.xml";
int n = ModiXMLFile(file);
}
public static void ModiXMLFile(String filename) {
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
int m = 0 ;
//得到kpi id的最大值
List list = document.selectNode("/xmlconfig/kpi");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Element bookElement = (Element) iter.next();
if(!(bookElement.attributeValue("id")==null || bookElement.attributeValue("id").equalsIgnoreCase(""))){
int num = Integer.parseInt(bookElement.attributeValue("id"));
if(num=m){
m= num;
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
运行能得到 kpi id的最大值是多少
但换个系统,在真正到公司的软机的系统上,就报
org.dom4j.InvalidXPathException: Invalid XPath expression: '/xmlconfig/kpi'. Caused by: org/jaxen/dom4j/Dom4jXPath
网上查snmpagent源码了很久资料也没搞明白,有说是jdk版本的原因,有说是加载的dom4j包不一样,但都不对.
实在没办法snmpagent源码了,用了个变通的办法,直接
用
Element root = document.getRootElement();
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element kpi = (Element) i.next();
if(!(kpi.attributeValue("id")==null || kpi.attributeValue("id").equalsIgnoreCase(""))){
int num = Integer.parseInt(kpi.attributeValue("id"));
if(num=m){
m= num;
}
}
}
不再通过 Xpath .
希望能和贴主人一起探讨一下,这个问题的真正原因,随时关注此提问!
如何利用snmp4j-agent在PC端模拟snmp服务的相关文章推荐
如何利用snmp4j-agent在PC端模拟snmp服务
? ? 想在PC端起一个snmp模拟器,在网上搜了一段时间,例子也不算少,但一般都有些问题,可能是自己某个地方出错了。
? ? 索性直接从源码snmpagent源码的example开始,看了几天snmp4j-agent源码后,虽然啥也没看懂,但还是被我找到了一些突破口。
? ? 直接将org.snmp4j.agent.example下snmpagent源码的例子复制出来,然后修改即可。这几天刚写好的例子,也懒得作修饰了。
1. 将源码中的SampleAgentConfig.properties(org.snmp4j.agent.example下)复制出来。
2. 建立如图的包层次结构
? ? ? ? ??
3. 代码明细
?
SysDate.java
package celul.snmpSeverTest.scalar;import org.snmp4j.agent.mo.MOAccessImpl;import org.snmp4j.agent.mo.MOScalar;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;public class SysDate extends MOScalarOctetString {public SysDate() {super(new OID("1.3.6.1.4.1.12321.1.1.1.2.0"), MOAccessImpl.ACCESS_READ_ONLY, new OctetString("com"));}@Overridepublic OctetString getValue() {return new OctetString("com");}}
?SysInitDevice.java
package celul.snmpSeverTest.scalar;import org.snmp4j.agent.mo.MOAccessImpl;import org.snmp4j.agent.mo.MOScalar;import org.snmp4j.smi.Integer32;import org.snmp4j.smi.OID;public class SysInitDevice extends MOScalarInteger32 {public SysInitDevice() {super(new OID("1.3.6.1.4.1.12321.1.1.1.3.0"), MOAccessImpl.ACCESS_READ_WRITE, new Integer32(3));}@Overridepublic Integer32 getValue() {return super.getValue();}@Overridepublic int setValue(Integer32 value) {return super.setValue(value);}}
?SysInitParams.java与SysTimeUp.java不再赘述。
?
?
MoTableUtil.java
?
package celul.snmpSeverTest.table;import org.snmp4j.agent.MOAccess;import org.snmp4j.agent.mo.DefaultMOMutableTableModel;import org.snmp4j.agent.mo.DefaultMOTable;import org.snmp4j.agent.mo.DefaultMOTableRow;import org.snmp4j.agent.mo.MOAccessImpl;import org.snmp4j.agent.mo.MOColumn;import org.snmp4j.agent.mo.MOMutableColumn;import org.snmp4j.agent.mo.MOTableIndex;import org.snmp4j.agent.mo.MOTableSubIndex;import org.snmp4j.agent.mo.snmp.RowStatus;import org.snmp4j.smi.Integer32;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;import org.snmp4j.smi.SMIConstants;import org.snmp4j.smi.Variable;import celul.snmpSeverTest.Constant;public class MoTableUtil{@SuppressWarnings("rawtypes")private static DefaultMOTable emuTable;private static final String emuTableEntryOid = "1.3.6.1.4.1.19547.1.6.1.1.1";private static final Object[][] columnEmuDefined = {{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 10, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };@SuppressWarnings("rawtypes")private static DefaultMOTable edfaTable;private static final String edfaTableEntryOid = "1.3.6.1.4.1.19547.1.6.1.2.1";private static final Object[][] columnEdfaDefined = {{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 10, "10", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },{ 11, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };//private static DefaultMOTable defaTable;@SuppressWarnings("rawtypes")public static DefaultMOTable getEmuTable(){if(emuTable == null){initEmuTable();}return emuTable;}@SuppressWarnings("rawtypes")public static DefaultMOTable getEdfaTable(){if(edfaTable == null){initEdfaTable();}return edfaTable;}@SuppressWarnings({ "rawtypes", "unchecked"