最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用snmp協(xié)議實現(xiàn)采集服務器信息

 更新時間:2024年12月25日 08:48:23   作者:princeAladdin  
SNMP是一種用于管理網(wǎng)絡設備的協(xié)議,它是一種標準化的協(xié)議,被用于監(jiān)控和管理網(wǎng)絡設備,這篇文章主要介紹了Java如何使用snmp協(xié)議采集服務器信息,需要的可以參考下

一、SNMP介紹

SNMP是一種用于管理網(wǎng)絡設備的協(xié)議。它是一種標準化的協(xié)議,被用于監(jiān)控和管理網(wǎng)絡設備,包括路由器、交換機、服務器、打印機和其他設備。

SNMP協(xié)議的基本組成部分包括:

管理站(Management Station):通常是一個PC或服務器,用于監(jiān)控和管理網(wǎng)絡設備。

管理代理(Management Agent):運行在網(wǎng)絡設備上的軟件,負責管理和監(jiān)控網(wǎng)絡設備,并提供信息給管理站。

MIB(Management Information Base):一個層次結(jié)構(gòu)的數(shù)據(jù)庫,包含了網(wǎng)絡設備的信息。MIB的每個節(jié)點都對應著網(wǎng)絡設備的一個屬性或狀態(tài)。

SNMP協(xié)議:用在管理站和管理代理之間傳輸信息的協(xié)議。SNMP消息包含了操作類型、對象標識符和值。SNMP協(xié)議定義了一系列操作,可以通過這些操作獲取、設置和監(jiān)控網(wǎng)絡設備的屬性和狀態(tài)。這些操作包括:

  • 1、GET:獲取一個屬性或狀態(tài)的值。
  • 2、SET:設置一個屬性或狀態(tài)的值。
  • 3、GETNEXT:獲取下一個節(jié)點的值。
  • 4、GETBULK:獲取一組節(jié)點的值。
  • 5、TRAP:向管理站發(fā)送一個警告或通知。

SNMP協(xié)議的最新版本是SNMPv3,它提供了安全性和訪問控制機制,以保護網(wǎng)絡設備的安全性和保密性。

為什么要用SNMP

隨著網(wǎng)絡技術(shù)的飛速發(fā)展,在網(wǎng)絡不斷普及的同時也給網(wǎng)絡管理帶來了一些問題:網(wǎng)絡設備數(shù)量成幾何級數(shù)增加,使得網(wǎng)絡管理員對設備的管理變得越來越困難;同時,網(wǎng)絡作為一個復雜的分布式系統(tǒng),其覆蓋地域不斷擴大,也使得對這些設備進行實時監(jiān)控和故障排查變得極為困難。

網(wǎng)絡設備種類多種多樣,不同設備廠商提供的管理接口(如命令行接口)各不相同,這使得網(wǎng)絡管理變得愈發(fā)復雜。

在這種背景下,SNMP應運而生,SNMP是廣泛應用于TCP/IP網(wǎng)絡的網(wǎng)絡管理標準協(xié)議,該協(xié)議能夠支持網(wǎng)絡管理系統(tǒng),用以監(jiān)測連接到網(wǎng)絡上的設備是否有任何引起管理上關(guān)注的情況。通過"利用網(wǎng)絡管理網(wǎng)絡"的方式:網(wǎng)絡管理員可以利用SNMP平臺在網(wǎng)絡上的任意節(jié)點完成信息查詢、信息修改和故障排查等工作,工作效率得以提高。

屏蔽了設備間的物理差異,SNMP僅提供最基本的功能集,使得管理任務與被管理設備的物理特性、網(wǎng)絡類型相互獨立,因而可以實現(xiàn)對不同設備的統(tǒng)一管理,管理成本低。

設計簡單、運行代價低,SNMP采用"盡可能簡單"的設計思想,其在設備上添加的軟件/硬件、報文的種類和報文的格式都力求簡單,因而運行SNMP給設備造成的影響和代價都被最小化。

SNMP的基本組件

