返回顶部
首页 > 资讯 > 后端开发 > Python >【Python】SNMP的安装及Pyth
  • 383
分享到

【Python】SNMP的安装及Pyth

PythonSNMPPyth 2023-01-31 06:01:32 383人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本文是介绍SNMP在windows和linux(ubuntu)下的安装,以及通过python调用其接口的文章。 Python 3.5.1 Windows 10 64位,Ubuntu 16.04 64位(虚拟机) SNMP

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

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

MIB

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

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

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

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

下载

$ 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 :

由于博主使用的是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代码调用系统的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下打印:

==========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下打印:

==========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

--结束END--

本文标题: 【Python】SNMP的安装及Pyth

本文链接: https://lsjlt.com/news/190146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【Python】SNMP的安装及Pyth
    本文是介绍SNMP在Windows和Linux(Ubuntu)下的安装,以及通过Python调用其接口的文章。 Python 3.5.1 Windows 10 64位,Ubuntu 16.04 64位(虚拟机) SNMP...
    99+
    2023-01-31
    Python SNMP Pyth
  • 安装net-snmp-python
    安装net-snmp-python 下载 net-snmp 。/configure make make install  cd ./python python setup.py build python setup.py test 这里会提...
    99+
    2023-01-31
    net snmp python
  • 【Python】安装MySQL-pyth
    // wget[root@wode006 tools]# wget https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.5.zip--2015-07...
    99+
    2023-01-31
    Python MySQL pyth
  • python 安装 mysql-pyth
    安装pip install MySQL-python 故障解决!   running build_ext     building '_mysql' extension     error: Microsoft Visual C++ 9.0...
    99+
    2023-01-31
    python mysql pyth
  • AdventNet SNMP API的安装
    要安装AdventNet SNMP API,您可以按照以下步骤进行操作:1. 下载AdventNet SNMP API软件包。您可以...
    99+
    2023-09-22
    AdventNet
  • 安装homeassistant+pyth
    1、基础信息 - 版本信息 - Scientific Linux release 7.6 (Nitrogen) - win10 linux 子系统,centos,wlinux - ...
    99+
    2023-01-31
    homeassistant pyth
  • ubuntu 16.04 安装 pyth
    原文是环境:ubuntu14.04, python2.7本地环境:ubuntu16.04, python2.7转自 http://blog.csdn.net/heybob/article/details/52922645 =========...
    99+
    2023-01-31
    ubuntu pyth
  • Intellij IDEA 安装Pyth
          百度网盘地址:https://pan.baidu.com/s/1d9ArRH6adhDUGiJvRqnZMw                 (1)建议手动安装插件   IDEA Pyhton插件地址:http://pl...
    99+
    2023-01-31
    Intellij IDEA Pyth
  • 详述 Mac 系统下安装及卸载 Pyth
    博主说:对于 Mac 而言,其自带的 Python 2.6 和 Python 2.7 这两个版本已经能够满足我们的大部分需求了,因此除非对某个版本有强烈需求,否则不建议自己安装 Python,因为这是典型的安装容易,删除麻烦。 ...
    99+
    2023-01-31
    系统 Mac Pyth
  • Linux安装Python3与Pyth
    linux自带了Python2而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。 输入python命令,查看可以得知是Python2.7.5版本 [root@GuangBo ~]# python Python 2....
    99+
    2023-01-31
    Linux Pyth
  • centos 7 yum 安装 pyth
    sudo yum install epel-releasesudo yum install python34...
    99+
    2023-01-31
    centos yum pyth
  • LINUX CENTOS7下安装PYTH
    1.查看是否已经安装Python Centos7默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。 使用yum install openssl-devel;安装环境 使用python...
    99+
    2023-01-31
    LINUX PYTH
  • Linux 下安装 pyenv(Pyth
    安装依赖yum -y install gcc gcc-c++ make git patch openssl-devel \zlib-devel readline-devel sqlite-devel bzip2-devel自动安装工具cur...
    99+
    2023-01-31
    Linux pyenv Pyth
  • Win10下安装Python3和Pyth
    1.下载3.65 2.7.15安装文件 Python 2.7.152.安装文件安装时选择all user 所有用户 与 开发环境3.让Python3.6.5和Python2.7.5同时运行一.修改执行文件Python 3.6.5 作为当前...
    99+
    2023-01-31
    Pyth
  • windows 10 64位安装Pyth
    1、下载Python3.6 windows版本的安装包    Python官网地址:https://www.python.org     下载软件包:python-3.6.4.exe    2、安装Python3.6版本,右击软件,以管理员...
    99+
    2023-01-31
    windows Pyth
  • Ubuntu下安装opencv与pyth
    首先先去opencv官网(http://opencv.org/downloads.html)下载linux版本的opencv压缩包,此处下载的opencv3.1版本的。 进入opencv下载的文件夹,解压 unzip opencv...
    99+
    2023-01-31
    Ubuntu opencv pyth
  • win7 64位安装mysql-pyth
    ###今天测试个小程序在win7 64位系统下需要安装一下MySQL-python,参考了一下其他博客,发现都不行,最后用以下方法成功了,写一下留作笔记。1、前提是Python2.7和mysql5.7已经都安装成功。2、发现了这个网站:ht...
    99+
    2023-01-31
    pyth mysql
  • Mac 删除/卸载 自己安装的 Pyth
    官网pkg安装的python版本 第一步:删除框架 sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.71 第二步:删除应用目录 sudo rm -rf "/App...
    99+
    2023-01-31
    Mac Pyth
  • 了解Python及python的安装及启
    为什么python使用这么多?python语法简单,上手容易,精通难。现在使用爬虫比较多,还可以作前端。###########################################################自从20世纪90年...
    99+
    2023-01-31
    Python python
  • Cacti中文版测试snmp及snmp的解决方法
    本篇内容介绍了“Cacti中文版测试snmp及snmp的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Cacti中文版是用php语言...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作