1. 程式人生 > >Visual Studio 2010基於SNMP++開發(1)

Visual Studio 2010基於SNMP++開發(1)

Visual Studio 2010基於SNMP++開發(1)

轉自

http://blog.sina.com.cn/s/blog_8ce3de3b0100v8h3.html

最近一直在研究利用SNMP++的包,在Visual Studio 2010上進行開發。

說實話挺噁心,好歹現在有點眉目。記錄一下吧。

一、SNMP服務的開啟。

1.第一步肯定要開啟系統的SNMP服務,不然一切都是浮雲。

Win7使用者就不用多說了,如果是Xp使用者,如果沒有安裝盤,需要下載一個安裝包(SnmpForXp)網上有。

安裝完成以後,需要進行簡單的設定。

控制面板\管理工具\服務

Visual <wbr>Studio <wbr>2010基於SNMP++開發(1)

看見這兩項開啟即可。

2.雙擊SNMP Service,開啟陷阱,在“團體名稱”中新建一個public,然後在“陷阱目標”中加入“127.0.0.1”或者自己的地址,便於測試。

3.開啟安全,點上“傳送身份驗證陷阱”,可以根據需要更改一些許可權,還有接受來自哪些主機的SNMP包,都可以自己定義。確定,完成。

4.測試一下,SNMP是否啟用。首先要下載一個工具--“Snmputil.exe”,可以放到windows\system32\下,這樣可以隨時隨地使用。開始-執行-cmd。打入:snmputil,回車,可以看到一個簡介。

Visual <wbr>Studio <wbr>2010基於SNMP++開發(1)
usage:就是這個軟體的用法,agent:代理地址,community:記得剛才新建的“public”嗎,oid不明白自己再去看吧。

5.假設我們打命令:snmputil get 192.168.0.102 .1.3.6.1.2.1.1.5.0,回車,如下圖

Visual <wbr>Studio <wbr>2010基於SNMP++開發(1)

這裡:192.168.0.102,是我在局域網裡的地址,".1.3.6.1.2.1.1.5.0"是Oid,注意一定要前面加一個“.“。

到這裡就哦了,SNMP服務已經安裝上了。

如果,沒有開機啟動SNMP,也可以手動開啟,有一個簡單的命令,CMD後,net start snmp

二、用Vs2010編譯本地的snmp_pp.lib

只有一點不一樣,在“目錄設定”的時候,Vs2010的方法是在“屬性管理器”->Debug|Win32->Microsoft.Cpp

其他都一樣,就是細心一點分清楚.h和.cpp以及.c檔案就行了。

三、建立一個Win32應用控制檯程式

1.這裡有我的一個編譯通過的程式碼。可以測試一用。注意把IP地址改掉。

#include "stdafx.h"
#include <snmp_pp.h>
#include <iostream>
#define SYSDESCR "1.3.6.1.2.1.1.1.0"
using namespace std;

void get_system_descriptor()
{
 Snmp::socket_startup(); //這個很重要。雖然是SNMP++但是還是不能完全脫離WinAPI。
 int status;
 CTarget ctarget((IpAddress)"192.168.0.1"); //換成你用snmputil行的通的地址。
 Vb vb(SYSDESCR);
 Pdu pdu;

 Snmp snmp(status);
 if( status != SNMP_CLASS_SUCCESS){
  cout<<"status error!"<<snmp.error_msg(status)<<endl;
  return;
 }
 pdu += vb;
 if((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)
  cout<<"snmp.get error!"<<snmp.error_msg(status)<<endl;
 else{
  pdu.get_vb(vb, 0);
  cout<<"System Oid = "<<vb.get_printable_oid()<<endl;
  cout<<"System Descriptor = "<<vb.get_printable_value()<<endl;
 }
}

int _tmain(int argc, _TCHAR* argv[])
{
 get_system_descriptor();
 getchar();
 return 0;
}
2.但是僅僅是這樣還是不夠的。我們引入一個SNMP++的庫,以及一個snmp_pp.lib都是有用的。

在專案->屬性裡,進行如下設定。

常規 ==》MFC的使用 ==》 在共享的DLL中使用MFC

C/C++  ==》程式碼生成  ==》執行庫 ==》多執行緒DLL(/MD)

連結器 ==》輸入 ==》 附加依賴項 加入 snmp_pp.lib

注意:網上有的解決辦法是採用靜態MFC,執行庫也不一樣,具體大家自己琢磨一下。

3.現在可以編譯試試了。

四、常見問題

1.各種衝突,神馬在神馬中已經定義????????!!!

注意看好哪些庫衝突,然後在專案==》屬性==》連結器==》輸入==》忽略特定預設庫==》加入就行了。

2.各種神馬外部符號無法確認?????????!!!!!

  a.看一下,你的標頭檔案中(stdafx.h),可以加入一個 #include <afx.h>。

   b.嘗試切換一下,專案==》屬性==》C\C++==》程式碼生成==》執行庫,裡頭幾個來回試試。也許能行。

總之,各種問題的產生問題也不同,網上的答案也是千奇百怪,如果我說的不行,大家再試試別的方法。

具體內部原因,因為我也是初學者,自己理解的也不一定對。如果有高人,請留言指點。