2022年snmp源码分析 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年snmp源码分析 .pdf》由会员分享,可在线阅读,更多相关《2022年snmp源码分析 .pdf(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、#include #include #include #if HAVE_STDLIB_H #include #endif #if TIME_WITH_SYS_TIME # ifdef WIN32 # include # else # include # endif # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #include util_funcs.h 包含自己的头文件#include Display_time.h #define EXAMPLE_STR_LEN 300 #defin
2、e EXAMPLE_STR_DEFAULT life the universe and everything int example_int = 42; char example_strEXAMPLE_STR_LEN; void example_parse_config_exampleint(const char *token, char *cptr); void example_parse_config_examplestr(const char *token, char *cptr); void example_free_config_exampleint(void); void exam
3、ple_free_config_examplestr(void); 这个数组的类型是struct variableN , 其中 N 是这个数组中 OID 号的最长的数,即:结构体最后一个成员(这个成员是个数组)定义了MIB Tree OID 的底层数字。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - N 定义了 MIB Tree OID 的底层的层数(也就是这个数组的长度) 。所有有效的 N 数字都定义在了 文件中。struc
4、t variableN 类型成员的说明:1) :FoxmailINT :这个 magic number 是在自己的头文件 Display_time.h 中宏定义,这个参数被用来传递给CallBack 例程,用来决定那个object被查询。2) :ASN_INTEGER :这个参数说明了object的类型,所有有效的类型在snmp_impl.h 文件中列表说明。3) :RONLY:这个参数说明了object 是否能够被 set。4) :var_foxmail :当有 object 被查询时,这个 CallBack 例程被调用。一般的情况下,同一个文件中的所有的object 使用相同的 allBa
5、ck 例程。5) :1:MIB Tree OID 的底层数字的层数。(这个数字决定了struct variableN中的 N)6) :1:MIB Tree OID 的底层数字。struct variable2 example_variables = EXAMPLESTRING , ASN_OCTET_STR, RONLY , var_example, 1, 1, EXAMPLEINTEGER, ASN_INTEGER, RWRITE, var_example, 2, 2, 1, EXAMPLEOBJECTID, ASN_OBJECT_ID, RONLY, var_example, 2, 2,
6、2, EXAMPLETIMETICKS, ASN_TIMETICKS, RONLY, var_example, 1, 3, EXAMPLEIPADDRESS, ASN_IPADDRESS, RONLY, var_example, 1, 4, EXAMPLECOUNTER, ASN_COUNTER, RONLY, var_example, 1, 5, EXAMPLEGAUGE, ASN_GAUGE, RONLY, var_example, 1, 6, EXAMPLETRIGGERTRAP , ASN_INTEGER, RWRITE, var_example, 1, 7, EXAMPLETRIGG
7、ERTRAP2, ASN_INTEGER, RWRITE, var_example, 1, 8 ; 下面这个数组定义了MIB Tree OID 的顶层数字。oid example_variables_oid = 1, 3, 6, 1, 4, 1, 2021, 254 ; 这个例程在 Agent 程序开始的时候被调用,用来初始化可能被查询的Object 。void init_example(void) 注册我们自己的 MIB Tree ,以便 Agent 查询的时候能够处理。参数:1)descr: 描述这个 MIB Tree 2)var: 变量结构体,类型struct variableN 。名师
8、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - 3)vartype: 类型 struct variableN 4)theoid: MIB Tree 的顶层数字REGISTER_MIB(example, example_variables, variable2, example_variables_oid); 把 example_str 变量设上默认字符串。 example_int 已经在上面初始化了。strncpy(example
9、_str, EXAMPLE_STR_DEFAULT, EXAMPLE_STR_LEN); * Register config handlers for the two objects that can be set * via configuration file directive snmpd_register_config_handler(exampleint, example_parse_config_exampleint, example_free_config_exampleint, exampleint value); snmpd_register_config_handler(e
10、xamplestr, example_parse_config_examplestr, example_free_config_examplestr, examplestr value); snmpd_register_config_handler(examplestring, example_parse_config_examplestr, example_free_config_examplestr, examplestring value); 我们经常需要读取内核中的数据,我们需要在这里进行一些必要的初始化。以加快我们读取这些内核信息的速度,快速反应查询请求。 配置文件处理函数void
11、example_parse_config_exampleint(const char *token, char *cptr) example_int = atoi(cptr); void example_parse_config_examplestr(const char *token, char *cptr) 必须确保字符串长度小于分配的空间。if (strlen(cptr) magic) case EXAMPLESTRING: sprintf(string, example_str); 在上面时假设返回值是integer ,但是并不是,所以需要重新设置var_len 。*var_len =
12、 strlen(string); return (u_char *) string; case EXAMPLEINTEGER: 这种情况,上面的假设的长度是正确的,但是这个object 是可以写的,所以需要设置 write_method 。long_ret = example_int; *write_method = write_exampleint; return (u_char *) & long_ret; case EXAMPLEOBJECTID: oid_ret0 = 1; oid_ret1 = 3; oid_ret2 = 6; oid_ret3 = 1; oid_ret4 = 4;
13、oid_ret5 = oid_ret6 = oid_ret7 = 42; 这种情况,上面的假设的长度是错误的。*var_len = 8 * sizeof(oid); return (u_char *) oid_ret; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - case EXAMPLETIMETICKS: 这种情况,上面的假设的长度是正确的,直接返回。long_ret = 363136200; return (u_cha
14、r *) & long_ret; case EXAMPLEIPADDRESS: long_ret = ntohl(INADDR_LOOPBACK); return (u_char *) & long_ret; case EXAMPLECOUNTER: long_ret = 42; return (u_char *) & long_ret; case EXAMPLEGAUGE: long_ret = 42; return (u_char *) & long_ret; case EXAMPLETRIGGERTRAP: 这个 object 是只能够写的 “write -only ”。它的作用是只能够
15、产生一个“trap ”,当读它的时候只能够返回0。long_ret = 0; *write_method = write_exampletrap; return (u_char *) & long_ret; case EXAMPLETRIGGERTRAP2: 这个 object 是只能够写的 “write -only ”。它的作用是只能够产生一个SNMP v2 版本的 “trap ”, 当读它的时候只能够返回 0。long_ret = 0; *write_method = write_exampletrap2; return (u_char *) & long_ret; default: 这种
16、情况,报告一个错误,并把错误写入log。DEBUGMSGTL(snmpd, unknown sub-id %d in examples/var_examplen, vp-magic); return NULL; 当某个 object 是可写的时候,需要设置SET 处理例程。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - - - int write_exampleint(int action, u_char * var_val, u_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年snmp源码分析 2022 snmp 源码 分析
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内