SNMP基本組件包括網(wǎng)絡管理系統(tǒng)NMS(Network Management System)、代理進程(Agent)、被管對象(Managed Object)和管理信息庫(Management Information Base)。

優(yōu)勢

  • 1、簡單易用:SNMP協(xié)議是一種簡單易用的協(xié)議,使用方便、易于管理。
  • 2、標準化:SNMP協(xié)議是一種標準化的協(xié)議,被廣泛應用于網(wǎng)絡管理領(lǐng)域。
  • 3、實時監(jiān)控:SNMP協(xié)議可以實時監(jiān)控網(wǎng)絡設備的性能和狀態(tài),及時發(fā)現(xiàn)和解決問題。
  • 4、集中管理:SNMP協(xié)議可以通過集中管理工具對網(wǎng)絡設備進行統(tǒng)一管理,提高管理效率和管理水平。
  • 5、可擴展性:SNMP協(xié)議具有良好的可擴展性,可以適應不同的網(wǎng)絡管理需求和應用場景。

應用

網(wǎng)絡設備管理:SNMP協(xié)議是一種常用的網(wǎng)絡設備管理協(xié)議,用于監(jiān)控和管理路由器、交換機、服務器和打印機等網(wǎng)絡設備。

網(wǎng)絡性能監(jiān)控:SNMP協(xié)議可以實時監(jiān)控網(wǎng)絡設備的性能指標,如CPU利用率、內(nèi)存使用率、網(wǎng)絡流量等,幫助管理員及時發(fā)現(xiàn)和解決性能問題。

安全管理:SNMP協(xié)議可以用于監(jiān)控和管理操作系統(tǒng)、數(shù)據(jù)庫、應用程序等系統(tǒng)和軟件,保證系統(tǒng)正常運行和高效管理。

云計算管理:SNMP協(xié)議可以用于云計算環(huán)境中的網(wǎng)絡管理和監(jiān)控,幫助管理員及時發(fā)現(xiàn)和解決云環(huán)境中的問題。

二、開發(fā)集成

<!-- https://mvnrepository.com/artifact/org.snmp4j/snmp4j -->
<dependency>
    <groupId>org.snmp4j</groupId>
    <artifactId>snmp4j</artifactId>
    <version>2.7.0</version>
</dependency>

https://mvnrepository.com/artifact/org.snmp4j/snmp4j

目前最新版本3.7.7,目前以2.7.0版本為例。

三、基礎(chǔ)OID

import java.math.BigDecimal;

/**
 * snmp協(xié)議工具類配置文件
 */
public class SnmpConfig
{
    private SnmpConfig(){}

    /**
     * get cpu描述信息
     */
    public static final String SNMPGET_CPUDESC=".1.3.6.1.2.1.1.1.0.255.1";

    /**
     * walk 網(wǎng)絡接口描述
     */
    public static final String SNMPWALK_IFDESCR=".1.3.6.1.2.1.2.2.1.2";

    /**
     * walk 接口物理地址
     */
    public static final String SNMPWALK_IFPHYSADDRESS=".1.3.6.1.2.1.2.2.1.6";

    /**
     * get IO負載
     */
    public static final String SNMPGET_IOLOAD=".1.3.6.1.2.1.1.1.0.255.0";

    /**
     * 硬盤大小
     */
    public static final String SNMPGET_DSKTOTAL=".1.3.6.1.4.1.2021.9.1.6";

    /**
     * walk cpu 負載
     */
    public static final String SNMPWALK_HRPROCESSLOAD=".1.3.6.1.2.1.25.3.3.1.2";

    /**
     * walk cpu 空閑率
     */
    public static final String SNMPWALK_SSCPUIDLE=".1.3.6.1.4.1.2021.11.11.0";

    /**
     * walk 存儲設備描述
     */
    public static final String SNMPWALK_HRSTORAGEDESCR=".1.3.6.1.2.1.25.2.3.1.3";
    /**
     * walk 存儲設備描述
     */
    public static final String SNMPWALK_AHU=".1.3.6.1.2.1.25.2.3.1.4";
    /**
     * walk 存儲設備描述
     */
    public static final String SNMPWALK_AUR=".1.3.6.1.2.1.25.2.3.1.5";

