小白到底怎么开启SNMP之路【各种经验贴的一条龙】

在虚拟机上安装PFsense详细图解

开启SNMP服务详细图解

Windows下安装SNMP服务端

【Python】SNMP的安装及Python的调用

概述

本文是介绍SNMP在Windows和Linux(Ubuntu)下的安装,以及通过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是10.216.203.2。下面是cmd下通过SNMP查看该主机的信息。

打开cmd,输入:

snmpwalk -v 2c -c public 10.216.203.2 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下打印:

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

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux上启用SNMP,需要执行以下步骤: 1. 安装SNMP软件包。可以使用以下命令在Ubuntu上安装: sudo apt-get install snmpd 2. 配置SNMP。可以编辑SNMP配置文件/etc/snmp/snmpd.conf并根据需要进行更改。例如,可以设置SNMP团体字符串、允许的主机等。 3. 启动SNMP服务。可以使用以下命令启动SNMP服务: sudo service snmpd start 4. 测试SNMP。可以使用SNMP客户端工具(例如snmpwalk)测试SNMP是否正常工作。例如,可以使用以下命令测试SNMPsnmpwalk -v 2c -c public localhost 这将显示SNMP服务器上的所有可用信息。 希望这可以帮助您启用SNMP。 ### 回答2: 在Linux操作系统上开启SNMP需要进行以下步骤: 一、安装SNMP服务程序 1.使用root账户登录Linux系统 2.使用以下命令安装SNMP服务程序: CentOS/RHEL:yum install net-snmp Debian/Ubuntu:apt-get install snmpd 二、配置SNMP服务 1.编辑SNMP配置文件“/etc/snmp/snmpd.conf”: vi /etc/snmp/snmpd.conf 2.配置SNMP服务的基本信息: a.修改rocommunity和rwcommunity命令,设置SNMP服务的读写权限密码: rocommunity public rwcommunity private b.允许SNMP服务访问的网络段: rocommunity public xx.xx.xx.xx rwcommunity private xx.xx.xx.xx c.允许SNMP服务开启协议版本,一般为v1和v2c: rocommunity public default -V v1,v2c rwcommunity private default -V v1,v2c d.其他配置项,如系统名、系统描述等: sysLocation Unknown (edit /etc/snmp/snmpd.conf) sysContact Root (configure /etc/snmp/snmp.local.conf) sysDescr Linux xx.xx.xx.xx 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 3.修改SNMP服务配置文件权限: chmod 640 /etc/snmp/snmpd.conf 4.启动SNMP服务: CentOS/RHEL:systemctl start snmpd Debian/Ubuntu:/etc/init.d/snmpd start 五、验证SNMP服务 通过SNMP客户端软件(如SolarWinds等)向Linux主机发送SNMP请求,验证SNMP服务是否正常开启。可以使用如下命令验证SNMP服务是否存在: snmpwalk -v 2c -c public xx.xx.xx.xx 其中,xx.xx.xx.xx 需要替换成Linux主机的IP地址。如果返回结果中有Linux主机的相关信息,则说明SNMP服务开启成功。 以上就是在Linux操作系统上开启SNMP的步骤。需要注意的是,在配置SNMP时需要严格控制访问权限,避免安全问题。 ### 回答3: Linux是一款开源的操作系统,它广泛应用于各种服务器和网络设备上。一般来说,snmp(简单网络管理协议)是一种网络管理协议,可以用来远程监控和管理网络设备。在Linux操作系统中,snmp具有重要的作用,可以用来监控和管理服务器的性能、网络流量等。 要开启Linux的snmp服务,需要以下步骤: 1. 安装snmp服务:在Linux系统上,snmp服务通常使用SNMP(包含在net-snmp软件包中)来实现,可以使用apt-get等包管理工具安装。 2. 配置snmp服务:在安装完成后,需要对snmp服务进行配置。配置文件通常位于/etc/snmp/snmpd.conf中,可以使用vim等编辑器来进行修改。这里需要注意配置community字符串、trap服务器地址、MIB等信息。 3. 启动snmp服务:在配置完成后,需要启动snmp服务。可以使用systemctl启动或者停止snmp服务。 4. 测试snmp服务:最后一步是测试snmp服务是否工作正常。可以使用snmpwalk等命令来测试snmp服务是否成功开启。 当开启了Linux的snmp服务后,就可以使用snmp协议来远程管理服务器。因为Linux系统是多用户的,需要特别注意snmp服务的安全设置,避免信息泄露、攻击等问题。可以通过配置snmpd.conf配置文件等方式来加强snmp服务的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值