snmp编译安装,snmp 安装
0x00概述本文介绍了Windows和Linux(Ubuntu)下SNMP的安装,并通过Python调用其接口。
0x01开发环境Python 3.5.1Windows 10 64位,Ubuntu 16.04 64位(虚拟机)
0x02 SNMPSNMP(简单网络管理协议)由一组网络管理标准组成,包括应用层协议、数据库模式和一组资源对象。该协议可以支持网络管理系统监控连接到网络的设备是否有任何引起管理关注的情况。
0x03 MIB MIB(管理信息库),管理信息库,网络管理协议访问的管理对象数据库,其中包含网络设备的SNMP管理代理可以设置SNMP的变量。
0x04在Windows下安装SNMP的下载链接:https://sourceforge.net/projects/net-snmp/
之后就可以直接安装了。默认安装路径是C:\usr。
安装完成后,在系统变量下添加:C:\usr\bin,打开cmd,进入snmpget test。如果没有错误,安装成功。
0x 05 Ubuntu下SNMP安装和配置下载
$ sudo apt-get install SNMP SNMP SNMP-MIBs-downloader查看SNMP服务状态
$ sudo service snmpd status只是测试SNMP服务是否正常。
$ snmp walk-v 2c-c public localhost 1 . 3 . 6 . 1 . 2 . 1 . 1 . 1 snmp v2-MIB:sys descr . 0=STRING:Linux Ubuntu 4 . 4 . 0-62-generic # 83-Ubuntu SMP Wedjan 18 14:10:15 UTC 2017 x86 _ 64默认情况下,SNMP服务只在本地启动,无法远程获取该主机的SNMP信息。因此要允许远程主机访问
$ sudo netstat -antup grep 161
0 UDP 0 127 . 0 . 0 . 1:161 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 00 0 . 0 . 0:161 0 . 0 . 0:* 10763/snmpd可以看到SNMP服务已经对外开放,这样以后我们就可以在远程主机上进行测试了。
由于SNMP默认只能查看两个设备节点,因此需要进行一些配置才能查看所有节点。打开/etc /etc/snmp/snmpd.conf
Sudvim/etc/snmp/snmpd.conf #在大约45行处添加以下行
仅包含视图系统。1
仅包括视图系统
仅查看包含的内容。1.3.6.1.2.1.25.1最后,配置MIB,否则您可能会报告未知的对象标识符错误。打开/etc/snmp/snmp.conf并注释掉MIB:
sudo vim /etc/snmp/snmp.conf
#由于许可证原因,snmp包没有MIB文件,加载
默认情况下,MIB的数量被禁用。如果您添加了MIB,您可以重新启用
#通过注释掉下面一行来加载它们。# mibs:
06xWindows调用SNMP查看其他主机信息。由于博主使用Ubuntu虚拟机,其IP为192.168.132.130。下面是在cmd下通过SNMP查看这台主机的信息。
打开cmd并输入
SNWalk-V2C-C公共192.168.132.130 1.3.6.1.2.1.1返回
SNMP v2-MIB:sys descr . 0=string:Linux Ubuntu 4 . 4 . 0-62-generic # 83-Ubuntu SMP Wedjan 18 14:10:15 UTC 2017 x86 _ 64成功。
0x07 Python代码调用示例Python代码调用系统的snmpwalk指令查询设备信息。
#编码=utf-8
文件名:snmp_test.py
描述:
要使用系统的snmpwalk查询设备信息,需要先安装snmp。
Windows代码在Linux中很常见。
Windows cmd调用示例:snmpwalk-v2c-c public 127 . 0 . 0 . 1 1 . 3 . 6 . 1 . 2 . 1 . 1 . 1
在Windows cmd下查看主机(192.168.132.130)信息的示例:
snmpwalk -v 2c -c公共192.168.132.130 1.3.6.1.2.1.1.1
进口re
导入操作系统
导入时间
导入平台
if Windows==platform.system():
主机=[192.168.132.130]
否则:#虚拟机运行时检查本地。
主机=[127.0.0.1]
def snmpWalk(主机,oid):
result=OS . popen( snmpwalk-v 2c-c public host oid)。阅读()。split(\n)[:-1]
回送结果
# -
# 获取系统信息
# -
def getSystem(主机):
系统=":"。join(snmpWalk(host, system)[0].split(:)[3:]).条状()
返回系统
# -
# 获取负载信息
# -
def getLoad(主机,loid):
系统负载
load _ OIDs= 1。3 .6 .1 .4 .1 .2021 .10 .1 .3 str(染色体)
返回snmpWalk(host,load_oids)[0].拆分(:)[3]
def getLoads(主机):
load1=getLoad(主机,1)
load10=getLoad(host,2)
load15=getLoad(host,3)
返回负载1、负载10、负载15
# -
# 获取网卡流量
# -
def getNetworkDevices(主机):
获取网络设备信息
device_mib=snmpWalk(主机, RFC1213-MIB:ifDescr )
设备_mib中项目的设备列表=[]:设备列表。追加(项目。split(:)[3].strip())
返回设备列表
def getNetworkData(主机,oid):
获取网络流量
data_mib=snmpWalk(主机oid)
数据=[]
对于数据管理信息库中的项目:
byte=float(item.split(:)[3].strip())
数据。append(str(round(byte/1024,2)) KB )
返回数据
def getNetworkInfo(主机):
device_list=getNetworkDevices(主机)
# 流入流量
inside=getNetworkData(host, IF-MIB:ifInOctets )
# 流出流量
outside=getNetworkData(host, IF-MIB:ifOutOctets )
返回设备列表,内部,外部
# -
# 内存使用率
# -
def getSwapTotal(主机):
swap_total=snmpWalk(host, UCD-SNMP-MIB:memtotalswap。0 )[0]。拆分("")[3]
返回交换合计
def getSwapUsed(主机):
swap_avail=snmpWalk(host, UCD-SNMP-MIB:memavail交换。0 )[0]。拆分("")[3]
swap_total=getSwapTotal(主机)
swap _ used=str(round((float(swap _ total)-float(swap _ avail))/float(swap _ total))* 100,2)) %
返回交换_已用
def getMemTotal(主机):
mem_total=snmpWalk(host, UCD-SNMP-MIB:memtotalreal。0 )[0]。拆分("")[3]
返回内存总数
def getMemUsed(主机):
mem_total=getMemTotal(主机)
mem_avail=snmpWalk(host, UCD-SNMP-MIB:memavail real。0 )[0]。拆分("")[3]
mem _ used=str(round((float(mem _ total)-float(mem _ avail))/float(mem _ total))* 100,2)) %
返回内存_已用
def getMemInfo(host):mem _ used=getMemUsed(host)
swap_used=getSwapUsed(host)return mem _ used,swap _ used
# -
def main():
对于主机中的主机:
打印(= * 10主机= * 10)
start=time.time()
打印(系统信息)
system=getSystem(主机)
打印(系统)
打印(系统负载)
load1,load10,load15=getLoads(主机)
print(load(5min): %s,load(10min): %s,load(15min): %s % (load1,load10,load15))
打印(网卡流量)
设备列表,内部,外部=获取网络信息(主机)
对于我,枚举中的项目(设备列表):
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()
打印(运行时间:,round(end - start,2), s )
if __name__==__main__ :
主()窗口下打印:
==========192.168.132.130==========
系统信息
Linux Ubuntu 4。4 .0-62-通用#83-Ubuntu SMP世界协调时2017年一月18日星期三14:10:15 x86 _ 64
系统负载
负荷(5分钟):0.03,负荷(10分钟):0.03,负荷(15分钟):0.00
网卡流量
lo : RX: 1861.91 KB TX: 1861.91 KB
英特尔公司82545EM千兆以太网控制器(铜):接收:5733.84 KB发送:336.49 KB
内存使用率
内存使用=93.82%交换使用=0.07%
运行时间:2.89 sUbuntu下打印:
==========127.0.0.1==========
系统信息
Linux Ubuntu 4。4 .0-62-通用#83-Ubuntu SMP世界协调时2017年一月18日星期三14:10:15 x86 _ 64
系统负载
负荷(5分钟):0.02,负荷(10分钟):0.02,负荷(15分钟):0.00
网卡流量
lo : RX: 1861.91 KB TX: 1861.91 KB
英特尔公司82545EM千兆以太网控制器(铜):RX: 5738.8 KB TX: 338.76 KB
内存利用率
内存使用=94.14%交换使用=0.07%
运行时间:0.26秒
涉及
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。