自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

UCD-SNMP代碼示例精講

網絡 網絡管理
文章中我們對SNMP協議的UCD-SNMP協議軟件應用進行了實例代碼的講解。希望對大家能夠有所幫助。那么具體內容請大家瀏覽下文。

經過對SNMP協議的學習,我們接下來對UCD-SNMP軟件進行一個實例操作。那么前面我們已經講述了有關于這個軟件的一些基本內容,下面的網絡管理程序我們將詳細地剖析一下。

一個簡單的SNMP網絡管理程序

下面, 讓我們先應用ucd-snmp寫一個的SNMP網絡程序, 從應用程序的角度嘗試一下這個軟件包的使用. 這個程序是如此地簡單, 不支持任何命令行參數, 僅僅從代理程序獲得關于系統(tǒng)的描述.

程序代碼如下:

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環(huán)境不做任何事情.

第21行, 打開一個snmp會話. 在下面的會話過程中使用API snmp_open()返回的指針. 關于snmp_open(), 參見相應的man手冊.

第22-24行, 創(chuàng)建一個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環(huán)境中用如下命令編譯該程序:gcc -g -I/usr/local/include -o snmpapp snmpapp.c -L/usr/local/lib -lsnmp

其中/usr/local為ucd-snmp 4.2.1的確省安裝目錄.

編譯通過, 運行程序獲得SNMP代理運行系統(tǒng)的描述. (在當前情況下, 當然是本機Red Hat Linux 6.2系統(tǒng)的描述). 當然, 必須事先在本機運行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配

2010-07-28 15:10:21

NFS配置

2020-09-25 16:40:52

Selenium

2010-07-21 16:57:44

telnet命令

2010-03-29 22:33:39

2019-01-03 12:50:52

Spring BootJava編程語言

2009-12-07 16:21:50

Juniper交換機

2010-08-30 16:14:26

DHCP實驗

2009-12-02 12:52:00

華為路由器命令

2010-09-09 10:09:07

Java內存分配

2010-06-11 16:33:05

IPv6協議網絡

2010-04-25 17:18:09

TCP負載均衡

2020-08-07 08:03:37

IONetty

2024-11-13 11:12:08

JVM內存區(qū)域

2024-05-17 12:43:49

Python編程開發(fā)
點贊
收藏

51CTO技術棧公眾號