windows系统下SNMP协议获取系统内存、CPU实例代码
系统环境:win10
注:win10及以下windows平台,在控制面板,程序中,添加snmp服务功能。
可参照:https://jingyan.baidu.com/article/3d69c5515e56b3f0cf02d7bf.html
为方便测试snmp协议,先关闭系统防火墙,后续可根据需要进行防护墙配置。
工具资源下载:https://download.csdn.net/download/csdnyang338/72113747
Snmp服务环境配置:
第一步:在系统设置中,搜索“开发者设置”,勾选开发人员模式
第二步:在系统设置中,搜索“应用和功能”,点击“管理可选功能”
第三步:在添加功能中选择snmp协议,点击安装
第四步:在服务中,找到启动snmp服务,右键,选择属性,在“安全”中添加社区名称:public,重启snmp服务。
Java代码:
添加jar包依赖:
<dependency>
<groupId>org.snmp4j</groupId>
<artifactId>snmp4j</artifactId>
<version>2.5.11</version>
</dependency>
测试代码:
package com.example.snmp;
import org.snmp4j.Snmp;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import java.io.IOException;
import java.util.List;
public class SnmpDemoTest {
public static void main(String[] args) {
SNMPTool SnmpTool = new SNMPTool();
//实例化实体snmp类
SnmpBean snmpBean = new SnmpBean();
snmpBean.setLocalIp("127.0.0.1");
snmpBean.setCommunityName("public");
snmpBean.setHostIp("127.0.0.1");
snmpBean.setPort(161);
snmpBean.setVersion(1);
//测试联通性
try {
//是否连接
System.out.println("连接成功:" + SnmpTool.isEthernetConnection(snmpBean));
} catch (IOException e) {
e.printStackTrace();
}
//获取cpu利用率
List<String> result = SnmpTool.walkByTable(".1.3.6.1.2.1.25.3.3.1.2", snmpBean);
double sum = 0;
for (String s : result) {
sum += Double.parseDouble(s);
}
int cpu = (int) (sum / result.size());
System.out.println("cpu利用率:"+cpu+"%");
//get方式获取系统内存
try {
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
String strMemory = SnmpTool.sendRequestGet(snmp,".1.3.6.1.2.1.25.2.2.0",snmpBean);
System.out.println("系统内存:"+Math.ceil(Double.parseDouble(strMemory)/1024/1024)+"G");
} catch (IOException e) {
e.printStackTrace();
}
}
}
实体类:
/*公有实体类*/
public class SnmpBean {
//分区域,即密码,默认是public
private String communityName;
//服务器ip地址
private String hostIp;
//本机ip地址
private String localIp;
//snmp访问端口号
private Integer port;
//版本
private int version;
//是否同步查询
private int async;
//自行添加set、get
}
Snmp测试工具
package com.example.snmp;
import com.sun.jmx.snmp.internal.SnmpModel;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
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;
import org.snmp4j.util.DefaultPDUFactory;
import org.snmp4j.util.TableEvent;
import org.snmp4j.util.TableUtils;
import java.io.IOException;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class SNMPTool {
//获取列表oid数据
public List<String> walkByTable(String oid, SnmpBean snmpBean){
Snmp snmp = null;
PDU pdu;
CommunityTarget target;
List<String> result = new ArrayList<String>();
String communityName = snmpBean.getCommunityName();
String hostIp = snmpBean.getHostIp();
int port = snmpBean.getPort();
int version = snmpBean.getVersion();
try {
DefaultUdpTransportMapping dm = new DefaultUdpTransportMapping();
dm.setSocketTimeout(5000);
snmp = new Snmp(dm);
snmp.listen();
target = new CommunityTarget();
target.setCommunity(new OctetString(communityName));
target.setVersion(version);
target.setAddress(new UdpAddress(hostIp+"/"+port));
target.setTimeout(1000);
target.setRetries(1);
TableUtils tutils = new TableUtils(snmp, new DefaultPDUFactory(PDU.GETBULK));
OID[] columns = new OID[1];
columns[0] = new VariableBinding(new OID(oid)).getOid();
List<TableEvent> list = (List<TableEvent>) tutils.getTable(target, columns, null, null);
for(TableEvent e : list){
VariableBinding[] vb = e.getColumns();
if(null == vb)continue;
result.add(vb[0].getVariable().toString());
}
snmp.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(snmp != null)
{
snmp.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
//发送snmp查询请求
public static String sendRequestGet(Snmp snmp, String oid, SnmpBean snmpBean)
throws IOException {
String str=null;
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(snmpBean.getCommunityName()));
target.setVersion(snmpBean.getVersion());
target.setAddress(new UdpAddress(snmpBean.getHostIp()+"/"+snmpBean.getPort()));
target.setTimeout(5000);
target.setRetries(1);
PDU pdu = new PDU();
pdu.setType(PDU.GET);
pdu.add(new VariableBinding(new OID(oid)));
ResponseEvent responseEvent = snmp.send(pdu, target);
PDU response = responseEvent.getResponse();
if (response == null) {
System.out.println("TimeOut...");//可能原因,1:snmp服务未开启。2:Community未配置
} else {
if (response.getErrorStatus() == PDU.noError) {
Vector<? extends VariableBinding> vbs = response.getVariableBindings();
for (VariableBinding vb : vbs) {
System.out.println(vb + " ," + vb.getVariable().getSyntaxString());
str = vb.getVariable().toString();
}
} else {
System.out.println("Error:" + response.getErrorStatusText());
}
}
return str;
}
//测试网络是否畅通,类似ping
public boolean isEthernetConnection(SnmpBean bean) throws IOException {
InetAddress ad = InetAddress.getByName(bean.getHostIp());
boolean state = ad.isReachable(2000);// 测试是否可以达到该地址 2秒超时
return state;
}
}
windows系统下SNMP协议获取系统内存、CPU实例代码相关推荐
- java 通过snmp协议获取物理机CPU、内存容量及使用率,存储的容量及使用率
java 用snmp协议获取物理机CPU.内存容量及使用率,存储的容量及使用率,java获取trap告警 一.SNMP简介 1.什么是snmp 二.SNMP获取信息步骤 1.开启SNMP 2.MIB文 ...
- 用SNMP协议实现系统监控
系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学.系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容.随着当前企业IT环境中服务器.应用 ...
- wsappx关不掉_win10系统下wsappx.exe进程占用内存大能关闭吗
有不少win10系统用户在查看任务管理器的时候,发现有一个wsappx.exe进程占用内存大,但是又不知道wsappx.exe是什么进程,可以关闭吗?针对这个问题,小编这就给大家讲解一下win10系统 ...
- Xp下的程序编译成linux,Windows XP下硬盘安装Linux系统
作为一个Linux新手,第一次安装Linux系统,经过几个小时摸索,终于搞清楚在Windows XP系统下硬盘安装Linux系统的方法,跟大家共享. 第一步:在Window系统下必须存在两个分区(不妨 ...
- Windows系统下制作原版Mac系统U盘
Windows系统下制作原版Mac系统U盘 U盘功能与Mac下制作的系统毫无差异 该制作方法,不是黑苹果,请悉知 https://download.csdn.net/download/zuoheizh ...
- windows系统下安装虚拟机-mac系统-视频教程
2019独角兽企业重金招聘Python工程师标准>>> windows系统下安装虚拟机-mac系统-视频教程-安装件全套下载:http://dwz.cn/yAAX3 mac os系统 ...
- Windows XP下硬盘安装Linux系统
作为一个Linux新手,第一次安装Linux系统,经过几个小时摸索,终于搞清楚在Windows XP系统下硬盘安装Linux系统的方法,跟大家共享. 第一步:在Window系统下必须存在两个分区(不妨 ...
- 获取系统时间出错oracle-,oracle 获取系统时间(转)
Oracle中如何获取系统当前时间 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ORACLE里获取一个时间的年.季.月.周.日 ...
- java snmp协议 获取数据
最近工作内容涉及到snmp协议相关内容,由于第一次接触,又没有实际的环境测试,写出来的东西自己都不确定能不能用,直到最近有环境后,花了一段时间才搞定. 写下这篇文章,只是给和我之前一样的小白指点一波, ...
最新文章
- C++为什么要学指针?
- python3.6.5安装tensorflow_ubuntu下python3.6.5import tensorflow显示非法指令(核心已转储)
- 科普向,什么是 Lua 语言?
- 彻底搞懂javascript中的match, exec的区别
- ant design pro模板_分享10 个开源免费且优秀的后台管理系统模板
- python画简单图-python绘制简单彩虹图
- 海康威视4G球机对接萤石云平台实现实时预览、云台控制 ----- java完整demo
- 《Unix编程艺术》读书笔记(1)
- 智能手机屏幕尺寸和分辨率一览表
- Python爆破RAR密码
- 【服务器数据恢复】IBM某型号服务器RAID5磁盘阵列数据恢复案例
- 2022年11月编程语言流行度排名
- android 自动下载软件安装程序,手机自动安装软件怎么办
- 【转】ACM比赛经验
- 小游戏如何带动直播平台发展?
- CAAI演讲实录丨李德毅院士:交互认知——从图灵测试的漏洞谈开去
- div内元素不在一行的问题解决方法
- Android开发5年,面试问到底层实现原理,被怼得,程序员中年危机
- 孙玉 计算机教授,孙玉
- 如何使用京东的关键字搜索你想要的商品详情