• 土地是自然存在的地球的一部分,不是人类劳动成果,没有价值,买房者不应支付土地费,房价之所以虚高,是因为买房者支付了不该支付的土地费。 2019-10-15
  • 月薪过万白领辞职回乡养鸡 亏数十万后回城找工作 2019-10-15
  • 尽管过去计划经济时,由于局限性,工作上有过失误,有过短缺,但没有浪费。不存在笑博士说的做出来的东西无人用的问题。何况那时,主要还是通过人工作的计划。在今天,高科 2019-09-17
  • 即使中美贸易归零,中国也不会屈服美国的大棒政策 2019-09-17
  • 宁夏文联面向全国重奖征文 喜迎自治区成立六十周年 2019-09-10
  • 大兴首开保利·熙悦林语 又一限价房将入市! ——凤凰网房产北京 2019-09-10
  • 大山深处4名孩子的交通安全课 2019-09-06
  • 新疆坚决打好污染防治攻坚战 2019-09-06
  • 分级基金将黯然离场 10只分级B拉响下折“警报” 2019-09-05
  • 刘嘉玲戴礼帽系领带帅过鲜肉 大长腿走路带风霸气在侧漏 2019-09-05
  • 阶级不是“等级差别”,而是私有制基础上剥削和被剥削两大社会集团。 2019-08-28
  • 邮储银行山西省分行零售信贷结余突破200亿元 2019-08-24
  • 智能服装让生活更有趣 2019-08-24
  • 探访广西高考评卷现场:评卷场所警戒线“包围” 2019-08-23
  • 一镜到底绝密视频!10个故事,一个不一样的上合峰会 2019-08-21
  • 尤文图斯vs桑普多利亚:【Python】SNMP的安装及Python的调用

    都灵桑普多利亚关系 www.dqyww.com 2/13/2017来源:经验技巧人气:10154

    概述

    本文是介绍SNMP在Windows和linuxUbuntu)下的安装,以及通过Python调用其接口的文章。

    开发环境

    Python 3.5.1 Windows 10 64位,Ubuntu 16.04 64位(虚拟机)

    SNMP

    SNMP(简单网络管理协议),由一组网络管理的标准组成,包含一个应用层协议(application layer PRotocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。

    MIB

    MIB(Management Information Base),管理信息库,由网络管理协议访问的管理对象数据库,它包括SNMP可以通过网络设备的SNMP管理代理进行设置的变量。

    Windows下安装SNMP

    下载链接:https://sourceforge.net/projects/net-snmp/

    之后直接安装即可,默认安装路径是C:\usr。

    安装完后在系统变量下添加:C:\usr\bin,打开cmd输入snmpget测试,没有报错则说明安装成功。

    Ubuntu下安装SNMP和配置

    下载

    $ sudo apt-get install snmpd snmp snmp-mibs-downloader

    查看SNMP服务状态

    $ sudo service snmpd status

    简单测试SNMP服务是否正常

    $ snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.1.1 SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64

    默认情况下,snmp服务只是对本地开启,是无法通过远程获取该主机的snmp信息的。所以要设置允许远程主机访问

    $ sudo netstat -antup | grep 161 udp 0 0 127.0.0.1:161 0.0.0.0:* 10698/snmpd

    可以看到,161端口只对本机开放(161端口号是snmp服务的端口号),我们需要修改一下,让snmp服务对外开放。

    修改/etc/snmp/snmpd.conf配置文件,大概在15行,将下面一行注释掉:agentAddress udp:127.0.0.1:161

    重新启动snmp服务,再通过命令观察:

    $ sudo /etc/init.d/snmpd restart $ sudo netstat -antup | grep 161 udp 0 0 0.0.0.0:161 0.0.0.0:* 10763/snmpd

    可以看到SNMP服务已经对外开放了,这样之后,我们就能在远程主机进行测试。

    由于SNMP默认只能查看两个设备节点,要想查看所有节点还需要进行一些配置。打开/etc/snmp/snmpd.conf

    sudo vim /etc/snmp/snmpd.conf # 在大约45行处添加下面一行 view systemonly included .1 view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1

    最后配置一下mibs,否则可能会报Unknown Object Identifier错误。打开/etc/snmp/snmp.conf,注释掉mibs:就可以了

    sudo vim /etc/snmp/snmp.conf # As the snmp packages come without MIB files due to license reasons, loading # of MIBs is disabled by default. If you added the MIBs you can reenable # loading them by commenting out the following line. #mibs :

    Windows下调用SNMP查看其他主机信息

    由于博主使用的是Ubuntu虚拟机,其ip是192.168.132.130。下面是cmd下通过SNMP查看该主机的信息。

    打开cmd,输入:

    snmpwalk -v 2c -c public 192.168.132.130 1.3.6.1.2.1.1.1

    返回

    SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64

    成功。

    Python代码调用示例

    Python代码调用系统的snmpwalk指令来查询设备信息。

    # coding=utf-8 """ filename:snmp_test.py 说明: 使用系统的 snmpwalk 来查询设备信息,需要先安装 snmp 代码 Windows 和 Linux 通用 Windows cmd 调用示例:snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.2.1.1.1 Windows cmd 下查看某主机(192.168.132.130)信息示例: snmpwalk -v 2c -c public 192.168.132.130 1.3.6.1.2.1.1.1 """ import re import os import time import platform if 'Windows' == platform.system(): hosts = ['192.168.132.130'] else: # 在虚拟机运行时则查看本地 hosts = ['127.0.0.1'] def snmpWalk(host, oid): result = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('\n')[:-1] return result # ------------------------------------------------------------ # 获取负载信息 # ------------------------------------------------------------ def getSystem(host): system = ':'.join(snmpWalk(host, 'system')[0].split(':')[3:]).strip() return system # ------------------------------------------------------------ # ------------------------------------------------------------ # 获取负载信息 # ------------------------------------------------------------ def getLoad(host, loid): """系统负载""" load_oids = '1.3.6.1.4.1.2021.10.1.3.' + str(loid) return snmpWalk(host, load_oids)[0].split(':')[3] def getLoads(host): load1 = getLoad(host, 1) load10 = getLoad(host, 2) load15 = getLoad(host, 3) return load1, load10, load15 # ------------------------------------------------------------ # ------------------------------------------------------------ # 获取网卡流量 # ------------------------------------------------------------ def getNetworkDevices(host): """获取网络设备信息""" device_mib = snmpWalk(host, 'RFC1213-MIB::ifDescr') device_list = [] for item in device_mib: device_list.append(item.split(':')[3].strip()) return device_list def getNetworkData(host, oid): """获取网络流量""" data_mib = snmpWalk(host, oid) data = [] for item in data_mib: byte = float(item.split(':')[3].strip()) data.append(str(round(byte / 1024, 2)) + ' KB') return data def getNetworkInfo(host): device_list = getNetworkDevices(host) # 流入流量 inside = getNetworkData(host, 'IF-MIB::ifInOctets') # 流出流量 outside = getNetworkData(host, 'IF-MIB::ifOutOctets') return device_list, inside, outside # ------------------------------------------------------------ # ------------------------------------------------------------ # 内存使用率 # ------------------------------------------------------------ def getSwapTotal(host): swap_total = snmpWalk(host, 'UCD-SNMP-MIB::memTotalSwap.0')[0].split(' ')[3] return swap_total def getSwapUsed(host): swap_avail = snmpWalk(host, 'UCD-SNMP-MIB::memAvailSwap.0')[0].split(' ')[3] swap_total = getSwapTotal(host) swap_used = str(round(((float(swap_total) - float(swap_avail)) / float(swap_total)) * 100, 2)) + '%' return swap_used def getMemTotal(host): mem_total = snmpWalk(host, 'UCD-SNMP-MIB::memTotalReal.0')[0].split(' ')[3] return mem_total def getMemUsed(host): mem_total = getMemTotal(host) mem_avail = snmpWalk(host, 'UCD-SNMP-MIB::memAvailReal.0')[0].split(' ')[3] mem_used = str(round(((float(mem_total) - float(mem_avail)) / float(mem_total)) * 100, 2)) + '%' return mem_used def getMemInfo(host): mem_used = getMemUsed(host) swap_used = getSwapUsed(host) return mem_used, swap_used # ------------------------------------------------------------ def main(): for host in hosts: print('=' * 10 + host + '=' * 10) start = time.time() print("系统信息") system = getSystem(host) print(system) print("系统负载") load1, load10, load15 = getLoads(host) print('load(5min): %s ,load(10min): %s ,load(15min): %s' % (load1, load10, load15)) print("网卡流量") device_list, inside, outside = getNetworkInfo(host) for i, item in enumerate(device_list): print('%s : RX: %-15s TX: %s ' % (device_list[i], inside[i], outside[i])) mem_used, swap_used = getMemInfo(host) print("内存使用率") print('Mem_Used = %-15s Swap_Used = %-15s' % (mem_used, swap_used)) end = time.time() print('run time:', round(end - start, 2), 's') if __name__ == '__main__': main()

    Windows下打?。?/p>

    ==========192.168.132.130========== 系统信息 Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 系统负载 load(5min): 0.03 ,load(10min): 0.03 ,load(15min): 0.00 网卡流量 lo : RX: 1861.91 KB TX: 1861.91 KB Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) : RX: 5733.84 KB TX: 336.49 KB 内存使用率 Mem_Used = 93.82% Swap_Used = 0.07% run time: 2.89 s

    Ubuntu下打?。?/p>

    ==========127.0.0.1========== 系统信息 Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 系统负载 load(5min): 0.02 ,load(10min): 0.02 ,load(15min): 0.00 网卡流量 lo : RX: 1861.91 KB TX: 1861.91 KB Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) : RX: 5738.8 KB TX: 338.76 KB 内存使用率 Mem_Used = 94.14% Swap_Used = 0.07% run time: 0.26 s



  • 土地是自然存在的地球的一部分,不是人类劳动成果,没有价值,买房者不应支付土地费,房价之所以虚高,是因为买房者支付了不该支付的土地费。 2019-10-15
  • 月薪过万白领辞职回乡养鸡 亏数十万后回城找工作 2019-10-15
  • 尽管过去计划经济时,由于局限性,工作上有过失误,有过短缺,但没有浪费。不存在笑博士说的做出来的东西无人用的问题。何况那时,主要还是通过人工作的计划。在今天,高科 2019-09-17
  • 即使中美贸易归零,中国也不会屈服美国的大棒政策 2019-09-17
  • 宁夏文联面向全国重奖征文 喜迎自治区成立六十周年 2019-09-10
  • 大兴首开保利·熙悦林语 又一限价房将入市! ——凤凰网房产北京 2019-09-10
  • 大山深处4名孩子的交通安全课 2019-09-06
  • 新疆坚决打好污染防治攻坚战 2019-09-06
  • 分级基金将黯然离场 10只分级B拉响下折“警报” 2019-09-05
  • 刘嘉玲戴礼帽系领带帅过鲜肉 大长腿走路带风霸气在侧漏 2019-09-05
  • 阶级不是“等级差别”,而是私有制基础上剥削和被剥削两大社会集团。 2019-08-28
  • 邮储银行山西省分行零售信贷结余突破200亿元 2019-08-24
  • 智能服装让生活更有趣 2019-08-24
  • 探访广西高考评卷现场:评卷场所警戒线“包围” 2019-08-23
  • 一镜到底绝密视频!10个故事,一个不一样的上合峰会 2019-08-21
  • 时时彩平台骗局 极速赛车精准人工计划 时时彩计划 开单软件免费 重庆时时彩有人控制吗? 富宝彩坛fbfb 四川时时玩法 在线时时彩人工计划网 金牛彩票提现不了 北京塞车开奖结果直播 双色球纸张怎么填 最新单双公式技巧规律 pk10极速赛车彩票开奖 90期金吊桶推荐六肖 足球即时比 923彩票