java snmp协议_snmp属于哪一层协议

java snmp协议_snmp属于哪一层协议背景控制华为交换机的poe供电与断电来重启PADsnmp协议使用importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;importjava.util.Vector;importlombok.extern.slf4j.Slf4j;importorg.snmp4j.CommunityTarget;importorg.snmp4j.PDU;importorg.snmp4j.Snmp;

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

背景

  • 控制华为交换机的poe供电与断电来重启PAD

snmp协议使用

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import lombok.extern.slf4j.Slf4j;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
/** * * @description 华为交换机工具类 */
@Slf4j
public class HuaWeiSwitchesSnmpConnection { 

private static final String USERNAME = "tuantimingcheng";
private static final int DEFAULT_VERSION = SnmpConstants.version2c;
private static final String DEFAULT_PROTOCOL = "udp";
private static final int DEFAULT_PORT = 161;
private static final long DEFAULT_TIMEOUT = 3 * 1000L;
private static final int DEFAULT_RETRY = 3;
/** * 根据ip 和 团体名称创建 团体Target * @param ip * @param community * @return */
private static CommunityTarget createTarget(String ip, String community) { 

Address targetAddress = GenericAddress.parse(DEFAULT_PROTOCOL + ":" + ip + "/" + DEFAULT_PORT);
CommunityTarget target = new CommunityTarget(targetAddress, new OctetString(community));
target.setVersion(DEFAULT_VERSION);
target.setTimeout(DEFAULT_TIMEOUT);
target.setRetries(DEFAULT_RETRY);
return target;
}
/** * 获取对应ip下交换机oid的状态 * * @param ip * @param oid * @return */
public static int getStatus(String ip, String oid) { 

int status = 0;
CommunityTarget target = createTarget(ip, USERNAME);
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(oid)));
pdu.setType(PDU.GET);
try { 

Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
ResponseEvent respEvent = snmp.send(pdu, target);
if (respEvent != null && respEvent.getResponse() != null) { 

status = respEvent.getResponse().get(0).getVariable().toInt();
} else { 

// TODO 此处异常状态,需要log
log.error(
"SNMP getStatus request time out, Response is null. [ip = " + ip + ", community = "
+ SnmpDevice.PDU_READ_USER + "]");
}
snmp.close();
} catch (IOException e) { 

e.printStackTrace();
// TODO 此处异常状态,需要log[exception];
log.error("SNMP getStatus Exception:" + e);
}
return status;
}
/* 查询ip下oid对应的端口集合 */
public static List<String> getOidAndPortList(String ip, String oid) { 

CommunityTarget target = createTarget(ip, USERNAME);
PDU pdu = new PDU();
List<String> oidAndVariableList = new ArrayList<>();
String currentOid = oid;
Vector<VariableBinding> recVBs;
try { 

Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
while (true) { 

pdu.add(new VariableBinding(new OID(currentOid)));
pdu.setType(PDU.GETNEXT);
ResponseEvent respEvent = snmp.send(pdu, target);
if (respEvent != null && respEvent.getResponse() != null) { 

recVBs = (Vector<VariableBinding>) respEvent.getResponse()
.getVariableBindings();
VariableBinding variableBinding = recVBs.get(recVBs.size() - 1);
currentOid = variableBinding.getOid().toString();
if (!oid.equals(currentOid
.substring(0, currentOid.lastIndexOf(".")))) { 

break;
}
}
}
for (int i = 0; i < recVBs.size(); i++) { 

if (i != recVBs.size() - 1) { 

oidAndVariableList.add(recVBs.get(i).getOid() + "," + recVBs.get(i).getVariable());
}
}
snmp.close();
} catch (IOException e) { 

e.printStackTrace();
// TODO 此处异常状态,需要log[exception];
log.error("SNMP getStatus Exception:" + e);
}
return oidAndVariableList;
}
/** * 发送命令方法 * * @param ip  交换机ip * @param oid  发送命令的oid * @param command  命令参数 * @return */
public static int setCommand(String ip, String oid, Integer command) { 

int status = 0;
CommunityTarget target = createTarget(ip, USERNAME);
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(oid), new Integer32(command)));
pdu.setType(PDU.SET);
try { 

Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
ResponseEvent respEvent = snmp.send(pdu, target);
if (respEvent != null && respEvent.getResponse() != null) { 

int result = respEvent.getResponse().get(0).getVariable().toInt();
if (result == command) { 

// 命令执行成功!
status = 1;
}
} else { 

// TODO 此处异常状态,需要log
System.out.println(
"SNMP sent command request time out, Response is null. [ip = " + ip + ", community = "
+ SnmpDevice.PDU_WRITE_USER + "]");
}
snmp.close();
} catch (IOException e) { 

e.printStackTrace();
// TODO 此处异常状态,需要log[exception];
System.out.println("SNMP sent command Get Exception:" + e);
}
return status;
}
private static final String HUA_WEI_OID = "1.3.6.1.4.1.2011.5.25.195.3.1.6";
private static final String HUA_WEI_OID_SWITCH = "1.3.6.1.4.1.2011.5.25.195.3.1.15.23";
/* 切换管理方式 */
private static final String HUA_WEI_MANAGEMENT = "1.3.6.1.4.1.2011.5.25.195.2.1.8.0";
public static void main(String[] args) { 

String ip = "192.168.0.196";
//切换管理方式 1.手动管理  2.自动管理
HuaWeiSwitchesSnmpConnection.setCommand(ip, HUA_WEI_MANAGEMENT, 1);
//控制开关 1.关机  2.开机
HuaWeiSwitchesSnmpConnection.setCommand(ip, HUA_WEI_OID_SWITCH, 1);
try { 

Thread.sleep(4000);
} catch (InterruptedException e) { 

e.printStackTrace();
}
HuaWeiSwitchesSnmpConnection.setCommand(ip, HUA_WEI_OID_SWITCH, 2);
//获取Oid和port
/*List<String> status = HuaWeiSwitchesSnmpConnection.getOidAndPortList(ip, HUA_WEI_OID_SWITCH); for (String message : status) { System.out.println(message); }*/
int status1 = HuaWeiSwitchesSnmpConnection.getStatus(ip, HUA_WEI_OID_SWITCH);
System.out.println(status1);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181280.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 四大主流CA机构_CA机构的作用

    四大主流CA机构_CA机构的作用四大主流CA机构–wosign是唯一支持免费证书的找到免费SSL证书了,刚刚看到他们网站有快捷申请免费SSL证书,很方便,10分钟颁发,试了一下,申请了2个域名,一个颁发很快,另一个稍微有点慢,问他们客服,客户说另外一个域名,涉及到敏感信息,需要两签,所以审核会慢一下,好吧,只要证书好用,等一会也无所谓啦!另外,我是看到微博上面的这个四大主流CA机构证书对比表,才去的申请的哦!…

    2022年10月31日
  • linux抓包查看请求接口源ip,linux 抓包「建议收藏」

    linux抓包查看请求接口源ip,linux 抓包「建议收藏」tcpdumphost172.16.29.40andport4600-X-s500tcpdump采用命令行方式,它的命令格式为:tcpdump[-adeflnNOpqStvx][-c数量][-F文件名][-i网络接口][-r文件名][-ssnaplen][-T类型][-w文件名][表达式]1.tcpdump的选项介绍-a…

    2022年10月14日
  • git 迁出/克隆远程仓库的指定分支方法(附常用git配置命令)

    普通克隆方式:gitclone&lt;远程仓库地址&gt;这种克隆方式默认是克隆master主分支,而且通过命令gitbranch–list能看到克隆后在本地也只有这一个分支,如果再通过新建分支再拉取指定分支,甚至可能还需要解决冲突,太繁琐。那么,如何快速有效的直接克隆远程指定分支?只需要一条命令:gitclone-b&lt;指定分支名&gt;&…

  • 小程序图片和视频轮播

    小程序图片和视频轮播index.wxml<swiperclass=”swiper”indicator-dots=”true”autoplay=”{{flag}}”interval=”5000″duration=”1000″><blockwx:for=”{{movies}}”wx:for-index=”index”>&…

  • Java学习之Spring框架入门篇

    Java学习之Spring框架入门篇0x00前言最近在学SSM的三大框架,上篇文章,已经更新了Mybatis的相关内容,那么这篇文章就来写写Spring的入门。0x01Spring概述S

    2021年12月12日
  • AC 自动机_模式匹配自动机

    AC 自动机_模式匹配自动机学习AC自动机的前提是要会trie数和KMP字符串匹配,它的功能是能对好多个模式串进行同时查找。比如对4个模式串:hehershisshe在一条母串中:shejjjjj查找每个模式串出现的次数.我们知道KMP算法有个next数组,和KMP类似,AC自动机有一个fail指针数组,用来对整棵trie树进行滚动。AC 自动机:HUD 3065:#i

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号