一,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,
-
authCommunity log,execute,net public
-
#设置所有用户的访问权限:可执行,记录,传递
四、管理端处理trap消息
在snmptrapd.conf中添加
举个例子, 需要处理哪一个oid,用什么脚本区处理,就在snmptrapd.conf添加以下
-
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命令
-
#include<stdio.h>
-
#include<unistd.h>
-
#include<sys/types.h>
-
#include<stdlib.h>
-
#include<string.h>
-
-
int sendtrap(char *CMD);
-
-
char managerIP[20]="192.168.11.56:162";
-
char managerName[20]="hehe";
-
char Enterprise_OID[30]="1.3.6.1.4.1.201566";
-
-
int main(int argc,char**argv)
-
{
-
char CMD[30]="pf addNotification";
-
-
if(0<sendtrap(CMD)
-
{
-
printf("%s send failure\n",CMD[30]);
-
}
-
return 0;
-
}
-
-
int sendtrap(char *CMD)
-
{
-
char dataOID[50]="";
-
char dataType[1]="";
-
char dataValues[30]="";
-
-
FILE *f;
-
char command[250]="";
-
-
bzero(command,250);
-
if(!strcmp(CMD,"pf addNotification"))
-
{
-
strcpy(dataOID,"1.3.6.1.4.1.201566.1.14.1");
-
strcpy(dataType,"s");
-
strcpy(dataValues,"pf add");
-
}
-
else
-
{
-
printf("the cmd is not fund\n");
-
return -1;
-
}
-
-
strcpy(command,"snmptrap ");
-
strcat(command,"-v 2c -c public ");
-
strcat(command,managerIP);
-
strcat(command," ");
-
strcat(command,"\"");
-
strcat(command,managerName);
-
strcat(command,"\"");
-
strcat(command," ");
-
strcat(command,Enterprise_OID);
-
strcat(command," ");
-
strcat(command,dataOID);
-
strcat(command," ");
-
strcat(command,dataType);
-
strcat(command," ");
-
strcat(command,"\"");
-
strcat(command,dataValues);
-
strcat(command,"\"");
-
printf("%s\n",command);
-
f=popen(command,"r");
-
if(f==NULL)
-
{
-
printf("command error\n");
-
return -1;
-
}
-
pclose(f);
-
return 0;
-
}
阅读(1798) | 评论(0) | 转发(0) |