    /**
     *walk 存儲設備使用大小
     * 內(nèi)存使用多少,跟總?cè)萘肯喑褪钦加寐?
     */
    public static final String SNMPWALK_HRSTORAGEUSED=".1.3.6.1.2.1.25.2.3.1.6";
    /**
     *walk 內(nèi)存占用
     * 各個進程占用的內(nèi)存
     */
    public static final String SNMPWALK_MEMORY_WIN=".1.3.6.1.2.1.25.5.1.1.2";

    /**
     *walk 存儲設備使用率
     *
     */
    public static final String SNMPWALK_DSKPERCENT=".1.3.6.1.4.1.2021.9.1.9";

    /**
     * get 獲取內(nèi)存大小
     */
    public static final String SNMPGET_HRMEMORYSIZE=".1.3.6.1.2.1.25.2.2.0";

    /**
     * 獲取機器名
     */
    public static final String SNMPWALK_SYSNAME=".1.3.6.1.2.1.1.5";

    /**
     * 性能參數(shù)ID-cpu使用率
     */
    public static final Integer PERFORMANCE_PARAM_CPUUSAGE=1;

    /**
     * 性能參數(shù)ID-內(nèi)存使用率
     */
    public static final Integer PERFORMANCE_PARAM_MEMORYUSAGE=2;

    /**
     * 性能參數(shù)ID-io帶寬占用率
     */
    public static final Integer PERFORMANCE_PARAM_IOUSAGE=3;

    /**
     * decimal 類型1024,用于除法計算
     */
    public static final BigDecimal DEVIDE_NUM=new BigDecimal("1024");

    /**
     * get方式獲取內(nèi)存大小
     */
    public static final String GET_MEMORY="1.3.6.1.2.1.25.2.2.0";

    /**
     * 獲取系統(tǒng)描述
     */
    public static final String SYS_DSC="1.3.6.1.2.1.1.1.0";

    /**
     * 獲取網(wǎng)絡接口數(shù)量
     */
    public static final String IF_NUM="1.3.6.1.2.1.2.1.0";

    /**
     * 獲取cpu核數(shù)
     */
    public static final String CPU_NUM="1.3.6.1.2.1.25.3.3.1.2";

}

四、snmp信息采集工具類

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
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.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.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.List;

/**
 * snmp協(xié)議工具類
 * 獲取服務器cpu,內(nèi)存,及硬盤占用
 */
public class SnmpUtil
{
    private static     Logger          logger = LogManager.getLogger(SnmpUtil.class);
    private static Snmp            snmp   = null;
    private        CommunityTarget target;
    @SuppressWarnings("squid:S3010")
    public SnmpUtil(String intranetDeviceIp, Integer snmpPort) throws IOException
    {
        if (snmp == null)
        {
            snmp = new Snmp(new DefaultUdpTransportMapping());
            snmp.listen();
        }
        //初始化CommunityTarget
        target = new CommunityTarget();
        target.setCommunity(new OctetString("public"));
        target.setVersion(SnmpConstants.version2c);
        target.setAddress(new UdpAddress(intranetDeviceIp + "/" + snmpPort));
        target.setTimeout(1000);
        target.setRetries(1);
    }

    private ResponseEvent snmpGet(String oid)
    {
        PDU pdu = new PDU();
        pdu.addOID(new VariableBinding(new OID(oid)));
        ResponseEvent re=null;
        try
        {
            re = snmp.get(pdu, target);
        }catch (Exception e){
            logger.info("snmpGet 異常"+e.getMessage());
        }
        return re;
    }

    private List<TableEvent> snmpWalk(String oid)
    {
        TableUtils           utils      = new TableUtils(snmp, new DefaultPDUFactory(PDU.GETBULK));
        OID[] columnOid = new OID[]{new OID(oid)};
        return utils.getTable(target, columnOid, null, null);
    }

