netsnmp源碼
A. 如何用net snmp開發snmp客戶端
Linux下net-snmp的安裝提供的net-snmp安裝包中有以下目錄運行install腳本執行安裝,但不建立用戶運行install_cm腳本執行安裝並建立cm用戶運行install_vg腳本執行安裝並建立vg用戶用戶也可以用命令:net-snmp-config --create-snmpv3-user -a MD5 -A $snmp_auth -x DES -X $snmp_priv $snmp_usr$snmp_auth 是認證密碼,密碼必須大於8位$snmp_priv是加密密碼,密碼必須大於8位$snmp_usr是將要建立的用戶名 安裝完以後自動啟動可以運行 tools/目錄下的snmpwalk命令來檢查是否安裝成功./snmpwalk -v 3 -l authPriv -u cm -aMD5 -A password -xDES -X password 127.0.0.1 Windows下snmp協議的安裝(windows2003,windows xp)控制面板-》添加刪除程序-》添加組件-》管理和監視工具點詳細信息,勾選「簡單網路管理協議」安裝過程中會提示插入系統盤安裝完成後,選擇管理工具-》服務在右邊的列表中選中「SNMP service」, 右鍵-》屬性裡面有一個安全頁面,可以自己添加一個團體,也可以用默認的「public」團體。下面選擇「接受任意主機的snmp數據包」,或者選擇「接受指定主機的snmp數據包」,填入主機的ip地址或主機名。
B. net-snmp代理(snmpd)擴展開發:
其實get和set對應的調用函數已經掛載好了,只需要修改對應的函數實現,就可以達到你需要的結果。不過需要在configure文件中添加--with-mib-moles="XXXX"這樣的語句,並且重新configure一遍,才能將新添加的模塊編譯進去。你問的比較寬泛,我回答的可能也不是很清楚,可以追問。
C. 新人求助windows下netsnmp怎麼連接python
由於需要練手,准備將nagios的bash shell/perl監控腳本改用python寫,而監控機上yum安裝的net-snmp默認沒有啟用python模塊,這里重新編譯安裝一個。
需要准備的安裝包包括:
setuptools-0.6c11-py2.4.egg //提供easy_install指令用來直接在線安裝python模塊,類似於perl的 cpan install;
net-snmp-5.7.2.tar.gz //net-snmp的源碼包。
先安裝setuptools-0.6c11-py2.4.egg,否則net-snmp編譯安裝無法通過。
#chmod 755 setuptools-0.6c11-py2.4.egg
#./setuptools-0.6c11-py2.4.egg
接著,安裝net-snmp
#tar -zxvf net-snmp-5.7.2.tar.gz
#cd net-snmp-5.7.2
#./configure --prefix=/usr/local/netsnmp --with-python-moles
#make
#make install
#cd python
#python setup.py build
#python setup.py test
出現以下錯誤:
ImportError: libnetsnmp.so.30: cannot open shared object file: No such file or directory
由於net-snmp是編譯安裝,且安裝路徑為/usr/local/netsnmp,以至於找不到相應模塊,解決方法:
#echo "/usr/local/netsnmp/lib" >> /etc/ld.so.conf
#ldconfig
#python setup.py test//出現類似下圖內容即正常:
#python setup.py install
測試net-snmp的python模塊的導入:
#python
>>>import netsnmp //如果沒有報錯的話,則net-snmp的python模塊啟用成功。
D. net-snmp是如何收集信息的
在windows下編譯net-snmp其實很簡單,我用的是net-snmp5.2.1.2的版本。只需把源碼下的win32目錄中的幾個庫的工程編譯就行了。但記住,把netsnmp.lib放在最後編譯,要不然編譯結果不一樣,切記,切記。然後再用編譯出來的四個庫文件: netsnmp.lib,netsnmpagent.lib,netsnmphelpers.lib,netsnmpmibs.lib,來編譯netsnmp.dll。注意還要加上wsock32.lib。如果編譯出錯,提示跟VC默認的庫有沖突,按提示在編譯環境中用NODEFAULTLIB:XXX來去掉VC的預設庫文件。
下面介紹一下幾個例子程序,例子源代碼都可以通過net-snmp的幫助超鏈接連到其網站下載
1.編譯例子example-demon;
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>
#include "nstAgentSubagentObject.h"
static int keep_running;
RETSIGTYPE
stop_server(int a) {
keep_running = 0;
}
int
main(int argc, char *argv[])
{
int agentx_subagent=0; /* change this if you want to be a SNMP master agent */
/*為了編譯成為主代理,這里設為0*/
int background = 0; /* change this if you want to run in the background */
int syslog = 0; /* change this if you want to use syslog */
/* print log errors to syslog or stderr */
if (syslog)
snmp_enable_calllog();
else
snmp_enable_stderrlog();
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
}
/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);
/* initialize tcpip, if necessary */
SOCK_STARTUP;
/* initialize the agent library */
init_agent("example-demon");
/* initialize mib code here */
/* mib code: init_nstAgentSubagentObject from nstAgentSubagentObject.C */
init_nstAgentSubagentObject();
/* initialize vacm/usm access control */
if (!agentx_subagent) {
void init_vacm_vars();/*---------------小修改一下---------------*/
void init_usmUser();
}
/* example-demon will be used to read example-demon.conf files. */
/*這里會讀取一個為example-demon.conf 的配置文件--關鍵*/
init_snmp("example-demon");
/* If we're going to be a snmp master agent, initial the ports */
if (!agentx_subagent)
init_master_agent(); /* open the port to listen on (defaults to udp:161) */
/* In case we recevie a request to stop (kill -TERM or kill -INT) */
keep_running = 1;
signal(SIGTERM, stop_server);
signal(SIGINT, stop_server);
snmp_log(LOG_INFO,"example-demon is up and running.\n");
/* your main loop here... */
while(keep_running) {
/* if you use select(), see snmp_select_info() in snmp_api(3) */
/* --- OR --- */
agent_check_and_process(1); /* 0 == don't block */
}
/* at shutdown time */
snmp_shutdown("example-demon");
SOCK_CLEANUP;
return 0;
}
這里都有很詳細的注釋,就不說明了。
在vc的工程中,把所用到的例子mib庫文件nstAgentSubagentObject.h,nstAgentSubagentObject.c添加進去。並設置好所需的四個庫文件,如文開頭所述,看是否需要加wsock32.lib,和NODEFAULTLIB。接著就應該可以編譯通過了,無錯誤無警告。
2.關於運行
運行就必須設置配置文件的路徑,最好下一個NET-SNMP的二進制包,按預設路徑安裝C:\USR。安裝時提示還需要下載一個PERL的安裝包,用來運行mib2c工具,這個網上都有介紹。配置文件放在
c:\,c:\usr\etc\snmp或C:\usr\share\snmp都有效。但如果你是運行例子主代理程序,會在etc目錄下找配置文件。例子的配置文件應和init_snmp("example-demon");中初始化的名字相同:example-demon.conf。配置文件只需設兩個值就夠了:
#community 的讀寫根據需要設,這里設的是readonly
rocommunity public
agentaddress 161
另外,如果是運行二進制包,snmp.conf文件不要手工修改,要通過snmpconf生成,手工修改的好像不起作用。例子程序的配置可以手工設置。
最後,把example-demon.conf放到c:\usr\etc\snmp下。關掉二進制包的snmpd.exe服務(如果在運行的話)。然後運行example-demon.exe。正常情況下,如果安裝了二進制包,例子可以在編譯目錄下運行,不行就把netsnmp.dll拷進來,或直接把例子放到二進制包的bin目錄下。有問題檢查配置文件的路徑和設置。最好下載一個叫getif的管理端軟體,很方便小巧的查詢工具,來側試。
3.編譯自己的mib庫
第一種可以通過mib2c生成模版框架,在相關地方添上數據導入指針及其他。
第二種可以參考nstAgentSubagentObject.c。
第三種可以參考net-snmp-xxx\agent\mibgroup\examples下的幾個實現方式。
總結
主要是環境設置,庫的編譯順序,配置文件設置。參考例子基本沒多大問題。
E. 請問net-snmp-5.7.2源碼包中哪個文件處理與NSM通信以及解析oid 急!高分!!!
用 snmp_parse_oid 函數解析相應變數的 OID
snmp_parse_oid("HP-DW-SAMPLE::host",varId,&varIdLen)
F. Netsnmp_Node_Handler是什麼類型原型是什麼
typedef int( Netsnmp_Node_Handler )(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info*requests)
就是說如果你定義Netsnmp_Node_Handler abc;
實際上是定義 int abc(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info*requests)
G. snmp和net-snmp的區別
都是snmp的開發包而已 還有hp的 snmp++ 都可以 隨你喜歡了
H. 如何安裝net-snmp 5.7.3 並進行開發
y_Bg.jpg);}
table { font-family: "宋體"; font-size: 9pt; line-height: 20px; color: #333333}
a:link { font-size: 9pt; color: #333333; text-decoration: none}
a:visited { font-size: 9pt; color: #333333; text-decoration: none}
a:hover { font-size: 9pt; color: #E7005C; text-decoration: underline}
a:active { font-size: 9pt; color: #333333; text-decoration: none}
/*全局樣式結束*/
</style>
I. python 怎麼啟用netsnmp
[apt-get/yum/zipper/pocman] ininstall net-snmp-python 安裝library
install net-snmp net-snmp-utils 安裝ipython
然後在程序裡面
import netsnmp
就可以使用了.