浅谈 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.
一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。 它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。 如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。 这种访问方式和文件系统的组织方式一致。两者的主要区别在于文件系统中的路径名可以以绝对也可以以相对方式表示,而MIB数据 对象只能以绝对方式表示,不能使用相对方式。 但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库 (MIB)。
二、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
Basic command of SNMP: GET: The GET operation is a request sent by the manager to the managed device. TRAPS: Unlike the above commands which are initiated from the SNMP Manager, TRAPS are initiated by the 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?
文 | 编程随想曲 首发 | 编程随想曲 网管系统通常会通过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。
Snmp协议分为snmp管理站(client端)和snmp代理(server端),snmp管理站通过udp协议向snmp代理发送请求消息,当snmp代理收到请求消息后,返回snmp管理站需要的内容。 snmp消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。Snmp操作有get、set、trap操作。 消息结构 Snmp协议消息报文分为2个部分:snmp报文头和协议数据单元PDU。 get-request操作:从代理进程处提取一个或多个参数值(网管系统发送) get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值(网管系统发送) set-request操作 :设置代理进程的一个或多个参数值(网管系统发送) get-response操作:返回的一个或多个参数值。
其他服务级的产品也可以通过网管模块实现网络管理,如Oracle、WebLogic都有SNMP进程,运行后就可以通过管理站对这些系统级服务进行管理。 根据管理者和被管理的设备在网络管理操作中的不同职责,SNMP定义了3种角色。如下图, ? 网络管理系统:又称管理站、NMS。 它是SNMP的总控机,提供统一的用户界面访问支持SNMP的设备,一般提供UI界面,并有统计、分析等功能,是网管系统的总控制台。NMS是网络管理操作的发起者。 3.支持的平台 net-snmp可以在BSD UNIX、Linux、Windows等操作系统上编译运行。 Linux、Unix和Windows系统运行snmpd后,直接具备了SNMP协议支持,可以被管理站管理。许多商业化的Linux中使用snmpd作为系统的SNMP代理。
我用Linux做Cacti监控服务器监控Windows主机时出现以下错误,自己检查Windows主机的SNMP端口正常,防火墙也正常关闭,用snmpwalk命令也报错。 1.错误如下: 2.检查Windows主机的端口和防火墙 3.在Linux服务器上用snmpswak命令提示错误 4.解决问题(是因为Windows主机的SNMP服务没有"接受团体名称")
一、安装SNMP 1.1、下载Net-SNMP的源代码 安装环境: yum install -y net-snmp-perl net-snmp-utils perl-ExtUtils-CBuilder 参数--prefix用来告诉系统安装信息存放的路径,如果没有指定路径,直接执行./configure,那么程序包都会安装在系统默认的目录下,通常为:/usr/local下 执行命令". 回车出现下面问题,可以直接回车而不用回答,系统会采用默认信息,其中日志文件默认安装在/var/log/snmpd.log.数据存贮目录默认存放在/var/net-snmp下 1、default version )(该系统设备的地理位置): 4、Location to write logfile (日志文件位置): 5、Location to Write persistent(数据存储目录): ? 能够正常返回系统的名字就说明SNMP安装配置成功了。也可以使用命令"snmpget --version"查看当前的安装版本号来验证是否安装成功,如果安装成功,则显示当前的安装版本号,如下图所示: ?
一套完整的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操作:从代理进程处提取一个或多个参数值。 封装成UDP数据报的5种操作的SNMP报文格式。可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部、trap首部、变量绑定。 ?
虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。 二、SNMP的工作原理 SNMP采用特殊的客户机/服务器模式,即代理/管理站模型。 对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。 SNMP的应用场景如图所示: # 三、SNMP的报文类型 SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request SNMP工作流程如图 四、SNMP报文格式 下图是封装成UDP数据报的5种操作的SNMP报文格式。 可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部、 1、公共SNMP首部 共三个字段: a – 版本 写入版本字段的是版本号减1,对于SNMP(即SNMPV1
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代理,该守护进程能够响应来自网络的各种请求信息。 另一方面,SNMP陷阱能够被用来进行被动形式的网络监控。SNMP陷阱是通过配置SNMP设备的代理,让他在某些动作发生时联系另一个SNMP代理来实现的。 备,可以配置为在某些事件发生时发送SNMP陷阱。 SNMP被广泛应用在NMS网络管理系统中(Network Management System)。 尽管Net-SNMP提供了可用来构建你自己的NMS网管系统的所有工具,我们不会再进一步讨论关于NMS的话题。 不过请记住,如果你认为你的SNMP设备厂商没有提供SNMP代理方面的详细信息,很可能是因为他们希望你购买他们的NMS网络管理系统,或者购买能够在另一个NMS平台上使用的插件。 1.2.
配置snmptrap vi /etc/snmp/snmptrap.conf,在文件最后添加如下 agentAddress udp:127.0.0.1:161 view systemonly included
收集整理一些Linux下snmp常用的OID,用做服务器监控很不错。 应用示例 查看服务器1分钟平均负载: snmpwalk -v1 -c public 127.0.0.1 .1.3.6.1.4.1.2021.10.1.3.1 UCD-SNMP-MIB::laLoad.1 .1.3.6.1.4.1.2021.11.51.0 原始nice占用时间 ssCpuRawNice GET . 1.3.6.1.4.1.2021.11.52.0 原始系统 .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.
SNMP Inform Requests功能允许路由器向SNMP管理器发送通知请求。 但是,接收Inform请求的SNMP代理使用SNMP response PDU确认该消息。如果代理未收到Inform请求,则不会发送回复。如果发送方从未收到响应,则可以再次发送Inform请求。 设备厂商会提供) ②命令方式:发送各种TRAP命令(Manager地址后面一定要加端口号162),在Manager端看反应结果,在Agent端无反应 ③自动触发:配置snmpd.conf设置触发TRAP,系统发生某类错误时会自动触发相应类型的 机器 M2 模拟发送 SNMP Trap 的设备,将调用 net-snmp 的命令行程序 snmptrap 发送一个 Trap。 管理端IP和snmp代理IP一样。
在进行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管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。 它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。 如果把配置管理代理成可以执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。 这种访问方式和文件系统的组织方式一致。两者的主要区别在于文件系统中的路径名可以以绝对也可以以相对方式表示,而MIB数据 对象只能以绝对方式表示,不能使用相对方式。 但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库 (MIB)。
SNMP安全访问 通过与CISCO路由器内部的SNMP代理及MIB进行通信,SNMP系统可以取得对路由器的管理访问 配置了路由器上的SNMP代理后,SNMP系统就可以执行以下任务 trap(路由器事件) SNMP系统使用所谓的community 字符串作为访问路由器SNMP代理的口令,SNMP代理只接受提供正确的 community 字符串的SNMP系统的命令和请求 3哪个SNMP系统被允许访问路由器SNMP代理(在ACL中限制主机IP地址) 配置snmp community字符串: config t snmp-server community *** rw snmp陷阱(trap)和通告(inform)是由路由器SNMP代理自动发往一个或更多SNMP系统的事件。 无论主机是 否存在,TRAP都会向指定的SNMP系统发送。inform总需要来自指定SNMP系统的应答,以验证消息的接收。