C# 通过snmp获取内存占用大小(物理内存)

SNMP 可以使网络管理员通过一台工作站完成对计算机、路由器和其他网络设备的远程管理和监视。利用 SNMP 协议可以更好地管理和监控网络。管理工作站可以远程管理所有支持该协议的网络设备,如监视网络状态、修改网络设备配置、接收网络事件警告等。

要使用snmp需要开始本地snmp服务,和配置团体名称。
使用微软提供的snmp类库:SnmpSharpNet。
win10 开启snmp方法:https://wwr.lanzoui.com/iFzRht4xzkb
密码:euzt
底部附送C# 动态库

方法:

 /// <summary>
        /// snmp获取本地当前win电脑内存使用
        /// 端口号161  团体名称:public
        /// 注意电脑上要开启snmp服务
        /// 获取数据具有延迟性,win的snmp机制所致
        /// </summary>
        /// <returns>返回系统物理内存使用(单位:G)</returns>
        public static float GetUsePhysicalMemoryOfSNMP()
        {
            System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse("127.0.0.1");
            UdpTarget SnmpSender = new UdpTarget(ipAdd, 161, 2000, 1);
            Pdu tempSendPdu = new Pdu(PduType.Get);
            float memoryF = float.MinValue;
            AgentParameters AgentParam = new AgentParameters(SnmpVersion.Ver2, new OctetString("public"));
            string oidRoot = ".1.3.6.1.2.1.25.2.3.1.3.";
            int idx = 1;
            SnmpV2Packet result = null;

            while (true)
            {
                if (idx > 1000)
                {
                    return float.MinValue;
                }
                string curRepOid = oidRoot + idx;
                tempSendPdu.VbList.Clear();
                tempSendPdu.VbList.Add(curRepOid);
                result = SnmpSender.Request(tempSendPdu, AgentParam) as SnmpV2Packet;
                if (result != null && result.Pdu.ErrorIndex == 0)
                {
                    string recVal = result.Pdu.VbList[0].Value.ToString();
                    if (recVal.ToLower().Replace(" ", "") == "physicalmemory")
                    {
                        break;
                    }
                    else
                    {
                        tempSendPdu.VbList.Clear();
                        idx++;
                    }
                }
                else
                {
                    break;
                }
            }

            string replayOID = "1.3.6.1.2.1.25.2.3.1.6." + idx;
            tempSendPdu.VbList.Clear();
            tempSendPdu.VbList.Add(replayOID);

            result = SnmpSender.Request(tempSendPdu, AgentParam) as SnmpV2Packet;
            if (result != null && result.Pdu.ErrorIndex == 0)
            {
                bool flag = float.TryParse(result.Pdu.VbList[0].Value.ToString(), out memoryF);
                if (flag)
                {
                    memoryF = memoryF * 65536 / 1024 / 1024 / 1024;
                }
            }
            return memoryF;
        }

C#引用库:https://wwr.lanzoui.com/iITfQt4xzlc
密码:4030

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天hous

你的鼓励是我最大动力~谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值