天天看點

win10安裝net-snmp,vs2019

很多文章都在介紹如何加載安裝net-snmp,但是那些篇幅要麼過于久遠(釋出時間為2年前以上),要麼就是介紹的不夠詳細(比如準備工作,需要用到那些庫或者工具等等),要麼就是……

我現在主要介紹的win10系統安裝最新版本并且适用于“Building With Visual Studio 2005 Express”的操作,就是用類似vs2005(比如VS2010,VS2019)開發工具的開發net-snmp,首先要下載下傳好VS019,這個很簡單自己去搜尋如何在win10先下載下傳安裝VS2019就出來文章一大堆,我是花費了一晚上的時間才把vs2019下載下傳安裝好,當然電腦在下載下傳我在睡覺覺。

如果想要安裝openssl:http://slproweb.com/products/Win32OpenSSL.html;注意要下載下傳不帶Light的版本,就是要下載下傳比較大的包,我建議64位的和32位的最好都要下載下傳一下,因為電腦是64位系統的就用64位的。

在介紹安裝之前首先要做好準備工作:

1.安裝activatestate工具

該工具的官網為:https://www.activestate.com/products/platform/state-tool/

安裝指令為:

powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/install.ps1')))"

這個指令是需要在win10系統的終端(打開終端方法:win+R,輸入cmd,敲回車就打開了)上運作的,直接敲回車就可以開始該工具的安裝了,記住一定要聯網。

2.安裝activateperl工具

該工具的官網為:https://www.activestate.com/products/perl/downloads/

安裝指令為:

powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/install.ps1'))) -activate-default ActiveState/Perl-5.32"

這個指令是需要在win10系統的終端(打開終端方法:win+R,輸入cmd,敲回車就打開了)上運作的,直接敲回車就可以開始該工具的安裝了,記住一定要聯網。該指令安裝的perl-5.32版本的。

注意(真的需要注意了):安裝路徑最好是C:\ActiveState\Perl-5.32下面;更加要注意的是“C:\ActiveState\Perl-5.32”中的“ActiveState\Perl-5.32”這個一定要相連,這兩個是一個整體,不要抛棄任何一個,并且“Perl-5.32”一定要在“ActiveState” 目錄下面。因為我剛開始安裝的時候當時能用,但是過來一天就用不了了,有重新開始安裝,每次安裝都花費好久好久(13.5兆大小花費了至少兩小時)。

3.這一步也是很關鍵的,要想避免重新操作第2步,就好好的看這一步:

當第二步安裝perl完成以後,重新打開一個終端,輸入perl -v,若是顯示perl的版本資訊就證明已經安裝好了perl,但是你現在隻是安裝好了perl,還不知道怎麼用它。終端保持着,在終端進入到perl的安裝目錄C:\ActiveState\Perl-5.32下面,然後輸入“state activate”,這一步就是激活了perl,然後就在這裡面運作perl的一些腳本,記住如果不想運作了一定要輸入“exit”退出perl的運作界面,若是直接關閉終端界面,而沒有退出,下次就沒有辦法運作perl了,隻能重走第二步了。

簡單操作步驟總結:

(1)打開終端,cd 到perl安裝目錄“C:\ActiveState\Perl-5.32”

(2)輸入“state activate”(注意這裡其實是state activate ActiveState\Perl-5.32)

這就是為什麼安裝路徑中“ActiveState\Perl-5.32”密不可分的因素,因為到了“C:\ActiveState\Perl-5.32”這個目錄下,是以可以省略後面的項目名稱;可參考網址:https://docs.activestate.com/platform/state/create-project/裡面的“Installing / Importing Packages”和“Activating Your Project”章節

(3)不用perl工具了,輸入“exit”退出

其中相關經驗教訓可參考網址:

https://www.activestate.com/resources/product-demos/activestate-platform-demo-perl-cpanfile/

該連結是介紹安裝完activatestate工具以後,如何建立perl的運作環境,可惜隻有視訊,我也看不了(因為網速太差,視訊打不開,有能打開的小夥伴請一定打開仔細看一看,分享一下),

https://www.activestate.com/resources/product-demos/activestate-platform-demo-state-tool-activate-projects/該網址開始用activatestate工具建立完perl的運作環境以後,介紹怎麼使安裝的perl項目生效。兩個視訊都要看,避免perl老是不能用,然後重回第二步。

4.activatestate工具,activateperl工具,vs2019都安裝好了,接下來就是安裝net-snmp了

(1)首先從一下網址下載下傳net-snmp-5.9.1.zip,然後解壓

https://sourceforge.net/projects/net-snmp/files/net-snmp/5.9.1/

(2)按照一下網址操作進行安裝:

http://www.net-snmp.org/wiki/index.php/Using_the_command_line_and_nmake這個是官方的安裝VS005系列的操作。

簡單介紹一下:

        1.打開終端,輸入“cmd /V:ON /E:ON”

        2.進入這個路徑“C:\Program Files\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\”,如果是執行這個失敗,可以執行vcvars32.bat(電腦是32位的執行這個)或者vcvars64.bat(電腦是64位的執行這個)或者vcvarsall.bat amd64(vcvarsall.bat後面都要加一個參數),我的電腦是64位是以我就用了執行了vcvars64.bat。

        3.然後進入到net-snmp-5.9.1.zip的解壓目錄“C:\net-snmp\win32\build.bat”(我的解壓目錄是這個),執行build.bat就可以了,然後直接按照預設的安裝就行,直接輸入F回車,最後預設的安裝路徑是C:/usr下面;就保持這個路徑就可以了。執行build.bat出現下面界面:

