上篇文章我们对SNMP有了一个初步上的认识,这篇文章便准备用开源工具包snmp4j来编程实现一些SNMP的功能。
1.下载
首先到官网下载最新的snmp4j 2.2.5
http://www.snmp4j.org/html/download.html
2.一个比较好的起步点是阅读官方的
javadoc,里面有比较详细的说明和示例代码,可以从org.snmp4j包看起。
一个远程系统是通过创建一个Target实例来被snmp4j识别的。
SNMPv1和SNMPv2c必须使用CommunityTarget,SNMPv3则要使用UserTarget。
一条SNMP消息包括消息的载荷,PDU和消息头。简单来说,消息头用Target表示,而PDU则用以下类来表示:
PDUv1 (SNMPv1)
PDU (SNMPv2c)
ScopedPDU (SNMPv3)
消息发送有2种方式:同步和异步。
异步方式需要实现ResponseListener接口,当消息返回时,这个接口的onResponse(ResponseEvent event)方法会被回调。
3.代码
以下代码演示了同步和异步2种方式获取SNMP消息。
本机是Win7的,自带的SNMP协议是v2版的。(Win7不支持v3)
以下是一些OID的解释
1.3.6.1.2.1.1.1 获取CPU和OS信息
1.3.6.1.2.1.2.1.0 网络接口信息描述
1.3.6.1.2.1.25.6.3.1.2 获取安装的软件信息
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SnmpTest {
public static void main(String[] args) throws Exception {
Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
TransportMapping<UdpAddress> transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
transport.listen();
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(15000);
target.setVersion(SnmpConstants.version1);
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1"))); // sysDescr
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.25.6.3.1.2"))); // Software
pdu.setType(PDU.GETNEXT);
//发送同步消息
ResponseEvent event = snmp.send(pdu, target);
if (event.getResponse() == null) {
System.out.println("request timed out");
} else {
PDU response = event.getResponse();
System.out.println("Received synchronous response from: " + event.getPeerAddress());
// dump response PDU
System.out.println(response.toString());
//遍历并打印得到的信息
VariableBinding[] array = response.toArray();
for (VariableBinding variableBinding : array) {
System.out.println(variableBinding.getOid() + "=" + variableBinding.getVariable());
//如果是文字,则取得字节数组并打印出人看得懂的中文
if (variableBinding.getVariable() instanceof OctetString) {
OctetString octetString = (OctetString)variableBinding.getVariable();
byte[] value = octetString.getValue();
String softwareName = new String(value, "GB2312");
System.out.println(softwareName);
}
}
}
System.out.println();
//发送异步消息
ResponseListener listener = new ResponseListener() {
public void onResponse(ResponseEvent event) {
// Always cancel async request when response has been received
// otherwise a memory leak is created! Not canceling a request
// immediately can be useful when sending a request to a broadcast
// address.
((Snmp)event.getSource()).cancel(event.getRequest(), this);
PDU response = event.getResponse();
PDU request = event.getRequest();
if (response == null) {
System.out.println("Request "+request+" timed out");
}
else {
System.out.println("Received asynchronous response from: " + event.getPeerAddress());
System.out.println(response + " on request " + request);
}
}
};
snmp.send(pdu, target, null, listener);
//等待一会儿,不然还没等异步消息接收到,这里程序就直接退出了。
Thread.sleep(1000);
}
}
4.运行结果
Received synchronous response from: 127.0.0.1/161
RESPONSE[requestID=1131489612, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.1.0 = Hardware: x86 Family 6 Model 42 Stepping 7 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocessor Free); 1.3.6.1.2.1.2.1.0 = 31; 1.3.6.1.2.1.25.6.3.1.2.1 = 57:69:6e:64:6f:77:73:20:c7:fd:b6:af:b3:cc:d0:f2:b0:fc:20:2d:20:47:6f:6f:67:6c:65:2c:20:49:6e:63:2e:20:28:57:69:6e:55:53:42:29:20:41:6e:64:72:6f:69:64:55:73:62:44:65:76:69:63:65:43:6c:61:73:73]]
1.3.6.1.2.1.1.1.0=Hardware: x86 Family 6 Model 42 Stepping 7 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocessor Free)
Hardware: x86 Family 6 Model 42 Stepping 7 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocessor Free)
1.3.6.1.2.1.2.1.0=31
1.3.6.1.2.1.25.6.3.1.2.1=57:69:6e:64:6f:77:73:20:c7:fd:b6:af:b3:cc:d0:f2:b0:fc:20:2d:20:47:6f:6f:67:6c:65:2c:20:49:6e:63:2e:20:28:57:69:6e:55:53:42:29:20:41:6e:64:72:6f:69:64:55:73:62:44:65:76:69:63:65:43:6c:61:73:73
Windows 驱动程序包 - Google, Inc. (WinUSB) AndroidUsbDeviceClass
Received asynchronous response from: 127.0.0.1/161
RESPONSE[requestID=1131489612, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.1.0 = Hardware: x86 Family 6 Model 42 Stepping 7 AT/AT COMPATIBLE - Software: Windows Version 6.1 (Build 7601 Multiprocessor Free); 1.3.6.1.2.1.2.1.0 = 31; 1.3.6.1.2.1.25.6.3.1.2.1 = 57:69:6e:64:6f:77:73:20:c7:fd:b6:af:b3:cc:d0:f2:b0:fc:20:2d:20:47:6f:6f:67:6c:65:2c:20:49:6e:63:2e:20:28:57:69:6e:55:53:42:29:20:41:6e:64:72:6f:69:64:55:73:62:44:65:76:69:63:65:43:6c:61:73:73]] on request GETNEXT[requestID=1131489612, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.2.1.1.1 = Null; 1.3.6.1.2.1.2.1 = Null; 1.3.6.1.2.1.25.6.3.1.2 = Null]]
5.snmp4j 和 snmp4j-agent
snmp4j可以获取被管节点信息
snmp4j-agent则是写agent端的代理程序的,我们可以自定义一个软件,写一个agent,这样就能被网管软件统一管理了。
另外jdk自带的JMX包也有snmp协议的实现,不过snmp4j可能更方便点。
6.参考资料
使用snmp4j实现Snmp功能
http://blog.csdn.net/clearwater21cn/article/details/2328047 一共3篇
分享到:
相关推荐
4. **日志记录与错误处理**:为了追踪系统运行状况和问题定位,良好的日志记录和错误处理机制是必需的,这可能涉及到log4j(Java)、logging(Python)或其他日志框架。 5. **数据存储与数据库操作**:监控数据可能...
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
内容概要:本文详细探讨了大语言模型(LLMs)在教育应用中遇到的知识冲突问题,包括概念定义、事实陈述和逻辑推理层面的认知不一致性。文章分析了知识冲突的技术成因,如训练数据噪声、参数化知识表示的局限、推理机制的缺陷、模型架构的不足及外部知识的偏差,并探讨了这些因素对教育应用的深远影响。文中提出了多维度的解决路径,如通过数据增强优化知识表示、利用提示强化上下文连贯、开发量规完善模型评估等。此外,文章从社会文化的宏观视角剖析了知识冲突的外部驱动因素,探讨如何在多元异质、动态演进的社会建构语境中构建开放进取、兼容融通的智能教育应用体系。 适合人群:从事教育技术研究的学者、教育工作者、人工智能研究人员和技术开发者。 使用场景及目标:①帮助教育工作者理解大语言模型在教育应用中的局限性;②为技术人员提供优化大语言模型教育应用的具体策略;③促进教育人工智能技术的可靠性、适应性和普及性提升。 其他说明:文章强调了知识冲突的有效化解不仅能够提升大语言模型在教育场景中的应用价值,还将为人工智能在更广泛领域的可持续发展奠定坚实基础。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
数据结构day1-思维导图顺序表
STM32超声波红外避障小车项目通过STM32微控制器实现自动避障功能。硬件部分主要包括STM32开发板、超声波传感器、红外传感器、直流电机、电池模块和电机驱动模块。超声波传感器用于测量前方障碍物的距离,红外传感器帮助小车检测地面线路或障碍物。电机驱动模块通过STM32控制直流电机的转动,从而实现小车的前进、后退和转向。 在软件方面,STM32通过编写简单的避障算法,实时读取传感器数据,并根据环境信息控制小车的运动。当超声波传感器检测到障碍物时,系统会触发后退或转向操作,避免碰撞。
哈尔滨工业大学DeepSeek公开课-从图灵测试到DeepSeek.pdf
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
app开发
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
Screenshot_2025-03-31-19-36-01-657_com.UCMobile.jpg
半导体过程控制篇 集成电路的可靠性仿真_03_31_153111.docx
社交应用_鸿蒙OS_API12_高仿微信APP_开发示例_1742847098.zip
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
app开发
2024 最新版智慧消防全流程解决方案(含 BIM+IoT 技术应用 + 典型案例分析)
电商_微信小程序_学习项目_电商功能演示_1742849441.zip
jiguang.zip