admin 管理员组

文章数量: 887017

很多文章都在介绍如何加载安装net-snmp,但是那些篇幅要么过于久远(发布时间为2年前以上),要么就是介绍的不够详细(比如准备工作,需要用到那些库或者工具等等),要么就是……

我现在主要介绍的win10系统安装最新版本并且适用于“Building With Visual Studio 2005 Express”的操作,就是用类似vs2005(比如VS2010,VS2019)开发工具的开发net-snmp,首先要下载好VS019,这个很简单自己去搜索如何在win10先下载安装VS2019就出来文章一大堆,我是花费了一晚上的时间才把vs2019下载安装好,当然电脑在下载我在睡觉觉。

如果想要安装openssl:http://slproweb/products/Win32OpenSSL.html;注意要下载不带Light的版本,就是要下载比较大的包,我建议64位的和32位的最好都要下载一下,因为电脑是64位系统的就用64位的。

在介绍安装之前首先要做好准备工作:

1.安装activatestate工具

该工具的官网为:https://www.activestate/products/platform/state-tool/

安装命令为:

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

这个命令是需要在win10系统的终端(打开终端方法:win+R,输入cmd,敲回车就打开了)上运行的,直接敲回车就可以开始该工具的安装了,记住一定要联网。

2.安装activateperl工具

该工具的官网为:https://www.activestate/products/perl/downloads/

安装命令为:

powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate/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/platform/state/create-project/里面的“Installing / Importing Packages”和“Activating Your Project”章节

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

其中相关经验教训可参考网址:

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

该链接是介绍安装完activatestate工具以后,如何创建perl的运行环境,可惜只有视频,我也看不了(因为网速太差,视频打不开,有能打开的小伙伴请一定打开仔细看一看,分享一下),

https://www.activestate/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/projects/net-snmp/files/net-snmp/5.9.1/

(2)按照一下网址操作进行安装:

http://www-snmp/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出现下面界面:

 其中用红色圆圈标记的都是要enabled(其中选项8.Install Perl Modules也可以选中的)的,若第一个OpenSSL support为enabled,则要保证2和3的路径正确。全部选项设置好以后,就可以按F,安装了,结果界面如下图所示:

 出现这个结果证明已经安配置安装成功了,但是只是安装了一部分,剩下的部分需要再次执行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-snmp/docs/man/snmpconf.html。只可惜我按照要求运行了脚本(命令:snmpconf -g basic_setup)以后却总是出现报错界面,所以就没有办法配置了:

 

#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;

    /*first Initialize the SNMP library*/
    //init_snmp("snmpapp");
    /*Initialize a "session" that defines who we're going to talk to */
    snmp_sess_init(&session);                   /* set up defaults */
    session.peername = (char *)"test-snmp";
/* set up the authentication parameters for talking to the server */

#ifdef DEMO_USE_SNMP_VERSION_3

/* Use SNMPv3 to talk to the experimental server */

/* set the SNMP version number */
    session.version = SNMP_VERSION_3;

    /* set the SNMPv3 user name */
    session.securityName = strdup("MD5User");
    session.securityNameLen = strlen(session.securityName);

    /* set the security level to authenticated, but not encrypted */
    session.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;

    /* set the authentication method to MD5 */
    session.securityAuthProto = usmHMACMD5AuthProtocol;
    session.securityAuthProtoLen = sizeof(usmHMACMD5AuthProtocol) / sizeof(oid);
    session.securityAuthKeyLen = USM_AUTH_KU_LEN;

    /* set the authentication key to a MD5 hashed version of our passphrase "The Net-SNMP Demo Password" (which must be at least 8 characters long) */
    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 /* we'll use the insecure (but simpler) SNMPv1 */

/* set the SNMP version number */
    session.version = SNMP_VERSION_1;

    /* set the SNMPv1 community name used for authentication */
    sessionmunity = (u_char *)"demopublic";
    sessionmunity_len = strlen((char *)sessionmunity);

#endif /* SNMPv1 */
    printf("i i am snmp\n");
    printf("hello world i i am snmp\n");
    return 0;
}

有不足之处,还请私聊或者在下面评论指出,一起研发,共同进步。

本文标签: NET SNMP