    /**
     * 獲取cpu負載
     * @return
     */
    public BigDecimal getCpuUsage()
    {
        List<TableEvent> list  = snmpWalk(SnmpConfig.SNMPWALK_HRPROCESSLOAD);
        BigDecimal            usage = new BigDecimal("0");
        for (TableEvent tableEvent : list)
        {
            try
            {
                String s=tableEvent.toString().split("=")[3].split("]")[0].trim();
                if (!"-4,exception".equals(s)){
                    usage=usage.add(new BigDecimal(tableEvent.toString().split("=")[3].split("]")[0].trim()));
                }else {
                    return new BigDecimal("-1");
                }
            }
            catch (Exception e)
            {
                logger.info("獲取cpu負載失敗"+e.getMessage());
                return new BigDecimal("-1");
            }
        }
        usage = usage.divide(new BigDecimal(list.size()),2,BigDecimal.ROUND_HALF_UP);
        return usage;
    }

    /**
     * 獲取cpu使用率
     * @return
     */
    public BigDecimal getCpu()
    {
        BigDecimal    totalSize;
        ResponseEvent responseEvent = snmpGet(SnmpConfig.SNMPWALK_SSCPUIDLE);
        if(responseEvent!=null&&responseEvent.getResponse()!=null){
            totalSize=new BigDecimal(responseEvent.getResponse().toString().split("=")[4].split("]")[0].trim());
        }else {
            return new BigDecimal("-1");
        }
        return new BigDecimal("100").subtract(totalSize);
    }

