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);
  }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年10月16日 下午6:00
下一篇 2022年10月16日 下午6:00


相关推荐

  • 【风马一族_代码英语】代码英语之一

    【风马一族_代码英语】代码英语之一

    2021年9月11日
    50
  • 实现微信机器人开发

    实现微信机器人开发首先微信聊天机器人,是一种通过自然语言模拟人类进行对话的程序。通常运行在特定的软件平台上,如PC平台或者移动终端设备平台。测试问文档:https://www.wkteam.cn/文档测试过程中实现多项功能进行管理登录模块◆登录微控平台member/login◆获取微信二维码user/login◆执行微信登录getIPadLoginInfo◆获取联系人列表(群、好友)getAllContact◆二次登录(退出微信号需要再次登录调用此接口即可)secondLogin◆退出微信l

    2022年6月15日
    61
  • 最全的ios系统导出微信聊天记录&生成词云教程

    首先放一张我的iPhone手机导出微信聊天记录生成的词云效果图(个别敏感词汇请大家自行忽略hhh):对于如何导出手机上的微信聊天记录,网上绝大部分教程提到的“楼月微信聊天记录导出恢复助手”和“手机博士微信聊天记录查看”等软件都是收费的,免费版本只能查看很少的几条聊天记录并且不能导出。在这里提供一种绝对免费的方法可以方便地导出微信聊天记录,后面附上根据聊天记录生成词云的教程。由于我个人的手机是i…

    2022年4月8日
    102
  • CSS3中如何解决子元素继承父元素的opacity属性[通俗易懂]

    CSS3中如何解决子元素继承父元素的opacity属性[通俗易懂]问题css3中的opacity属性是用来设置div元素的不透明级别的,但是我们往往会遇到因为父级元素设定opacity后,子元素也跟着透明了,但是有时候我们只是想让背景是透明的,这该如何解决呢?错误的示例我们常常想到的方法是直接给子元素的opacity设定为1,如下:<!DOCTYPEhtml><html><head><metacharset=”utf-8″><title>opacity</title&g

    2022年5月20日
    46
  • 感知机分析

    感知机分析关于感知机okletsgo。感知机是线性分类模型,划重点注意哦,是线性的分类模型。也就是说,如果你拿感知机去分类线性不可分的数据集的话,它的效果想必垂泪。因为近期看到相关算法的缘故来写一片感知机的文章,主要介绍一下这是个什么东西以及它能用来干什么。就我来说最考试接触到感知机是在学习神经网络的时候,神经网络中的每一个点就能看做是一个感知机。上图大概就是感知机的构造了。了解神经…

    2022年10月21日
    6
  • winhttp 发送 get 请求「建议收藏」

    winhttp 发送 get 请求「建议收藏」由于微端要和服务器交互,而服务器又只有http协议的处理,所以需要用C++来模拟get或post请求。这是使用windowsapi来模拟get请求的,使用到的库有“winhttp”,头文件有“winhttp.h”,下面的代码来源于http://msdn.microsoft.com:12345678

    2022年7月27日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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