Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338929
  • 博文数量: 100
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-31 11:37
个人简介

活到老,学到老

文章分类

全部博文(100)

文章存档

2018年(1)

2017年(2)

2016年(11)

2015年(82)

2014年(4)

我的朋友

分类: LINUX

2015-07-01 15:06:14

一,trap的用途
TRAP是提供从代理进程到管理站的异步报告机制。
为了使管理站能够及时而又有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(TRAP)制导的轮讯过程。代理进程负责在必要时 向管理站报告异常事件,得到异常事件的报告后,管理站可以查询有关的代理,以便得到更具体的信息,对事件的原因做进一步的分析
二,trap的工作流程
1,agent端:
A,  编写mib文件,确定好trap名称等信息。
B,  命令方式:发送各种trap命令(manager地址后面一定要加端口号162),在manager端看反应结果,在agent端无反应
C,  自动触发:配置snmpd.conf设置触发trap,系统发生某类错误时会自动触发相应类型的trap,发送给manager
D,  程序方式:一部份trap需要写c语言程序,用相应的api(send_easy_trap 或 send_v2trap)发送

注:C、D两种方式我都没有去试,一下我是用的是c程序中调用popen函数打开trap命令去做的。
2,manager端:
A,  配置snmptrapd.conf文件,设置访问权限
B,  将mib导入到mibs文件夹中
C,  用perl等脚本语言编写处理trap的程序
D,  配置snmptrapd.conf文件,添加traphandler项,将不同的trap对应到不同的处理程序上
三,trap的环境配置
   管理端才需要 snmptrapd.conf

在/usr/local/net-snmp/share/snmp/下配置snmptrapd.conf,

  1. authCommunity log,execute,net public
  2. #设置所有用户的访问权限:可执行,记录,传递
四、管理端处理trap消息
    在snmptrapd.conf中添加
   举个例子, 需要处理哪一个oid,用什么脚本区处理,就在snmptrapd.conf添加以下

  1. traphandle .1.3.6.1.6.3.1.5.1 page_me up
五、管理端命令测试
管理端启动命令:snmptrapd –d –f –Lo

上面命令中的选项表示:
  • -C : 表示不使用net-snmp默认路径下的配置文件snmptrapd.conf;
  • -c : 指定snmptrapd.conf文件;
  • -d : 显示收到和发送的数据报,通过这个选项可以看到数据报文;
  • -f  : 默认情况下,snmptrapd是在后台中运行的,加上这个选项,表示在前台运行;
  • -L : 指定日志记录在哪里,后面的o表示直接输出到屏幕上,如果是跟着f表示日志记录到指定的文件中;
六、代理端snmptrap

 snmptrap可模拟发送不同snmp协议版本的trap包。各协议版本的snmptrap使用方法略有不同。

发送V1版本trap报文的方法

sudo snmptrap -v1 -c public 10.10.12.219 1.3.6.1.4.1.1 10.10.12.219 2 3 1000 1.3.6.1.9.9.44.1.2.1 i 12 1.3.4.1.2.3.1 s test_snmptrap
上面指令各项参数的意思分别为:
snmptrap -v1 -c public 10.10.12.219 1.3.6.1.4.1.1 10.10.12.219 2 3 1000
命令 Snmp协议版本 共同体 Snmp管理端IP  Enterprise-OID Snmp代理IP Trap类型  Trap特征码 uptime
1.3.6.1.9.9.44.1.2.1 I 12 12 1.3.4.1.2.3.1 s test_snmptrap
被发送参数的OID 数据类型 数据值 被发送参数的OID 数据类型 数据值

发送V2版本trap报文的方法
sudo snmptrap -v 2c -c public 10.10.12.219 "aaa" 1.3.6.1.4.1.2345 SNMPv2-MIB::sysLocation.0 s "just here" 
上面指令各项参数的意思分别为:
  • 10.10.12.219 “aaa”:分别是snmp代理的IP和主机名称,主机名称可以为空;
  • 1.3.6.1.4.1.2345:企业OID,Enterprise-OID;
  • SNMPv2-MIB::sysLocation.0 s “just here”:分别是:数据OID、数据类型、数据值。
七、用popen调用snmpstrap命令

  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<sys/types.h>
  4. #include<stdlib.h>
  5. #include<string.h>

  6. int sendtrap(char *CMD);

  7. char managerIP[20]="192.168.11.56:162";
  8. char managerName[20]="hehe";
  9. char Enterprise_OID[30]="1.3.6.1.4.1.201566";

  10. int main(int argc,char**argv)
  11. {
  12.     char CMD[30]="pf addNotification";

  13.     if(0<sendtrap(CMD)
  14.     {
  15.         printf("%s send failure\n",CMD[30]);
  16.     }
  17.     return 0;
  18. }

  19. int sendtrap(char *CMD)
  20. {
  21.     char dataOID[50]="";
  22.     char dataType[1]="";
  23.     char dataValues[30]="";

  24.     FILE *f;
  25.     char command[250]="";
  26.     
  27.     bzero(command,250);
  28.     if(!strcmp(CMD,"pf addNotification"))
  29.     {
  30.         strcpy(dataOID,"1.3.6.1.4.1.201566.1.14.1");
  31.         strcpy(dataType,"s");
  32.         strcpy(dataValues,"pf add");
  33.     }
  34.     else
  35.     {
  36.         printf("the cmd is not fund\n");
  37.         return -1;
  38.     }
  39.         
  40.     strcpy(command,"snmptrap ");
  41.     strcat(command,"-v 2c -c public ");
  42.     strcat(command,managerIP);
  43.     strcat(command," ");
  44.     strcat(command,"\"");
  45.     strcat(command,managerName);
  46.     strcat(command,"\"");
  47.     strcat(command," ");
  48.     strcat(command,Enterprise_OID);
  49.     strcat(command," ");
  50.     strcat(command,dataOID);
  51.     strcat(command," ");
  52.     strcat(command,dataType);
  53.     strcat(command," ");
  54.     strcat(command,"\"");
  55.     strcat(command,dataValues);
  56.     strcat(command,"\"");
  57.     printf("%s\n",command);
  58.     f=popen(command,"r");
  59.     if(f==NULL)
  60.     {
  61.         printf("command error\n");
  62.         return -1;
  63.     }
  64.     pclose(f);
  65.     return 0;
  66. }



阅读(1708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~