浅谈 Linux 中开发 SNMP Trap SNMP Trap 是一种标准的报告机制,广泛应用在各种网络管理软件中。 本文 详细介绍了 SNMP Trap 的基本概念,以及 Linux 下面 net-snmp 对 SNMP Trap 的开发与应用。 1. SNMP Trap 简介 SNMP 简单网络管理协议 (Simple Network Management Protocol) 是一种应用 层协议,是 TCP/IP 协议族的一部分。 SNMP Trap 是 SNMP 的一部分, 当被监控段出现特定事件, 可能是性能问题, 甚至是网络设备接口宕掉等, 代理端会给管理站发告警事件。 总的来说, SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制。 2.
二、snmptt 1、SNMPTrap、snmptt安装 yum install -y net-snmp net-snmp-libs net-snmp-utils net-snmp-perl /usr/sbin/snmptthandler /etc/snmp/snmptt.conf EVENT test .1.3.6.1.4.1.2345 “just for test /etc/snmp/snmptt.ini date_time_format= %Y/%m/%d %H:%M:%S #### 设置时间格式,读取的SNMPTrap信息之后写入 [TrapFiles] snmptt_conf_files = <<END /etc/snmp/snmptt.conf END net-snmp-libs net-snmp-utils net-snmp-perl mrtg 2、从zabbix源码包中拷贝perl脚本到/usr/bin/目录下,并增加执行权限 cp zabbix
一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。 它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。 如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。 这种访问方式和文件系统的组织方式一致。两者的主要区别在于文件系统中的路径名可以以绝对也可以以相对方式表示,而MIB数据 对象只能以绝对方式表示,不能使用相对方式。 但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库 (MIB)。
It is a signal to the SNMP Manager by the Agent on the occurrence of an event. Manager. 1.3.6.1.2.1.1 - SNMP MIB-2 System 1.3.6.1.2.1.2 - SNMP MIB-2 Interfaces 1.3.6.1.2.1.3 - at Cisco MIB information: http://snmp.cloudapps.cisco.com/Support/SNMP/do/BrowseMIB.do? local=en&step=2 Load MIB file: The files below is F5 MIB file. We can use MIB Browser to load these file ,and you can see the F5 private OID in the picture. 参考
文 | 编程随想曲 首发 | 编程随想曲 网管系统通常会通过SNMP监控获取设备的相关信息,通过Trap接收设备的告警信息,今天的文章告诉你,如果你需要做SNMP的对接,需要问对方要哪些信息。 一、SNMP信息 1. snmp_version 你要告诉对方网管平台支持的SNMP版本,方便对方设置对应版本。 2. ip 这里的ip是指你接收snmp信息的服务器ip,对方会配置该ip,并且只有该ip才能收到snmp信息。对方有时候也会配置一个网段的范围。 3. community 团体名,相当于访问snmp的钥匙,你与对方互相协商一个,一般默认是public。 4. port 接收snmp信息的端口,默认是161。 5. set the community string ip des_server 四、发送测试Trap 网管系统配置好Trap信息后,一般我们可以通过Mib Browser工具发送测试Trap。
get-request操作:从代理进程处提取一个或多个参数值(网管系统发送) get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值(网管系统发送) set-request操作 :设置代理进程的一个或多个参数值(网管系统发送) get-response操作:返回的一个或多个参数值。 Error status: 代理进程回复响应时0-5中的一个数字 0 noError 一切正常 1 tooBig 代理无法将回答装入到一个SNMP报文之中 2 noSuchName 操作指明了一个不存在的变量 3 badValue 一个set操作指明了一个无效值或无效语法 4 readOnly 管理进程试图修改一个只读变量 5 管理进程接收到具有一个无效共同体的报文 5 egpNeighborLoss 一个EGP相邻路由器变为故障状态 6 enterpriseSpecific 代理自定义的事件,需要用后面的“特定代码”来指明
根据管理者和被管理的设备在网络管理操作中的不同职责,SNMP定义了3种角色。如下图, ? 网络管理系统:又称管理站、NMS。 3.支持的平台 net-snmp可以在BSD UNIX、Linux、Windows等操作系统上编译运行。 4.实验环境 操作系统,CentOS 6.4 X86_64 软件版本,net-snmp 5.5 5.同步时间 [root@snmp ~]# ntpdate 202.120.2.101 6. /snmpconf.1.gz /usr/share/man/man5/snmp_config.5.gz /usr/share/man/man5/snmpd.conf.5.gz /usr/share/man Linux、Unix和Windows系统运行snmpd后,直接具备了SNMP协议支持,可以被管理站管理。许多商业化的Linux中使用snmpd作为系统的SNMP代理。
我用Linux做Cacti监控服务器监控Windows主机时出现以下错误,自己检查Windows主机的SNMP端口正常,防火墙也正常关闭,用snmpwalk命令也报错。 1.错误如下: 2.检查Windows主机的端口和防火墙 3.在Linux服务器上用snmpswak命令提示错误 4.解决问题(是因为Windows主机的SNMP服务没有"接受团体名称") 5.测试正常
现象: 在CentOS5.8上安装snmp服务出现错误提示“libsensors.so.3 is needed by net-snmp-5.3.1-19.el5.i386”。 操作步骤: # rpm -ivh net-snmp-5.3.2.2-17.el5.i386.rpm warning: net-snmp-5.3.2.2-17.el5.i386.rpm: Header -5.3.2.2-17.el5.i386 原因: 说明net-snmp包依赖lm_sensors和lm_sensors-devel这两个安装包。 方法1: 下载lm_sensors和lm_sensors-devel这两个RPM包,将其安装后再安装net-snmp-5.3.1-19.el5.i386.rpm 成功。 el5.i386.rpm # yum install lm_sensors lm_sensors-devel -y 将其安装后再安装net-snmp相关RPM包即可成功。
参数--prefix用来告诉系统安装信息存放的路径,如果没有指定路径,直接执行./configure,那么程序包都会安装在系统默认的目录下,通常为:/usr/local下 执行命令". )(该系统设备的地理位置): 4、Location to write logfile (日志文件位置): 5、Location to Write persistent(数据存储目录): ? 5、Location to Write persistent(数据存储目录): /var/net-snmp ? 能够正常返回系统的名字就说明SNMP安装配置成功了。也可以使用命令"snmpget --version"查看当前的安装版本号来验证是否安装成功,如果安装成功,则显示当前的安装版本号,如下图所示: ? ) 4、执行"make uninstall"命令卸载SNMP 5、删除/usr/local下的snmp目录以及snmp目录里面的所有文件,usr/local/snmp是SNMP的安装路径 如下图所示
一套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议。 (1)管理信息库MIB:任何一个被管理的资源都表示成一个对象,称为被管理的对象。 每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。它们之间的关系如图1所示。 NMS Agent和MIB的关系 ? SNMP共有5种报文,所以其PDU也有5中,第七点会详细介绍SNMP的5种协议数据单元。 0x01 SNMP的5种协议数据单元 SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。 get-request操作:从代理进程处提取一个或多个参数值。 图1描述了SNMP的这5种报文操作。请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。 SNMP的5种报文操作 ?
snmp discovery with python #! processing import Process, Queue, Pool import time import subprocess from IPy import IP import sys from snmp import Snmp q = Queue() oq = Queue() #ips = IP("10.0.1.0/24") ips = ["10.10.10.28","10.10.10.29 =None): self.ip = ip self.mac = mac self.snmp_response = snmp_response () h = HostRecord() h.ip = ipaddr h.snmp_response = s.query() print
SNMP工作流程如图 四、SNMP报文格式 下图是封装成UDP数据报的5种操作的SNMP报文格式。 设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文 b – 差错状态(error status) 由代理进程回答时填入0~5中的一个数字,见下图描述 c – 差错索引(error b – trap类型 此字段正式的名称是generic-trap,共分为表4中的7种 当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。 3 10.0.0.51 89.1.1.42 5 假设网管站欲取得这张路由表的信息,该表的索引是目的网络地址。 5、Trap PDU Trap PDU的有如下的形式 Trap是被管设备遇到紧急情况时主动向网管站发送的消息。网管站收到trap PDU后要将起变量对偶表中的内容显示出来。
SNMP对于任何程序设计人员来说是特别易于理解的。总体的简化能够很好地把这个系统简化。一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自网络的各种请求信息。 SNMP被广泛应用在NMS网络管理系统中(Network Management System)。 尽管Net-SNMP提供了可用来构建你自己的NMS网管系统的所有工具,我们不会再进一步讨论关于NMS的话题。 不过请记住,如果你认为你的SNMP设备厂商没有提供SNMP代理方面的详细信息,很可能是因为他们希望你购买他们的NMS网络管理系统,或者购买能够在另一个NMS平台上使用的插件。 1.2. SYNTAX INTEGER { unknown(1), onLine(2), onBattery(3), onSmartBoost(4), timedSleeping(5)
配置snmptrap vi /etc/snmp/snmptrap.conf,在文件最后添加如下 agentAddress udp:127.0.0.1:161 view systemonly included sysServices 72 proc mountd proc ntalkd 4 proc sendmail 10 1 disk / 10000 disk /var 5% includeAllDisks 10% load 12 10 5 trap2sink 172.16.140.214 csg-tsgz991 iquerySecName internalUser
收集整理一些Linux下snmp常用的OID,用做服务器监控很不错。 = INTEGER: listen(2) TCP-MIB::tcpConnState.192.168.1.2.22.192.168.1.16.5035 = INTEGER: established(5) 5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2 15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3 CPU信息 percentage .1.3.6.1.2.1.1.3.0 系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2.1.1.1.0 获取系统基本信息 hrSWRunName WALK .1.3.6.1.2.1.25.6.3.1.2 系统安装的软件列表 hrSWInstalledName WALK SNMP
SNMP 使用UDP协议,因为UDP协议效率较高,用它来实现网络管理不会太多地增大网络负荷 在大范围管理网络的时候这个协议显得尤为重要,还有很多路由设备中采用SNMP协议来进行流量查看管理。 SNMP Community String 这个是snmp协议的中一个类似密码的配置项,正是因为很多管理员没有配置这个选项才导致严重的信息泄漏,甚至被攻陷服务器 Windows 和Linux中默认的值是 snmp-check –c public –v 2c 192.168.1.1 ? 从结果可以看出并没有哈,用这个小实验可以看出一点,这里的修改只是改变了snmp查询时候的MIB库的内容,而不是对系统实质性的修改 那么刚才我打算修改后为了后期渗透调用的想法就失败了 2. 留着以后擦屁股时候用 目标系统的管理员或者使用snmp协议管理流量的路由设备可能会被我们修改的信息所蒙骗,即使发生了大流量洪峰也可能蒙混过关而不被察觉! 3.
在进行winsnmp及其它snmp api进行snmp开发时,基本上都会有一个接收trap的功能。对于初学者来说,即使了解了不少snmp的知识,但如果没有亲自实现出结果,对它的理解还是有欠缺的。 snmp trap的原理就不多说了,这里借助net-snmp的snmptrap来先进行一个感性的实现。前提是安装好net-snmp, 安装步骤见前面的博文。 1.snmp trap接收端的配置。 命令为: snmptrapd -c C:\usr\etc\snmp\snmptrapd.conf -f -Le -d 运行成功如图: 2.snmp trap的模拟发送。 注意:前面的snmptrap.exe文件需要把绝对路径加上,因为系统中也有一个叫snmptrap.exe的文件,那个是自带的。 其中第一个ip地址为运行上面配置的主机地址,其余不用管。
SNMP Inform Requests功能允许路由器向SNMP管理器发送通知请求。 设备厂商会提供) ②命令方式:发送各种TRAP命令(Manager地址后面一定要加端口号162),在Manager端看反应结果,在Agent端无反应 ③自动触发:配置snmpd.conf设置触发TRAP,系统发生某类错误时会自动触发相应类型的 机器 M2 模拟发送 SNMP Trap 的设备,将调用 net-snmp 的命令行程序 snmptrap 发送一个 Trap。 2C 01 02 01 02 01 0C 30 17 06 06 2B 04 01 ..,......0...+.. 0064: 02 03 01 04 0D 74 65 73 74 5F (5).authenticationFailure:表示发送方的snmp消息检验失败 (6).egpNeighborLoss:表示发送协议实体的EGP邻居已被标记为Down,相邻关系已经不存在。
一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。 它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。 如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。 这种访问方式和文件系统的组织方式一致。两者的主要区别在于文件系统中的路径名可以以绝对也可以以相对方式表示,而MIB数据 对象只能以绝对方式表示,不能使用相对方式。 但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库 (MIB)。