UCD-SNMP代码示例精讲

网络 网络管理
文章中我们对SNMP协议的UCD-SNMP协议软件应用进行了实例代码的讲解。希望对大家能够有所帮助。那么具体内容请大家浏览下文。

经过对SNMP协议的学习,我们接下来对UCD-SNMP软件进行一个实例操作。那么前面我们已经讲述了有关于这个软件的一些基本内容,下面的网络管理程序我们将详细地剖析一下。

一个简单的SNMP网络管理程序

下面, 让我们先应用ucd-snmp写一个的SNMP网络程序, 从应用程序的角度尝试一下这个软件包的使用. 这个程序是如此地简单, 不支持任何命令行参数, 仅仅从代理程序获得关于系统的描述.

程序代码如下:

1) /* snmpapp.c - a simple SNMP application */
2) #include <ucd-snmp/ucd-snmp-config.h>;
3) #include <ucd-snmp/ucd-snmp-includes.h>;
4) #include <ucd-snmp/system.h>;
5) int main(int argc, char * argv[])
6) {
7) struct snmp_session session, *ss;
8) struct snmp_pdu *request, *response;
9)
10) oid myoid[MAX_OID_LEN];
11) size_t myoid_len = MAX_OID_LEN;
12) struct variable_list *vars;
13) int status;
14) init_snmp("snmpapp");
15) snmp_sess_init( &session );
16) session.version = SNMP_VERSION_1;
17) session.peername = "localhost";
18) session.community = "public";
19) session.community_len = strlen(session.community);
20) SOCK_STARTUP;
21) ss = snmp_open(&session);
22) request = snmp_pdu_create(SNMP_MSG_GET);
23) read_objid("system.sysDescr.0", myoid, &myoid_len);
24) snmp_add_null_var(request, myoid, myoid_len);
25) status = snmp_synch_response(ss, request, &response);
26) if (status == STAT_SUCCESS &&
27) response->;errstat == SNMP_ERR_NOERROR)
28) {
29) for(vars = response->;variables; vars; vars = vars->;next_variable)
30) print_variable(vars->;name, vars->;name_length, vars);
31) } else {
32) if (status == STAT_SUCCESS)
33) fprintf(stderr, "Error in packet\nReason: %s\n",
34) snmp_errstring(response->;errstat));
35) else
36) snmp_sess_perror("snmpget", ss);
37) }
38) if (response)
39) snmp_free_pdu(response);
40) snmp_close(ss);
41) SOCK_CLEANUP;
42) return (0);
43) }

#p#代码分析

第2-4行, 必须包含的头文件, 其中<ucd-snmp/system.h>;如果在<ucd-snmp/ucd-snmp-includes.h>;中已包含, 可以省略. 不过, 在头文件中有宏保护, 所以无所谓.

第7-13行, 定义程序所需要的变量.

第14行, 初始化SNMP库.

第15-19行, 初始化会话结构变量. 假定SNMP代理位于本机, community(如何翻译?)名public具有可读权限.

第20行和第41行, SOCK_STARTUP和SOCK_CLEANUP宏定义主要用于在win32平台初始化和清除winsock接口, 而在Unix/Linux环境不做任何事情.

第21行, 打开一个snmp会话. 在下面的会话过程中使用API snmp_open()返回的指针. 关于snmp_open(), 参见相应的man手册.

第22-24行, 创建一个SNMPv1 PDU, 并加入请求代码. 注意这里我们使用的是SNMP Get请求.(宏SNMP_MSG_GET表示).

第25行, 与SNMP代理进行通讯. 这里使用的是同步通讯机制.

第26-37行, 处理反馈. 注意消息及错误的处理方式.

第38-39行, 如果通讯成功, 反馈指针response非空, 必须由程序释放API分配的内存.

第40行, 关闭会话.

ucd-snmp API分为如下几类:

¨ snmp_api
¨ snmp_sess_api
¨ mib_api
¨ variables
¨ default_store
¨ read_config
¨ snmp_alarm
¨ snmp_trap_api
¨ anmp_agent_api

上面程序用到如下API: init_snmp(), snmp_sess_init(), snmp_open(), snmp_pdu_create(), read_objid(), snmp_add_null_var(), print_variable (), snmp_errstring(), snmp_sess_perror(), snmp_pdu_free(), snmp_close().

具体的API语义和语法, 参见相应的man手册或头文件.

在Rad Hat Linux 6.2环境中用如下命令编译该程序:gcc -g -I/usr/local/include -o snmpapp snmpapp.c -L/usr/local/lib -lsnmp

其中/usr/local为ucd-snmp 4.2.1的确省安装目录.

编译通过, 运行程序获得SNMP代理运行系统的描述. (在当前情况下, 当然是本机Red Hat Linux 6.2系统的描述). 当然, 必须事先在本机运行SNMP代理:# /usr/local/sbin/snmpd (必须是root用户)

责任编辑:佟健 来源: csdn.net
相关推荐

2010-07-01 12:38:31

ucd-snmp

2010-07-05 10:16:31

ucd-snmpSNMP Agent

2010-07-01 14:53:09

SNMPMIBUCD-SNMP

2010-07-02 10:18:23

ucd-snmpMIB

2010-07-05 09:37:19

ucd-snmpsnmpd扩展

2010-09-26 11:17:55

dhcp relay配

2020-09-25 16:40:52

Selenium

2010-07-28 15:10:21

NFS配置

2010-07-21 16:57:44

telnet命令

2019-01-03 12:50:52

Spring BootJava编程语言

2010-03-29 22:33:39

2010-08-30 16:14:26

DHCP实验

2009-12-07 16:21:50

Juniper交换机

2010-06-11 16:33:05

IPv6协议网络

2010-04-25 17:18:09

TCP负载均衡

2010-09-09 10:09:07

Java内存分配

2009-12-02 12:52:00

华为路由器命令

2010-06-29 15:32:14

配置SNMP组

2020-08-07 08:03:37

IONetty

2021-10-26 17:05:55

Redis字符串复杂度
点赞
收藏

51CTO技术栈公众号