    /**
     * 獲取磁盤占用率
     * @return
     */
    public BigDecimal getDiskUsageForWindows()
    {
        BigDecimal multiply=new BigDecimal("-1");
        try
        {
            BigDecimal diskSize = getDiskSize();
            BigDecimal diskUsed = getDiskUsed();
            if (BigDecimal.ZERO.compareTo(diskSize)<0&&BigDecimal.ZERO.compareTo(diskUsed)<0){
                multiply = getDiskUsed().divide(getDiskSize(), 3, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
            }
        }catch (Exception e){
            logger.info("獲取windows磁盤占用異常"+e.getMessage());
        }

        return multiply;
    }
    /**
     * 獲取磁盤占用率
     * @return
     */
    public BigDecimal getDiskUsage()
    {
        BigDecimal totalSize=null;
        //org.snmp4j.util.TableEvent[index=null,vbs=null,status=-1,exception=null,report=null]
        List<TableEvent> tableEvents = snmpWalk(SnmpConfig.SNMPWALK_DSKPERCENT);
        if(tableEvents.isEmpty()){
            totalSize = getDiskUsageForWindows();
            return totalSize;
        }
        for(int i=0;i<tableEvents.size();i++){
            if ("-1,exception".equals(tableEvents.get(i).toString().split("=")[3].split("]")[0].trim())){
                return  new BigDecimal("-1");
            }
            String s=tableEvents.get(i).toString().split("=")[3].split("]")[0].trim();
            if (!"-4,exception".equals(s)){
                totalSize= new BigDecimal(tableEvents.get(i).toString().split("=")[3].split("]")[0].trim());
            }else {
                return new BigDecimal("-1");
            }
        }

        return totalSize;
    }

    /**
     * 獲取內(nèi)存使用率
     * @return
     */
    public BigDecimal getMemoryUsage(){
        BigDecimal usage;
        BigDecimal totalSize;
        try
        {
            ResponseEvent event = snmpGet(SnmpConfig.SNMPGET_HRMEMORYSIZE);
            if (event != null && event.getResponse() != null)
            {
                totalSize = new BigDecimal(event.getResponse().toString().split("=")[4].split("]")[0].trim());
                usage = getMemoryUsed();
                return usage.multiply(new BigDecimal("100")).divide(totalSize, 0, BigDecimal.ROUND_HALF_UP);
            }
            else
            {
                return new BigDecimal("-1");
            }
        }catch (Exception e){
            logger.info("獲取內(nèi)存使用率失敗"+e.getMessage());
            return new BigDecimal("-1");
        }
    }


    /**
     * 獲取內(nèi)存已使用
     * @return
     */
    public BigDecimal getMemoryUsed(){
        List<TableEvent> list=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEDESCR);
        int index=0;
        BigDecimal usedMemory=new BigDecimal("0");
        for(int i=0;i<list.size();i++){
            String trim = list.get(i).toString().split("=")[3].split("]")[0].trim();
            if(trim.contains("Physical memory")){
                //linux系統(tǒng)
                index=i;
                List<TableEvent> usedList=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEUSED);
                usedMemory= new BigDecimal(usedList.get(index).toString().split("=")[3].split("]")[0].trim());
            }else if (trim.contains("Physical Memory")){
                //windows系統(tǒng)
                List<TableEvent> list1=snmpWalk(SnmpConfig.SNMPWALK_MEMORY_WIN);
                BigDecimal re=new BigDecimal("0");
                for (int j=0;j<list1.size();j++){
                    String trim1 = list1.get(j).toString().split("=")[3].split("]")[0].trim();
                    BigDecimal b = new BigDecimal(trim1);
                    re=re.add(b);
                }
                return re;
            }else  if(trim.contains("Memory buffers")){
                //linux系統(tǒng)
                index=i;
                List<TableEvent> usedList=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEUSED);
                usedMemory= usedMemory.subtract(new BigDecimal(usedList.get(index).toString().split("=")[3].split("]")[0].trim()));
            }else  if(trim.contains("Cached memory")){
                //linux系統(tǒng)
                index=i;
                List<TableEvent> usedList=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEUSED);
                usedMemory= usedMemory.subtract(new BigDecimal(usedList.get(index).toString().split("=")[3].split("]")[0].trim()));
            }
        }
        return usedMemory;

    }

    /**
     * 獲取磁盤
     * @return
     */
    public BigDecimal getDiskSize(){
        List<TableEvent> list=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEDESCR);
        BigDecimal diskSize=new BigDecimal(-1);
        if (!list.isEmpty()){
            diskSize=new BigDecimal("0");
            List<TableEvent> usedList1=snmpWalk(SnmpConfig.SNMPWALK_AHU);
            List<TableEvent> usedList2=snmpWalk(SnmpConfig.SNMPWALK_AUR);
            for(int i=0;i<list.size();i++){
                boolean re=list.get(i).toString().split("=")[3].split("]")[0].trim().contains(":")||list.get(i).toString().split("=")[3].split("]")[0].trim().contains("/");
                if(re){
                    diskSize=diskSize.add(new BigDecimal(usedList1.get(i).toString().split("=")[3].split("]")[0].trim()).multiply(new BigDecimal(usedList2.get(i).toString().split("=")[3].split("]")[0].trim())).divide(new BigDecimal("1073741824"),2,BigDecimal.ROUND_HALF_UP));
                }
            }
        }
        return diskSize;
    }

    /**
     * 獲取磁盤已使用
     * @return
     */
    public BigDecimal getDiskUsed(){
        List<TableEvent> list=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEDESCR);
        BigDecimal diskSize=new BigDecimal(-1);
        if (!list.isEmpty()){
            diskSize=new BigDecimal("0");
            List<TableEvent> usedList1=snmpWalk(SnmpConfig.SNMPWALK_AHU);
            List<TableEvent> usedList2=snmpWalk(SnmpConfig.SNMPWALK_HRSTORAGEUSED);
            for(int i=0;i<list.size();i++){
                boolean re=list.get(i).toString().split("=")[3].split("]")[0].trim().contains(":")||list.get(i).toString().split("=")[3].split("]")[0].trim().contains("/");
                if(re){
                    diskSize=diskSize.add(new BigDecimal(usedList1.get(i).toString().split("=")[3].split("]")[0].trim()).multiply(new BigDecimal(usedList2.get(i).toString().split("=")[3].split("]")[0].trim())).divide(new BigDecimal("1073741824"),2,BigDecimal.ROUND_HALF_UP));
                }
            }
        }
        return diskSize;
    }

    /**
     * 獲取IO負載
     * @return
     */
    public Float getIOUsage(){
        ResponseEvent event=snmpGet(SnmpConfig.SNMPGET_IOLOAD);
        if(event!=null&&event.getResponse()!=null){
            float usage=Float.parseFloat(event.getResponse().toString().split("=")[4].split("]")[0].trim());
            if(usage>1){
                return usage;
            }else{
                return usage*100;
            }
        }
        return null;
    }

    /**
     * 獲取性某性能參數(shù)數(shù)據(jù)
     * @param parameterId
     * @return
     */
    public Object getData(Integer parameterId) {
        Object data=null;
        try{
            if(parameterId.equals(SnmpConfig.PERFORMANCE_PARAM_CPUUSAGE)){
                data=getCpuUsage();
            }else if(parameterId.equals(SnmpConfig.PERFORMANCE_PARAM_MEMORYUSAGE)){
                data=getMemoryUsage();
            }else if(parameterId.equals(SnmpConfig.PERFORMANCE_PARAM_IOUSAGE)){
                data=getIOUsage();
            }
        }catch(Exception e){
            logger.info("獲取性能參數(shù)異常"+e.getMessage());
        }
        return data;
    }

    /**
     * 獲取設備物理地址
     * @return
     */
    public String getMacAddress(){
        try
        {
            List<TableEvent> list  = snmpWalk(SnmpConfig.SNMPWALK_IFDESCR);
            int              index = 0;
            for (int i = 0; i < list.size(); i++)
            {
                if (list.get(i).toString().split("=")[3].split("]")[0].trim().contains("eth"))
                {
                    index = i;
                }
            }
            List<TableEvent> ifAddressList = snmpWalk(SnmpConfig.SNMPWALK_IFPHYSADDRESS);
            return ifAddressList.get(index).toString().split("=")[3].split("]")[0].trim();
        }catch (Exception e){
            logger.info("獲取物理地址失敗"+e.getMessage());
            return "failure";
        }
    }

    /**
     * 獲取設備內(nèi)存大小  單位為GB
     * @return
     */
    public String getMemoryDesc() {
        ResponseEvent event         =snmpGet(SnmpConfig.SNMPGET_HRMEMORYSIZE);
        Long          bytes         =Long.parseLong(event==null?"0":event.getResponse().toString().split("=")[4].split("]")[0].trim());
        float         gb            =bytes/1024.0f/1024.0f;
        DecimalFormat decimalFormat =new DecimalFormat(".00");
        return decimalFormat.format(gb)+"GB";
    }

    /**
     * @throws IOException
     * 獲取cpu描述信息
     * @return
     */
    public String getCpuDesc() throws IOException {
        ResponseEvent event=snmpGet(SnmpConfig.SNMPGET_CPUDESC);
        return event==null? "":event.getResponse().toString().split("=")[4].split("]")[0].trim().split(":")[1].trim();
    }

    /**
     * 獲取存儲設備大小 (空盤空間不足百分百)
     * @param deviceCode
     * @return
     */
    public BigDecimal getDiskSize(String deviceCode){

        List<TableEvent> list = snmpWalk(SnmpConfig.SNMPGET_DSKTOTAL);
        BigDecimal diskSize=new BigDecimal(-1);
        if (list!=null){
            try
            {
                for (TableEvent tableEvent:list){
                    diskSize=new BigDecimal(tableEvent.toString().split("=")[3].split("]")[0].trim()).divide(SnmpConfig.DEVIDE_NUM).divide(SnmpConfig.DEVIDE_NUM,2,RoundingMode.HALF_UP);
                }
            }catch (Exception e){
                logger.info("獲取磁盤大小失敗"+e.getMessage());
            }
        }
        if (BigDecimal.ZERO.compareTo(diskSize)>0){
            diskSize = getDiskSize();
        }
        return diskSize;
    }



    /**
     * 獲取磁盤描述
     * @param deviceCode
     * @return
     * @throws IOException
     */
    public BigDecimal getDiskDesc(String deviceCode) {
        return getDiskSize(deviceCode).divide(SnmpConfig.DEVIDE_NUM,2,RoundingMode.HALF_UP).divide(SnmpConfig.DEVIDE_NUM,2,RoundingMode.HALF_UP);
    }

    /**
     * snmp協(xié)議檢測
     */
    public boolean snmpCheck() {
        ResponseEvent re=snmpGet(".1.3.6.1.4.1.2021.255.1");
        return re == null || re.getResponse() != null;
    }

    /**
     * 獲取機器名
     * @return
     */
    public String getSysName(){
        String name=null;
        try{
            List<TableEvent> list = snmpWalk(SnmpConfig.SNMPWALK_SYSNAME);
            if (list!=null){
                for (TableEvent tableEvent:list){
                    name=(tableEvent.toString().split("=")[3].split("]")[0].trim());
                }
            }
        }catch (Exception e){
            logger.info("獲取機器名失敗"+e.getMessage());
        }
        return name;
    }

    /**
     * 獲取內(nèi)存總大小(實際值)
     * @return
     */
    public BigDecimal getMemoryTotalSize(){
        try
        {
            ResponseEvent event = snmpGet(SnmpConfig.GET_MEMORY);
            if (event!=null&&event.getResponse()!=null){
                String trim = event.getResponse().toString().split("=")[4].split("]")[0].trim();
                return new BigDecimal(trim).divide(SnmpConfig.DEVIDE_NUM,2, RoundingMode.HALF_UP).divide(SnmpConfig.DEVIDE_NUM,2, RoundingMode.HALF_UP);
            }else {
                throw new RuntimeException("獲取內(nèi)存信息失敗");
            }
        }
        catch (Exception e)
        {
            logger.info("獲取內(nèi)存總大小失敗"+e.getMessage());
        }
        return new BigDecimal("-1");
    }

    /**
     * 獲取系統(tǒng)描述
     * @return
     */
    public String getSysDsc(){
        try
        {
            ResponseEvent event = snmpGet(SnmpConfig.SYS_DSC);
            if (event!=null&&event.getResponse()!=null){
                return event.getResponse().toString().split("=")[4].split("]")[0].trim();
            }else {
                throw new RuntimeException("獲取系統(tǒng)描述信息失敗");
            }
        }
        catch (Exception e)
        {
            logger.info("獲取系統(tǒng)描述信息失敗"+e.getMessage());
        }
        return "failure";
    }
    /**
     * 獲取接口數(shù)
     * @return
     */
    public Integer getIfNumber(){
        try
        {
            ResponseEvent event = snmpGet(SnmpConfig.IF_NUM);
            if (event!=null&&event.getResponse()!=null){
                String trim = event.getResponse().toString().split("=")[4].split("]")[0].trim();
                return Integer.parseInt(trim);
            }else {
                throw new RuntimeException("獲取接口信息失敗");
            }
        }
        catch (Exception e)
        {
            logger.info("獲取接口數(shù)量失敗"+e.getMessage());
        }
        return -1;
    }

    /**
     * 獲取cpu核數(shù)(n個cpu有n條數(shù)據(jù))
     * @return
     */
    public Integer getCpuNum(){
        List<TableEvent> list = snmpWalk(SnmpConfig.CPU_NUM);
        Integer num=-1;
        if (list!=null){
                num=list.size();
        }
        return num;
    }


    public static void main(String[] args) throws IOException
    {
        String   snmpIp   = "127.0.0.1";
        Integer  snmpPort = 161;
        SnmpUtil snmpUtil = new SnmpUtil(snmpIp, snmpPort);

        System.out.println("機器名稱"+snmpUtil.getSysName());
        System.out.println("磁盤大小 "+ snmpUtil.getDiskSize("devide"));
        System.out.println("物理地址"+snmpUtil.getMacAddress());
        System.out.println("cpu "+snmpUtil.getCpuUsage());
     }
 }

