`

浅谈 Linux 系统中的 SNMP Trap(转)

 
阅读更多

 

简介

本文讲解 SNMP Trap,在介绍 Trap 概念之前,首先认识一下 SNMP 吧。

简单网络管理协议(Simple Network Management Protocol)是一种应用层协议,是TCP/IP协议族的一部分。它使网络设备之间能够方便地交换管理信息。能够让网络管理员管理网络的性能,发现和解决网络问题及进行网络的扩充。

目前SNMP已成为网络管理领域中事实上的工业标准,并被广泛支持和应用,大多数网络管理系统和平台都是基于SNMP的。

SNMP 管理控制框架

简而言之,SNMP 协议是用来管理设备的协议,何谓管理呢?我斗胆将其归纳为两个基本点:监控(get)和配置(set)。也就是说:人们管理一个设备的基本手段可以归纳为 get 和 set 两种操作。如图 1 所示。


图 1. SNMP 基本管理控制框架
图 1. SNMP 基本管理控制框架

如果 NMS( 网管系统 ) 需要查询被管理设备的状态,则需要通过 SNMP 的 get 操作获得设备的状态信息;同样,如果 NMS 需要修改或者配置被管理设备的参数,则需要通过 SNMP 的 set 操作来完成。

什么是 MIB?

MIB 是描述被管理设备上的参数的数据结构。如前所述,管理一个设备,就是利用 SNMP 协议,通过网络对被管理设备上的参数进行 get 和 set 操作。

那么如何组织被管理设备上的参数呢?多数情况下,可以 get 和 set 的参数实在多得惊人,假如仅仅简单地线性罗列它们,操作会十分不便。想象一下把 1000 个参数列成一张表,需要使用的时候查询这样一张表会有多么困难啊?比如您打算在地球上找一个城市,”Ithaca”,如果没有归类和分级,则需要查找一张 巨大的表格。但如果告诉您城市” Ithaca”是:南美洲国家圭亚那的北部城市"Ithaca",那么就容易些了吧?

被管理的设备相当复杂,拥有很多可以被管理的参数,需要对它们进行归类,分级。管理信息库 (MIB) 是一个具有分层特性的信息的集合,我们可以通过 SNMP 去存取它。MIB 的成员是一些被管理的对象 (Managed Object),以对象标示符 (Object Identifiers) 来区分它们。被管理的对象由一个或多个对象实例 (Object Instances) 组成,本质上,这些对象实例就是变量。

在 MIB 的层次结构中,一个对象标示符唯一标识了被管理对象。MIB 的层次结构可以被描述成无根名的树,树的级别被不同的组织所划分。如下图所示:


图 2. MIB 树
图 2. MIB 树

很多能够被 SNMP 管理的对象都是由标准组织定义好的。比如系统磁盘的信息,用 OID ”1.3.6.1.4.1.2021.9” 表示。这串数字是国际标准化组织协商定义好的,大家都要去遵循它。当然,国际组织不可能预知未来,如果您要开发的设备有一些管理需求没有任何 RFC 定义过,那么您也可以编写自己的 MIB 文件来定义私有的 MIB 对象。

什么是 SNMP Trap

前面介绍的 get/set 操作都是从 NMS 发送到被管理设备的。但有时候,能够从被管理设备主动发送信息到 NMS 也是非常必要的。

SNMP Trap 是 SNMP 的一部分,当被监控段出现特定事件,可能是性能问题,甚至是网络设备接口宕掉等,代理端会给管理站发告警事件。假如在特定事件出现的时刻,不是由 Agent 主动通知 NMS,那么 NMS 必须不断地对 Agent 进行轮询。这是非常浪费计算资源的方法,正如人们用中断通知 CPU 数据的到达,而不是让 CPU 进行轮询一样。Trap 通知是更加合理的选择。

用一句话来说的话,SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制。这是本文主要关注的话题。

NET-SNMP 简介

在 Linux 系统中,我们可以选择 net-snmp 来处理绝大多数和 SNMP 相关的工作。

NET-SNMP 是一种开放源代码的 SNMP 协议实现。它支持 SNMP v1, SNMP v2c 与 SNMP v3,并可以使用 IPV4 及 IPV6 。也包含 SNMP Trap 的所有相关实现。Net-snmp 包含了 snmp 实用程序集和完整的 snmp 开发库。

用户使用 net-snmp 提供的工具,可以完成很多关于 SNMP 的操作,具体说来,包括以下一些命令行应用程序:

一些应用程序可以用来从支持 SNMP 的设备获得数据。其中 snmpget, snmpgetnext 可以支持独立请求,比如:

 % snmpget -v 1 -c demopublic test.net-snmp.org system.sysUpTime.0 
 system.sysUpTime.0 = Timeticks: (586731977) 67 days, 21:48:39.77 

 

该命令获得单个独立的 MIB 对象 system.sysUpTime.0 的值。

而 snmpwalk, snmptable, snmpdelta 则用来支持重复请求。

 % snmpwalk -v 2c -c demopublic test.net-snmp.org system 
 SNMPv2-MIB::sysDescr.0 = HP-UX net-snmp B.10.20 A 9000/715 
 SNMPv2-MIB::sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.hpux10 
 SNMPv2-MIB::sysUpTime.0 = Timeticks: (586998396) 67 days, 22:33:03.96 
 SNMPv2-MIB::sysContact.0 = Wes Hardaker wjhardaker@ucdavis.edu 
 SNMPv2-MIB::sysName.0 = net-snmp 

 

上面的命令返回所有 system 节点以下的 MIB 对象的值。

命令 snmpset 对支持 SNMP 的设备配置属性。如下例所示:

 $ snmpget -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0 
  UCD-DEMO-MIB::ucdDemoPublicString.0 = "hi there!"
 $ snmpset -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0 s "Hello, world!"
  UCD-DEMO-MIB::ucdDemoPublicString.0 = "Hello, world!"
 $ snmpget -v 1 -c demopublic test.net-snmp.org ucdDemoPublicString.0 
  UCD-DEMO-MIB::ucdDemoPublicString.0 = "Hello, world!"

 

命令 snmpdf, snmpnetstat, snmpstatus 可以从支持 SNMP 的设备获取特定的信息。比如下面的命令从目标系统上获得类似 netstat 的信息:

 % snmpnetstat -v 2c -c public -a testhost 

 Active Internet (tcp) Connections (including servers) 
 Proto Local Address Foreign Address           (state) 
 tcp   *.echo         *.*                      LISTEN 
 tcp   *.discard      *.*                      LISTEN 
 tcp   *.daytime      *.*                      LISTEN 
 tcp   *.chargen      *.*                      LISTEN 
 tcp   *.ftp          *.*                      LISTEN 
 tcp   *.telnet       *.*                      LISTEN 
 tcp   *.smtp         *.*                      LISTEN 
 Active Internet (udp) Connections 
 Proto Local Address 
 udp    *.echo 
 udp    *.discard 
 udp    *.daytime 
 udp    *.chargen 
 udp    *.time 

 

snmptranslate 命令将 MIB OIDs 的两种表现形式 ( 数字及文字 ) 相互转换。并显示 MIB 的内容与结构,如下所示:

 % snmptranslate .1.3.6.1.2.1.1.3.0 
     SNMPv2-MIB::sysUpTime.0 
 % snmptranslate -On SNMPv2-MIB::sysUpTime.0 
     .1.3.6.1.2.1.1.3.0 

 

Net-snmp 还提供了一个基于 Tk/perl 的,图形化的 MIB 浏览器 tkmib。


图 2. Tkmib 界面
图 2. Tkmib 界面

Net-snmp 还提供了接收 SNMP traps 的守护程序 snmptrapd。可以将选定的 SNMP 消息记录到系统日志 syslog,NT 事件日志,或者文本文件中。或是转发到其它的 SNMP 管理程序 , 也可以传给外部的应用程序。本文的后面我们将用它来演示 SNMP Trap 的收发。

Net-snmp 还提供了一个回应 SNMP 查询的客户端 snmpd. 它集成了大量 SNMP 的模块 . 并可通过动态链接库 , 外部脚本与命令 , 多路 SNMP 技术 (SMUX), 以及可扩客户端协议 (AgentX) 进行扩展 .

此外,net-snmp 还包含了用来开发 SNMP 应用程序的程序库。支持 C 与 perl 的 APIs。因此您可以使用 net-snmp 的工具集完成一些关于 SNMP 的工作,也可以依赖 net-snmp 提供的开发包自己写程序开发您所需要的 snmp 应用。

NET-SNMP 的安装

不同的 Linux 发行版有不同的包管理机制,因此在这里,我打算写下从源代码安装 net-snmp 的过程,适用于各种 Linux 发行版。

sourceforge网站下载适合的 net-snmp 版本,解压。

执行文件目录下的 configure 可执行文件,如果想指定程序包的安装路径,那么您首先建立相应的文件夹来存放安装信息,您可以写成 ./configure --prefix= 您指定的路径名。参数 --prefix 用来告诉系统安装信息存放的路径,如果您没有指定路径,直接执行 ./configure,那么程序包都会安装在系统默认的目录下,通常为:/usr/local 下。例如:

 ./configure --prefix=/usr/local/snmp // 配置指定安装目录,

 

在配置过程中需要进行一些简单的选择:

 default version of-snmp-version: 2 

 Systemcontact information(配置该设备的联系人): yourname 

 System location ( 该设备的位置 ): china 

 Location to write logfile ( 日志文件位置 ): /var/log/snmpd.log 

 Location to Write persistent( 数据存储目录 ): /var/net-snmp 

 

之后编译并且安装:

 #make && make install // 编译并且安装

 

Snmp Trap 的发送和接收演示

实验环境如图 4 所示。在测试机 M1 上启动 snmptrapd 进程,并且在 UDP 1162 端口上监听 SNMP Trap 信息,一旦收到 Trap,snmptrapd 将所接收到的 Trap 信息内容打印到一个本地的文本文件中。 机器 M2 模拟发送 SNMP Trap 的设备,将调用 net-snmp 的命令行程序 snmptrap 发送一个 Trap。


图 4. SNMP Trap 实验环境
图 4. SNMP Trap 实验环境

设计一个 Trap 消息

Trap 消息也是用 MIB 来定义的。在下面的例子中,我们定义了一个 Trap 消息:nodeDown


清单 1. Trap nodeDown 的 MIB 定义

				
 nodeDown NOTIFICATION-TYPE 
    STATUS          current 
    DESCRIPTION     "node down notification"
 ::= { notification 1 } 

 

nodeDown 被定义为 Notification 类型,即 SNMPv2 类型的 Trap。

受空间所限,这里无法贴出完整的 MIB 文件。感兴趣的读者可以参考本文的附件。图 5 给出了实验所用的完整 MIB 树:


图 5. 包含 Trap nodedown 的完整 MIB 树
图 5. 包含 Trap nodedown 的完整 MIB 树

NodeDown 对象位于 notification 节点下,子 OID 为 1。该 Trap 消息中我们打算包含两个数据对象:Host 名字和 IP 地址。Host 和 ip 位于 enterprises.sampleTest.data 分支下。

搭建接受 Trap 的 snmptrapd 进程

可以利用 Net-snmp 提供的 snmptrapd 应用程序作为后台 SNMP Trap 服务器,负责接收被管理设备发送过来的 Trap 消息。

在图 4 实验机 M1 的命令行窗口中输入以下命令:

 snmptrapd – c mysnmptrad.conf udp:1622 

 

该命令启动了一个 snmptrapd 进程,守候在 UDP 端口 1622 上,侦听 SNMP Trap 消息。-c 命令行指定了名为 mysnmptrapd.conf 的配置文件。文件内容如下:

 $cat mysnmptrapd.conf 
 traphandle default lognotify IBM-DW-SAMPLE::nodeDown 
 authCommunity log,execute,net public 

 

其中,以 traphandle 开头的一行定义了 snmptrapd 进程接收到 Trap 消息后应该执行的动作。在本例中,lognotify 是一个 shell 脚本,功能是将接收到的 Trap 信息写入文件 checkfile。

以 authCommunity 开头的一行配置了 snmptrapd 的安全设置,表示可以接收 community 为”public”的 SNMP Trap,并且本进程可以有 log,net 和 execute 的权限。

Log 权限表明收到 Trap 之后 snmptrapd 可以记录日志;execute 表明收到 Trap 之后可以执行 traphandle 中所指定的操作。Net 表示 snmptrapd 可以将接收到的 Trap 信息转发到其他的 Receiver 去。(假如需要转发,还需要对给定的 OID 指定以 forward 为开始的处理细节:forward OID|default DESTINATION)

脚本 lognotify 代码如下:


清单 2. Lognotify 脚本

				
 $cat lognotify 
 #!/bin/sh 
 
 read host 
 read ip 
 vars= 
 
 while read oid val 
 do 
   if [ "$vars" = "" ] 
   then 
     vars="$oid = $val"
   else 
     vars="$vars, $oid = $val"
   fi 
 done 
 
 echo trap: $1 $host $ip $vars >checkfile 

 

使用 snmptrap 发送 SNMP Trap

可以用命令 snmptrap 在测试机 M2 上发送一个 SNMP Trap。假定 Trap 定义在文件 sample-trap.mib 中。在测试机 M2 上输入以下命令:

 snmptrap -m ./sample- trap.mib  -v 2c -c public 16.157.76.227:1622 \ 
"" IBM-DW-SAMPLE::nodeDown     IBM-DW-SAMPLE::nodeDown.1 s "M1"

 

您在试验的时候,将 IP 地址替换为 M1 的真实 IP 地址即可。在上面的例子命令中我们只设置了 Trap nodeDown 消息中的 host 信息。其 OID 为 IBM-DW-SAMPLE::nodeDown.1。字母 s 表示该 OID 的类型为 string。“M1”为该 OID 变量的值。

打开文件 checkfile,应该能够看到如下信息:

 Trap: IBM-DW-SAMPLE::nodeDown <UNKNOWN> UDP: [16.157.76.221]: 
 54329->[16.157.76.227]:1622 DISMAN-EVENT-MIB::sysUpTimeInstance= 
 5:2:22:26.99, SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI:: 
 enterprises.10234.100.1 SNMPv2-SMI::enterprises.10234.100.1.1 = 
“M1”

 

还不错,这表示我们已经能够用 snmptrap 发送 Trap;并且能够使用 snmptrapd 来接收 Trap 消息了。

此例虽然简单,但却是 SNMP Trap 的典型应用。实际生产环境中的 SNMP Trap 应用的基本模型和本例是类似的。

此外,有的时候,我们可能不仅需要 net-snmp 所提供的现成工具,还需要在自己开发的应用程序中编码发送 Trap。Net-snmp 不仅提供了现成的工具,也提供了开发库,下面我们来看看如何在 C 程序中调用 net-snmp 的库函数进行 SNMP Trap 的开发吧。

C 语言直接调用 API 进行 SNMP Trap 处理

C/C++ 依旧是很多系统必须的编程语言,当您的 C/C++ 程序需要发送 SNMP Trap 时,便可以考虑使用 net-snmp 提供的 SNMP 库函数来实现。

所需要的头文件

为了使用 netsnmp 的 API,必须 include 以下这些头文件:

 #include <net-snmp/net-snmp-config.h> 
 #include <net-snmp/net-snmp-includes.h> 

 

初始化

在使用 netsnmp 库之前,先要做一些必要的初始化工作。 函数 init_snmp 初始化 SNMP Library。 假如在调用 init_snmp 函数时指定了文件名,init_snmp 函数将读取配置文件,设置诸如 Access Control 等具体配置。否则会使用默认的 /etc 下面的配置文件。

初始化 SNMP 库之后,我们就可以打开一个会话 session。此后所有和 NMS 的信息交互都在该 session 内进行,因为可能在同一台机器上运行多个 SNMP 进程,每个进程都需要自己独立的 session 来和 NMS 进行信息交互。

调用函数 snmp_sess_init 成功后将返回一个 session 数据结构。我们用该数据结构来设置 session 的属性,比如 peer 的 IP 信息。

这里 peer 就是图 2 中的 M2,在我本人的试验环境下,该机器的 IP 地址为 16.157.76.227。因此在下面的代码中,我将 peername 设置为 16.157.76.227。

还可以设置其它的必要信息,比如 Community,即用于 SNMP 安全的社区设置,前面 snmptrapd 设置为 public,因此这里也设置为 public。这类似于通行密码,不过安全性的确比较弱。

Session 属性设置好之后便可以使用函数 snmp_open 打开 session。示例代码如下。


清单 3. 代码最大长度示例

				
 init_snmp("myexample"); 
 struct snmp_session session;
 snmp_sess_init(&session); 
 session.version = SNMP_VERSION_2c; 
 strcpy(peername,"16.157.76.227:1622"); 
 strcpy(commu,"public"); 
 session.peername = peername; 
 session.community = (unsigned char*)commu; 
 session.community_len = strlen(commu); 
 ss = snmp_open(&session); 

 

打开一个会话之后,程序可以通过该会话发送 Trap 给 NMS,也可以从 NMS 接受 SNMP get/set 操作。

创建 pdu,发送 Trap

每个 Trap 都由 PDU 承载,PDU 有固定的格式。 为了简化描述,本文只描述 SNMPv2 的 Trap 发送方法。SNMP v2c 和 v1 的 Trap 有所不同。请阅读参考文献了解这些不同的细节,此外本文的附件代码中也实现了 v1 的支持代码。SNMPv2 的 Trap PDU 定义如下:


图 3. SNMP Trap PDU 格式
图 3. SNMP Trap PDU 格式

其中各个组成部分的解释如下: sysUpTime– 被管理设备上一次初始化网络到本 Trap 发送以来的累积时间。 snmpTrapOID– 表示本 PDU 是一个 Trap,有固定的值。对于一般的 Trap,RFC1907 给出了通用的定义。用户自定义的 Trap 通常是由以下几个部分连接而成:SNMPv1 Enterprise parameter + '0' + SNMPv1 Specific trap code。 VarBindList– 变量列表,所谓变量就是 Trap 消息中所携带的信息单元。

下面的代码片断用来填充如图三所示的一个 PDU。

  oid objid_sysuptime[] = { 1, 3, 6, 1, 2, 1, 1, 3, 0 }; 
  oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 }; 
  netsnmp_pdu * pdu = NULL; 
  oid tmpOID[MAX_OID_LEN]; 
  size_t tmpOID_len; 
  in_addr_t addr; 

  pdu = snmp_pdu_create(SNMP_MSG_TRAP2); 
  long sysuptime; 
  char tempbuf[128]; 
  memset(tempbuf,128,0); 
  sprintf(tempbuf,"%ld",sysuptime); 
  sysuptime = get_uptime(); 
  oid tmpOID[MAX_OID_LEN]; 
  size_t tmpOID_len; 
  tmpOID_len = MAX_OID_LEN; 
  if(!snmp_parse_oid(TRAP_NAME_1, tmpOID, &tmpOID_len)) 
 snmp_error(“snmp_parse_oid”); 
  snmp_add_var(pdu, objid_sysuptime, sizeof(objid_sysuptime)/sizeof(oid), 't', tempbuf); 
  snmp_add_var(pdu, objid_snmptrap, sizeof(objid_snmptrap)/sizeof(oid),'o', 
               “IBM-DW-SAMPLE::nodeDown”); 

 

首先调用函数 snmp_pdu_create 创建一个 SNMPv2 的 Trap PDU。然后调用 snmp_add_var 向该 PDU 中添加图三所示的三个部分。 sysUpTime 在 SNMPv2-MIB 中定义,其 OID 为”1.3.6.1.2.1.1.3.0”。我们只需要通过 get_uptime() 函数获得该值,然后调用 snmp_add_var 将该变量加入刚才创建的 PDU 中。

同理,snmpTrapOID 也是固定的 :” 1.3.6.1.6.3.1.1.4.1.0”。同样利用 snmp_add_var 函数将我们定义的 OID 为“IBM-DW-SAMPLE::nodeDown”的 Trap 加入该 PDU。 稍稍留意一下,您应该可以发现,sysUpTime 的类型为't',即 timestamp;而 snmpTrapOID 的类型为’ o ’,即 OID 类型。PDU 内的每一个元素都拥有自己的类型。 在该 Trap 中,我们还打算携带两个变量:IBM-DW-SAMPLE::host 和 IBM-DW-SAMPLE::ip。表示一些真正有趣的信息。 添加这两个变量的代码如下所示:

HP-DW-SAMPLE::ip",varId,&varIdLen)) 
    { 
      snmp_perror("ip"); 
    } 
    else 
    { 
       printf("Success snmp_parse_oid\n"); 
       snmp_add_var(pdu, varId, sizeof(varId)/sizeof(oid),'s',"2.2.2.2"); 
    } 
    if(!snmp_parse_oid("HP-DW-SAMPLE::host",varId,&varIdLen)) 
    { 
      snmp_perror("host"); 
    } 
    else 
    { 
       retv =  snmp_add_var(pdu, varId, sizeof(varId)/sizeof(oid),'s',”M1”); 
 } 
 

 

用 snmp_parse_oid 解析相应变量的 OID,然后就可以调用 snmp_add_var 将您想设置的值加入 PDU 中了。假如您直接在代码中使用”HP-DW-SAMPLE::ip”的 OID,(即 1.3.6.1.4.1.10234.10.2),那么可以不需要调用 snmp_parse_oid。该函数只是把一个好记的字符串翻译为一串数字的 OID。不过这就好比用 16.157.1.2 而不使用 www.ibm.com 一样。

至此,一个 SNMP Trap PDU 就创建成功了。将该 PDU 发送出去即可:

  if( !snmp_send(sptr, pdu) ) 
  { 
    snmp_error("Send pdu error \n"); 
  } 

 

结束清理

程序结束之前需要做清理工作,代码如下:

  snmp_close(sptr); 
  snmp_shutdown( "myexample" ); 
  SOCK_CLEANUP; 

 

一个基本的 SNMP Trap 发送程序就这样完成了。我们在 M1 上编译运行它:

 -bash-3.2$ gcc -o t1 snmptrap.c – lnetsnmp 
 -bash-3.2$ ./t1 

 

在 M2 上查看 checkfile,可以验证所收到的 Trap 消息的内容。假如您能看到该文件中正确的内容,那么恭喜您,您已经拥有了编程发送 SNMP Trap 的能力了。

结束语

虽然 SNMP 叫做简单网络管理协议,但似乎并不简单,甚至可以说十分复杂,本文只关注 Trap 的相关概念和编程方法,却也只能走马观花地说个皮毛,还是完全的实用主义。于我而言,这点儿皮毛便可以让我交代手头的工作任务了,但一个有理想的程序员或 许会仅将本文当作一个起点,坚定不移地继续深入地了解更多 SNMP 的知识吧。

分享到:
评论

相关推荐

    snmp_trap 协议接收工具

    `snmp_trap`协议接收工具是针对SNMP Trap消息设计的应用,允许用户在Windows、Linux和Unix系统上接收并处理这些 traps。 SNMP Trap工作原理: 1. 设备触发事件:当网络设备(如路由器、交换机或服务器)遇到预定义...

    Linux下配置SNMP

    Linux 系统中配置 SNMP 需要安装和配置 SNMP daemon(守护进程),并配置 SNMP 代理程序。下面将详细介绍在 Linux 下配置 SNMP 的步骤。 一、安装 SNMP 在 Linux 系统中,可以使用 RPM 包或 YUM 安装 SNMP。使用 ...

    SNMP_TRAP监听工具

    在实际应用中,SNMP_TRAP监听工具通常与网络管理系统(NMS)结合使用,NMS通过解析TRAP信息来自动化网络监控和管理。同时,为了确保安全,应当对发送TRAP的设备进行白名单配置,防止恶意或未经授权的TRAP消息干扰...

    snmp trap命令接收软件

    在SNMP中,Trap消息包含以下关键元素: 1. 发送Trap的源地址:这是发送Trap的SNMP代理的网络地址。 2. Trap类型:定义了特定的事件,例如冷启动(coldStart)、热启动(warmStart)、意外关闭...

    snmp4j实现snmp trap 发送与接收

    在 SNMP4J 库中,Trap 发送可以通过使用 `Snmp` 对象和 `CommandResponder` 接口来实现。`Snmp` 对象用于发送 Trap 消息,而 `CommandResponder` 接口用于处理 Trap 消息的发送和接收。 Trap 接收 在 SNMP4J 库中...

    linux c 基于netsnmp写的trap服务器

    linux下基于netsnmp写的trap服务器,纯C代码,可解析出trap发送方的地址及trap消息内容,可直接编译和测试。编译方法为: gcc trap.c -lnetsnmp

    Java使用SNMP4J实现snmp trap接口发送消息_20170808_LK

    在IT行业中,SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,而SNMP Trap是其一种主动通知机制。当网络设备发生特定事件时,如接口故障、内存溢出等,设备会自动向预设的管理站发送Trap消息,以便...

    用net-snmp的api实现trap接收,windows+linux

    本篇文章将详细介绍如何利用Net-SNMP的C API在Windows和Linux操作系统上实现一个简单的trap接收器,类似于内置的`snmptrapd`工具。 首先,理解SNMP的Trap机制至关重要。Trap是SNMP代理(在网络设备上运行的软件)...

    snmp.zip_SNMP_SNMPtrap_linux snmp_嵌入式 SNMP_嵌入式LINUX SNMP

    3. **MIB(Management Information Base)**:MIB是SNMP中的数据结构,定义了网络设备可管理对象的结构。`snmp_mib.c`文件可能包含了一些基本MIB模块的实现,如RFC1213-MIB,用于描述接口、路由等网络设备信息。 4....

    snmptrap.zip

    TRAP(陷阱)是SNMP中的一个重要概念,它允许网络设备在出现特定事件时主动向网络管理站发送通知。"snmptrap.zip"这个压缩包显然包含了用于在Windows环境下接收和调试SNMP TRAP信息的工具。 **SNMP TRAP详解:** ...

    snmp trap例子 源码

    在IT行业中,SNMP Trap是一个重要的功能,它允许网络设备在特定事件发生时主动向管理站发送通知,而不需要管理站持续轮询设备状态。这个"snmp trap例子 源码"很可能是用VC++编写的,用于帮助开发者理解和实现SNMP ...

    利用SNMP4J实现Snmp Trap完整例子

    利用SNMP4J实现Snmp Trap完整例子 - 企业应用 - Java - JavaEye论坛.mht

    UDP的发送接收例子 及SNMP trap

    在SNMP中,Trap是一种被动的通知机制,当网络设备上发生特定事件(如接口状态改变或内存不足)时,设备会主动向网络管理站发送Trap消息。`TrapReceiver_SNMP4J.java`可能是一个基于SNMP4J库的Trap接收器。SNMP4J是...

    java_conn_SNMPtrap_send_accept.rar_SNMP_SNMPtrap_snmp java

    3. **企业应用**:`利用SNMP4J实现Snmp Trap完整例子 - 企业应用.mht`探讨了SNMP4J在企业环境中的具体应用,可能涉及到网络监控系统、故障检测以及性能统计等方面。 4. **Snmp功能实现**:`使用snmp4j实现Snmp功能....

    C#基于SnmpSharpNet做的SNMP TRAP服务器(包含发送snmp trap消息的测试客户端)

    SNMP TRAP消息其实就是UDP报文,TRAP服务器就是UDP服务器(即接收方,UDP端口为162),发送TRAP消息的其实就是UDP客户端。 本demo包含TRAP接收的服务器和发送TRAP消息的UDP客户端两个部分,基于SnmpSharpNet做的,...

    Snmp_trap的配置与使用.doc

    SNMP Trap 是SNMP中的一个关键特性,它允许网络设备(代理,Agent)主动向网络管理系统(管理站,Manager)发送通知,当设备状态发生变化或者出现异常情况时。下面我们将详细探讨SNMP Trap的配置与使用。 一、SNMP ...

    Use-SnmpTrap-Tools.rar_SNMPtrap

    例如,在 Linux 系统上,你可以使用 `snmptrap` 命令行工具来发送一个自定义的 trap: ```bash snmptrap -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.1.2.3.4 i 12345 ``` 上述命令表示向 IP 地址 192.168.1.1 发送一...

    SNMP.zip_MHT_SNMP_SNMP 协议_SNMPtrap

    SNMP学习资料,对学SNMP的非常有帮助: 在不同操作系统中安装SNMP代理.mht SNMP的5种协议数据单元.mht SNMP基础简介.mht SNMP Informant How-To - OpenNMS.mht SnmpTrap工具的用法.txt

    snmp++实现Trap接收

    在SNMP中,Trap是一种网络设备向管理站发送的被动通知,通常用于报告设备的状态变化。本篇文章将深入探讨如何使用SNMP++库在MFC(Microsoft Foundation Classes)环境下实现Trap接收,以及如何监控接口状态的变化。 ...

    Zabbix - snmp trap监控教程(SNMPTT安装所需软件包)

    在Linux系统中,通常预装了`net-snmp`或`libsnmp`库。 2. **SNMPTT**: SNMP Trap翻译器,负责将接收到的Trap解析并转发给Zabbix。下载源代码后编译安装,配置文件`snmptt.conf`需根据实际情况进行调整。 3. **...

Global site tag (gtag.js) - Google Analytics