win10安裝net-snmp,vs2019

 其中用紅色圓圈标記的都是要enabled(其中選項8.Install Perl Modules也可以選中的)的,若第一個OpenSSL support為enabled,則要保證2和3的路徑正确。全部選項設定好以後,就可以按F,安裝了,結果界面如下圖所示:

win10安裝net-snmp,vs2019

 出現這個結果證明已經安配置安裝成功了,但是隻是安裝了一部分,剩下的部分需要再次執行nmake install_devel進行安裝,這樣就大功告成了。

如果打開7.Perl Mdules就會報下面的錯誤(這個問題我不會解決)

The perl interpreter has been built with gcc instead of MSVC. Giving up.

如果打開11.IPv6 transports就會報下面的錯誤,(這個問題我不會解決)

netsnmpagent.lib(snmp_vars.obj) : error LNK2019: 無法解析的外部符号 netsnmp_udp6_agent_config_tokens_register,函數 init_agent 中引用了該符号

netsnmpmibs.lib(vacm_conf.obj) : error LNK2019: 無法解析的外部符号 netsnmp_udp6_parse_security,函數 vacm_create_simple 中引用了該符号

netsnmpmibs.lib(vacm_conf.obj) : error LNK2019: 無法解析的外部符号 netsnmp_udp6_getSecName,函數 vacm_check_view_contents 中引用了該符号

netsnmpmibs.lib(vacm_conf.obj) : error LNK2001: 無法解析的外部符号 netsnmp_UDPIPv6Domain

netsnmpmibs.lib(vacm_conf.obj) : error LNK2001: 無法解析的外部符号 netsnmp_TCPIPv6Domain

..\bin\.\release\snmptrapd.exe : fatal error LNK1120: 5 個無法解析的外部指令

NMAKE : fatal error U1077: ??"D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\bin\HostX64\x64\link.exe"??: ???ش??롰0x460??

Stop.

NMAKE : fatal error U1077: ??"D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\bin\HostX64\x64\nmake.EXE"??: ???ش??롰0x2??

Stop.

後續還有什麼不清楚的可以私聊,加上其他選項也老是報錯。是以隻安裝了最簡單的。

最後在介紹一點,用vs2019開發的時候,如何加載snmp的頭檔案和庫,前面我有篇文章已經介紹了,接下來我還要補充一點:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <net-snmp/net-snmp-config.h>

#include <net-snmp/net-snmp-includes.h>

#include <winsock2.h>

#pragma comment(lib,"netsnmp.lib")

#pragma comment(lib,"netsnmpagent.lib")

#pragma comment(lib,"netsnmpmibs.lib")

#pragma comment(lib,"WS2_32.lib")

這個要包含的頭檔案和庫,其中頭檔案winsock2.h和庫WS2_32.lib都是必不可少的,要不然會報錯。

下面附上一個測試代碼,直接複制粘貼就可以運作,如果出現列印結果就說明你已經在用net-snmp的庫了,但是應該不會出現結果因為服務還沒有起來,若需要啟動服務還需要配置一系列的snmp.conf檔案,其中配置這些檔案都可以通過/usr/bin/snmpconf這個腳本檔案來實作,關于這個腳本的介紹在這個網址:http://www.net-snmp.org/docs/man/snmpconf.html。隻可惜我按照要求運作了腳本(指令:snmpconf -g basic_setup)以後卻總是出現報錯界面,是以就沒有辦法配置了:

win10安裝net-snmp,vs2019

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <net-snmp/net-snmp-config.h>

#include <net-snmp/net-snmp-includes.h>

#include <winsock2.h>

#pragma comment(lib,"netsnmp.lib")

#pragma comment(lib,"netsnmpagent.lib")

#pragma comment(lib,"netsnmpmibs.lib")

#pragma comment(lib,"WS2_32.lib")

int main()

{

    struct snmp_session session, * ss;

    struct snmp_pdu* pdu;

    struct snmp_pdu* response;

    oid anOID[MAX_OID_LEN];

    size_t anOID_len = MAX_OID_LEN;

    struct variable_list* vars;

    int status;

    //init_snmp("snmpapp");

    snmp_sess_init(&session);                  

    session.peername = (char *)"test.net-snmp.org";

#ifdef DEMO_USE_SNMP_VERSION_3

    session.version = SNMP_VERSION_3;

    session.securityName = strdup("MD5User");

    session.securityNameLen = strlen(session.securityName);

    session.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;

    session.securityAuthProto = usmHMACMD5AuthProtocol;

    session.securityAuthProtoLen = sizeof(usmHMACMD5AuthProtocol) / sizeof(oid);

    session.securityAuthKeyLen = USM_AUTH_KU_LEN;

    if (generate_Ku(session.securityAuthProto,session.securityAuthProtoLen,

        (u_char*)our_v3_passphrase, strlen(our_v3_passphrase),

        session.securityAuthKey,

        &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {

        snmp_perror(argv[0]);

        snmp_log(LOG_ERR,"Error generating Ku from authentication pass phrase. \n");

        exit(1);

    }

#else

    session.version = SNMP_VERSION_1;

    session.community = (u_char *)"demopublic";

    session.community_len = strlen((char *)session.community);

#endif

    printf("i i am snmp\n");

    printf("hello world i i am snmp\n");

    return 0;

}

有不足之處,還請私聊或者在下面評論指出,一起研發,共同進步。

繼續閱讀