到此這篇關(guān)于Java使用snmp協(xié)議實現(xiàn)采集服務器信息的文章就介紹到這了,更多相關(guān)Java snmp采集服務器信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 策略模式:告別if else

    策略模式:告別if else

    你是不是還在寫著大量的if else語句,if else 不僅難以維護不易擴展,而且使代碼臃腫不堪,想不想讓你的業(yè)務代碼更加的健壯,更易擴展,那你一定要學一學今天的主角策略模式
    2021-06-06
  • Java程序打印奧林匹克標志方法詳解

    Java程序打印奧林匹克標志方法詳解

    這篇文章主要介紹了Java程序打印奧林匹克標志方法詳解,需要的朋友可以參考下。
    2017-09-09
  • java文件刪除不了的坑,特別是壓縮文件問題

    java文件刪除不了的坑,特別是壓縮文件問題

    這篇文章主要介紹了java文件刪除不了的坑,特別是壓縮文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 一文讀懂Spring Cloud-Hystrix

    一文讀懂Spring Cloud-Hystrix

    這篇文章主要介紹了通過一文讀懂Spring Cloud-Hystrix的相關(guān)知識,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • JAVA中的OutputStreamWriter流解析

    JAVA中的OutputStreamWriter流解析

    這篇文章主要介紹了JAVA中的OutputStreamWriter流解析,OutputStreamWriter提供了一種方便的方式將字符數(shù)據(jù)寫入到輸出流中,并進行字符編碼轉(zhuǎn)換,它是Java中處理字符流和字節(jié)流之間轉(zhuǎn)換的重要工具之一,需要的朋友可以參考下
    2023-10-10
  • Java for-each循環(huán)(遍歷循環(huán))詳解

    Java for-each循環(huán)(遍歷循環(huán))詳解

    本文詳解Java for-each循環(huán),涵蓋其簡化遍歷、類型安全、不可變性、空指針防護等特性,適用場景及限制,錯誤案例與修正,性能對比,高級技巧(如Java14 Records),并提供最佳實踐指南
    2025-07-07
  • 淺談Synchronized和Lock的區(qū)別

    淺談Synchronized和Lock的區(qū)別

    這篇文章主要介紹了淺談Synchronized和Lock的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 詳解MyBatis動態(tài)代理機制

    詳解MyBatis動態(tài)代理機制

    MyBatis的動態(tài)代理機制是其核心特性之一,通過該機制,開發(fā)者可以專注于定義接口和 SQL 映射,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Java類中字段可以不賦予初始值的原因分析

    Java類中字段可以不賦予初始值的原因分析

    這篇文章主要介紹了Java類中字段可以不賦予初始值的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot實現(xiàn)國際化的配置方法

    SpringBoot實現(xiàn)國際化的配置方法

    隨著一個系統(tǒng)的規(guī)模做上去之后,國際化的問題就會逐漸暴露出來,簡單來說,當你的系統(tǒng)面對的不再是本國的用戶,而要面臨海外用戶時,系統(tǒng)必須要能適配國際化,所以本文給大家介紹了SpringBoot實現(xiàn)國際化的配置方法,需要的朋友可以參考下
    2025-11-11

最新評論

宣武区| 台山市| 汾西县| 西华县| 永和县| 金寨县| 阜平县| 昌图县| 湛江市| 台江县| 武安市| 依兰县| 营口市| 怀柔区| 巴彦淖尔市| 同心县| 延庆县| 中卫市| 敦煌市| 达孜县| 双柏县| 儋州市| 武隆县| 屯昌县| 乌海市| 贞丰县| 乌拉特前旗| 天镇县| 荆州市| 龙陵县| 甘谷县| 贡觉县| 宁城县| 商城县| 泉州市| 梓潼县| 尖扎县| 安泽县| 广州市| 威远县| 兴文县|