基於net-snmp的代理agent開發詳解
花了一兩天時間測試和整理一下。
用net-snmp擴充套件MIB庫,實現方法可歸結為四種:
1)一是靜態庫方式,通過修改配置標頭檔案,在相應地方包含新引入的mib模組的.c和.h檔案,然後重新編譯庫檔案和擴充套件程式碼;這種方式不夠靈活,每次修改擴充套件的MIB後,都需要重新編譯snmpd和擴充套件的程式碼,再重新安裝snmpd到系統中。
2)二是編譯動態共享庫,只需把新引入的MIB模組的.c和.h檔案編譯成動態庫,通過設定能夠讓代理程式載入。
對於第二種方式,一需要編譯成.so動態共享庫,二需要原代理程式是否包含dlmod或load命令,三還要看系統是否支援。一般情況下僅支援Unix平臺。
3)三是擴充套件一個子代理,讓SNMPD以主代理的模式執行,對於SNMPD我們只要讓它啟動就可以,不需要任何的更改和配置,把子代理編譯生成的程式執行起來就可以擴充套件自定義的MIB庫。
4)用shell指令碼來擴充套件
本文我們以第三種方法在linux上開發和測試
一、安裝snmpd
既然要測試,而且我們用的也是net-snmp工具,當然要先安裝snmpd,本文采用5.7.2版本的snmpd,需安裝net-snmp-5.7.2-1, net-snmp-devel-5.7.2-1,net-snmp-perlmods-5.7.2-1,安裝可以是編譯net-snmp的原始碼,也可以下載rpm包安裝,這裡略過。
安裝好後測試一下service snmpd status,如果沒有反應,可能是沒有配置檔案,可以手動建立/etc/snmp目錄,在snmp目錄下建立snmpd.conf檔案,填入一些基本的配置資訊(或者通過snmpconf程式一步一步生成,snmpconf程式比較容易懂,適合童鞋們,snmpconf會提示你建立什麼配置檔案,需不需要把snmpd作為主代理等等強大的提示):
- master agentx
- rocommunity public
- rwcommunity public
master 是說該snmpd以主代理方式執行,目前主代理snmpd只支援agentx型別,而我們要開發的程式是一種子代理(subagent),是需要連snmpd的master agent的。rocommunity (只讀物件)和rwcommunity(讀寫物件)的密碼都是public.(這個密碼就是客戶端訪問OID時需要提供的密碼,比如在任一一個裝有snmpd的linux機器上,執行snmpwalk -v2c -c public localhost 1.3.6.1.2.1.1, 這裡的public就是密碼,分別有隻讀OID密碼,和讀寫OID密碼),本文測試就以public作為預設的密碼吧。
現在測試一下snmpd是否正常,啟動service snmpd restart,執行snmpwalk -v2c -c public localhost 1.3.6.1.2.1.1, 如果有SNMPv2-MIB:xxxx之類的輸出就表示我們的主代理已經工作了。
二、自己的MIB庫
首先MIB庫有什麼用?其實作為子代理來說,在server機器上,可以不用MIB庫,MIB庫只為了讓使用者訪問時方便,有了MIB庫,使用者就不用記那麼多和長的OID,比如把MIB放在windows機器上,在windows機器裝一個支援MIB的軟體,用該軟體開啟MIB庫,只要點選相應的物件就可以自動傳送snmp請求到server端,所以server端是可以不要MIB庫的。如果把MIB庫放在linux客戶端機器上,以下面自定義的MIB庫為例,那麼就可以直接執行snmpget -v2c -c public Test-MIB::GetTime.0,當然需要linux客戶端裝有snmp,而且自定義的MIB庫必須能讓snmpd程式找到。
這裡用就一個OID建一個MIB庫來簡化,命名Test-MIB.my,放在/usr/local/share/snmp/mibs目錄下,因為這個目錄是snmpd的預設目錄,只要把MIB庫放入該目錄就可以自動載入MIB庫,否則需要修改/etc/snmp/snmp.conf檔案,新增mibs +/path/to/Test-MIB.my 並重啟snmpd。
自定義MIB庫,如下:
- -- Test-MIB.my
- Test-MIB DEFINITIONS ::= BEGIN
- IMPORTS
- OBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUP
- FROM SNMPv2-CONF
- enterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,
- NOTIFICATION-TYPE
- FROM SNMPv2-SMI
- DisplayString
- FROM SNMPv2-TC;
- -- October 09, 2002 at 14:50 GMT
- -- 1.3.6.1.4.1.16535
- Test MODULE-IDENTITY
- LAST-UPDATED "200210091450Z" -- October 09, 2002 at 14:50 GMT
- ORGANIZATION
- ""
- CONTACT-INFO
- ""
- DESCRIPTION
- "Video's Server MIB."
- ::= { enterprises 16535 }
- -- Node definitions
- -- This part will include all details about the Test.
- -- 1.3.6.1.4.1.16535.1
- Time OBJECT IDENTIFIER ::= { Test 1 }
- -- 1.3.6.1.4.1.16535.1.1
- GetTime OBJECT-TYPE
- SYNTAX DisplayString (SIZE (0..100))
- MAX-ACCESS read-only
- STATUS current
- DESCRIPTION
- "Example : 2013/4/11"
- ::= { Time 1 }
- END
- -- Test-MIB.my
很簡單,該MIB庫只有一個OID,即:1.3.6.1.4.1.16535.1.1,寫完後我們測一個MIB庫有沒有問題,在linux機器上用snmptranslate -Tp -IR Test-MIB::Test顯示結果如下:
- +--Test(16535)
- |
- +--Time(1)
- |
- +-- -R-- String GetTime(1)
- Textual Convention: DisplayString
- Size: 0..100
OK, snmp自動發現了這個MIB庫, 有了自定義的OID,但是還沒有處理程式(子代理)
三、生成原始碼
mib2c可以根據mib庫生成對應的原始碼,有多種模板,這裡我們要生成子代理的程式碼,所以選擇是固定的,執行env MIBS"+/usr/local/share/snmp/mibs/Test-MIB.my" mib2c Test,會引導你逐漸生成Test.h和Test.c, 先選2再選1,過程如下:
- [[email protected] mibs]# env MIBS="+/etc/snmp/mibs/Test-MIB.my" mib2c Test
- writing to -
- mib2c has multiple configuration files depending on the type of
- code you need to write. You must pick one depending on your need.
- You requested mib2c to be run on the following part of the MIB tree:
- OID: Test
- numeric translation: .1.3.6.1.4.1.16535
- number of scalars within: 1
- number of tables within: 0
- number of notifications within: 0
- First, do you want to generate code that is compatible with the
- ucd-snmp 4.X line of code, or code for the newer Net-SNMP 5.X code
- base (which provides a much greater choice of APIs to pick from):
- 1) ucd-snmp style code
- 2) Net-SNMP style code
- Select your choice : 2
- **********************************************************************
- GENERATING CODE FOR SCALAR OBJECTS:
- **********************************************************************
- It looks like you have some scalars in the mib you requested, so I
- will now generate code for them if you wish. You have two choices
- for scalar API styles currently. Pick between them, or choose not
- to generate any code for the scalars:
- 1) If you're writing code for some generic scalars
- (by hand use: "mib2c -c mib2c.scalar.conf Test")
- 2) If you want to magically "tie" integer variables to integer
- scalars
- (by hand use: "mib2c -c mib2c.int_watch.conf Test")
- 3) Don't generate any code for the scalars
- Select your choice: 1
- using the mib2c.scalar.conf configuration file to generate your code.
- writing to Test.h
- writing to Test.c
- **********************************************************************
- * NOTE WELL: The code generated by mib2c is only a template. *YOU* *
- * must fill in the code before it'll work most of the time. In many *
- * cases, spots that MUST be edited within the files are marked with *
- * /* XXX */ or /* TODO */ comments. *
- **********************************************************************
- running indent on Test.h
- running indent on Test.c
生成的Test.h如下:
- /*
- * Note: this file originally auto-generated by mib2c using
- * $
- */
- #ifndef TEST_H
- #define TEST_H
- /*
- * function declarations
- */
- void init_Test(void);
- Netsnmp_Node_Handler handle_GetTime;
- #endif /* TEST_H */
生成的Test.c檔案如下:
- /*
- * Note: this file originally auto-generated by mib2c using
- * $
- */
- #include <net-snmp/net-snmp-config.h>
- #include <net-snmp/net-snmp-includes.h>
- #include <net-snmp/agent/net-snmp-agent-includes.h>
- #include "Test.h"
- /** Initializes the Test module */
- void
- init_Test(void)
- {
- const oid GetTime_oid[] = { 1, 3, 6, 1, 4, 1, 16535, 1, 1 };
- DEBUGMSGTL(("Test", "Initializing\n"));
- netsnmp_register_scalar(netsnmp_create_handler_registration
- ("GetTime", handle_GetTime, GetTime_oid,
-
相關推薦
基於net-snmp的代理agent開發詳解
花了一兩天時間測試和整理一下。 用net-snmp擴充套件MIB庫,實現方法可歸結為四種: 1)一是靜態庫方式,通過修改配置標頭檔案,在相應地方包含新引入的mib模組的.c和.h檔案,然後重新編譯庫檔案和擴充套件程式碼;這種方式不夠靈活,每次修改擴
net-snmp agent開發詳解,非常簡單
轉載請標明出處 原文地址:http://blog.csdn.net/hepeng597/article/details/8782868 花了一兩天時間測試和整理一下。 用net-snmp擴充套件MIB庫,實現方法可歸結為四種: 1)一是靜態庫方式,通過修改配置標頭檔案,
net-snmp agent開發詳解
轉載請標明出處 原文地址:http://blog.csdn.net/hepeng597/article/details/8782868 花了一兩天時間測試和整理一下。 用net-snmp擴充套件MIB庫,實現方法可歸結為四種: 1)一是靜態庫方式,通
【轉】Quartz.net持久化與集群部署開發詳解
疑惑 sum 常用 drive wid res net github hub 轉自:http://www.cnblogs.com/knowledgesea/p/5145239.html 序言 我前邊有幾篇文章有介紹過quartz的基本使用語法與類庫。但是他的執行計劃都是被寫
Linux裝置驅動開發詳解 第3版 (即 Linux裝置驅動開發詳解 基於最新的Linux 4 0核心 )進展同步更
本博實時更新《Linux裝置驅動開發詳解(第3版)》的最新進展。 目前已經完成稿件。 2015
[轉]javaCV開發詳解之5:錄製音訊(錄製麥克風)到本地檔案/流媒體伺服器(基於javax.sound、javaCV-FFMPEG)
本文轉載自部落格:https://blog.csdn.net/eguid_1/article/details/52702385 ------------------------------------------------------------------------------------
javaCV開發詳解之4:轉流器實現(也可作為本地收流器、推流器,新增新增圖片及文字水印,視訊影象幀儲存),實現rtsp/rtmp/本地檔案轉發到rtmp流媒體伺服器(基於javaCV-FFMPEG)
javaCV系列文章: 補充篇: 歡迎大家積極開心的加入討論群 javacpp-ffmpeg: 前言: 本章基於javaCV實現轉流器和收流器功能,測試採用監控rtsp地址轉發至rtmp伺服器地址 新增openCV儲存圖片功能。 補充:
關於召回《Linux裝置驅動開發詳解-基於最新的Linux 4.0核心》的通知
問題描述關於《Linux裝置驅動開發詳解:基於最新的Linux 4.0核心》一書1.華章分社在沒
javaCV開發詳解之2:推流器實現,推本地攝像頭視訊到流媒體伺服器以及攝像頭錄製視訊功能實現(基於javaCV-FFMPEG、javaCV-openCV)
javaCV系列文章: 補充篇: 歡迎大家積極開心的加入討論群 javacpp-ffmpeg: 前言: 本章將在上一章的基礎上,增加視訊推流到流媒體伺服器和視訊錄製的功能; 功能:實現邊播放邊錄製/推流,停止預覽即停止錄製/推流 提示:
【Linux】Linux裝置驅動開發詳解:基於最新的Linux 4.0核心
1 Linux裝置驅動概述及開發環境構建 1.1 裝置驅動的作用 驅使硬體裝置行動 1.2 無作業系統時的裝置驅動 典型架構:一個無限迴圈中夾雜著對裝置中斷的檢測或者對裝置的輪詢 1.3 有作業系統時的裝置驅動 併發 、記
《Linux裝置驅動開發詳解:基於最新的Linux 4.0核心》一刷勘誤
這是第一次印刷的勘誤,大部分應該買的都是5刷了,這些錯誤基本已經絕跡。還是有部分童鞋買的書老書,
Vue.js 插件開發詳解
js 前言隨著 Vue.js 越來越火,Vue.js 的相關插件也在不斷的被貢獻出來,數不勝數。比如官方推薦的 vue-router、vuex 等,都是非常優秀的插件。但是我們更多的人還只停留在使用的階段,比較少自己開發。所以接下來會通過一個簡單的 vue-toast 插件,來了解掌握插件的開發和使用。
斑布生活家系統開發詳解模式設計
log 所有 http 裏的 詳解 啟動 一次 什麽 氣體 斑布生活家系統開發(李想.185.6504.8478)根據化石研究,史前時代的始祖鳥被認為是最早的飛行鳥類,它在許多方面已顯現鳥的一些雛形,例如全身長有羽毛和翅膀、具有明顯的叉骨等。這些證據表明,鳥類的飛行能力應該
lucene、lucene.NET詳細使用與優化詳解[轉]
構造 bitset 更多 隱患 .net wrapper 屬性設置 似的 擔心 1 lucene簡介1.1 什麽是luceneLucene是一個全文搜索框架,而不是應用產品。因此它並不像www.baidu.com 或者google Desktop那麽拿來就能用,它只是提供了
Hive UDAF開發詳解
-s 聚合 而且 pri ros cal 關系 方法調用 evaluator 明這篇文章是來自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不嚴格翻譯,因為翻譯的文章示例寫得比較
果園農場種植遊戲復利拆分模式app系統開發詳解
計算 數量 政策 經營者 終端 默認 自己 產生 後臺 330復利拆分果園遊戲app系統開發(蘇公子.188.1414.7927)皮皮果遊戲開發,玫瑰莊園遊戲開發,復利拆分遊戲開發,330模式開發,330果園系統開發,復利拆分農場系統開發,英倫果開發,皮皮果遊戲介紹,地點的
火爆的車享家模式系統開發詳解
目前 聯合體 移動互聯網 體系 通過 系列 獲得 com img 車享家是一個關於用車的全方位平臺!上線至今都十分火熱,盈利能力也強,通過結合“高效線上運營”和“優質線下服務”,全方位打通汽車“看、選、買、用、賣”,簡單來看,是淘寶+o2o的聯合體。目前汽車市場蓬勃發展,汽
解析利用wsdl.exe生成webservice代理類的詳解
不同 綁定 配置 img 請求 name cto lena 處理 利用wsdl.exe生成webservice代理類:根據提供的wsdl生成webservice代理類1、開始->程序->Visual Studio 2010 命令提示2、輸入如下紅色標記部分D:/
SylixOS 基於ZYNQ的時鐘頻率修改詳解
時鐘頻率 zynq 倍頻 概述 本文檔以ZYNQ7000平臺為例,詳細介紹如何去修改ZYNQ的時鐘頻率。 時鐘頻率修改流程 ZYNQ7000的時鐘頻率修改流程,如圖 2.1所示。具體步驟如下: 步驟一:解除ZYNQ7000的寄存器寫鎖定; 步驟二:向
Android"掛逼"修煉之行---微信中定位照片的位置信息插件開發詳解
頁面 blank 如果 put 法律 mali 特殊字符 在哪裏 加載 一、前言 最近關於微信中,朋友之間發送原圖就可能暴露你的位置信息,其實這個問題不在於微信,微信是為了更好的體驗效果,才有發送原圖功能,而對於拍照,發送普通圖片微信後臺都會過濾圖片的exif信息,這樣就