SNMP++: Transport is not supported
时间:2022-07-24
本文章向大家介绍SNMP++: Transport is not supported,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
SNMP++: Transport is not supported
在VS2017中编译好SNMP++后,关于如何在VS2017中编译使用SNMP++这个库,可以参考VS2017编译SNMP++步骤记录这篇文章。 参考使用下面的示例代码:
#include <iostream>
#include "snmp_pp/snmp_pp.h"
using namespace std;
#define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor
void get_system_descriptor(){
int status;//return status
CTarget ctarget((IpAddress)"192.168.1.111");
Vb vb(SYSDESCR);//SNMP++ variable Binding
Pdu pdu;//SNMP ++ pdu
//--------[Construct a SNMP++ SNMP Object--------------
Snmp snmp(status);//create a snmp session
if (status != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);//if fail,print error string
return;
}
//---------[Invoke a SNMP++ Get]------------------------
pdu += vb;//add the variable binding
if ((status = snmp.get(pdu,ctarget)) != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);
}
else {
pdu.get_vb(vb,0);//extract the variable binding
cout << "System Descriptor = " << vb.get_printable_value();
}
}
我的代码:
#include <iostream>
#include <libsnmp.h>
#include "snmp_pp/snmp_pp.h"
#ifdef WIN32
#define strcasecmp _stricmp
#endif
#ifdef SNMP_PP_NAMESPACE
using namespace Snmp_pp;
#endif
using namespace std;
// #define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor
// 监控设备33 模拟量输入(AI13) A相输入电压 225.64 无告警 连接正常
// 监测点配置(类型:模拟量输入AI,地址:33,索引:13) 原始硬件描述:A相输入电压
#define SYSDESCR "1.3.6.1.4.1.50688.2.4.33.13.0"
// 设备自身(0) 开关量输入(DI2) 烟感告警 闭合(0) 无告警 连接正常
// 测点配置(类型:开关量输入DI,地址:0,索引:2) 原始硬件描述:烟感告警
// #define SYSDESCR "1.3.6.1.4.1.50688.2.2.0.2.0"
/*
2、控制操作,使用 SET。
控制节点说明 OID 值 类型
主机自身的空调控制 1 1.3.6.1.4.1.50688.2.9.256.1.0 INTEGER
主机自身的空调控制 2 1.3.6.1.4.1.50688.2.9.256.2.0 INTEGER
主机自身的空调控制 3 1.3.6.1.4.1.50688.2.9.256.3.0 INTEGER
主机自身的空调控制 4 1.3.6.1.4.1.50688.2.9.256.4.0 INTEGER
*/
// 01 制冷模式、风速-自动、温度16℃、上下扫风、左右扫风
#define AirConditioning_DESCR "1.3.6.1.4.1.50688.2.9.256.1.0"
// 关机 63 可以在任何模式下学习 关空调
#define AirConditioning_CLOSE_DESCR "1.3.6.1.4.1.50688.2.9.256.63.0"
void get_system_descriptor() {
int status;//return status
//CTarget ctarget((IpAddress)"15.123.41.7", OctetStr("public"), OctetStr("private"));
CTarget ctarget((IpAddress)"15.123.41.7", "public", "private");
Vb vb(SYSDESCR);//SNMP++ variable Binding
Pdu pdu;//SNMP ++ pdu
//--------[Construct a SNMP++ SNMP Object--------------
Snmp snmp(status);//create a snmp session
if (status != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);//if fail,print error string
return;
}
//---------[Invoke a SNMP++ Get]------------------------
pdu += vb;//add the variable binding
if ((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);
}
else {
pdu.get_vb(vb, 0);//extract the variable binding
cout << "System Descriptor = " << vb.get_printable_value();
}
//snmp.set(pdu, ctarget);
// int Snmp::set(Pdu &pdu, SnmpTarget &target)
//int Snmp::set(Pdu &pdu, SnmpTarget &target,
// const snmp_callback callback,
// const void * callback_data)
}
int main(int argc, char *argv[])
{
get_system_descriptor();
return 0;
}
报错如下图所示:
SNMP++: Transport is not supported 于是百度,在CSDN上找到这么一篇博客:SNMP++: Transport is not supported
即需要在构造Snmp之前添加如下的语句:
Snmp::socket_startup();
修改后的代码如下所示:
#include <iostream>
#include <libsnmp.h>
#include "snmp_pp/snmp_pp.h"
#ifdef WIN32
#define strcasecmp _stricmp
#endif
#ifdef SNMP_PP_NAMESPACE
using namespace Snmp_pp;
#endif
using namespace std;
// #define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor
// 监控设备33 模拟量输入(AI13) A相输入电压 225.64 无告警 连接正常
// 监测点配置(类型:模拟量输入AI,地址:33,索引:13) 原始硬件描述:A相输入电压
#define SYSDESCR "1.3.6.1.4.1.50688.2.4.33.13.0"
// 设备自身(0) 开关量输入(DI2) 烟感告警 闭合(0) 无告警 连接正常
// 测点配置(类型:开关量输入DI,地址:0,索引:2) 原始硬件描述:烟感告警
// #define SYSDESCR "1.3.6.1.4.1.50688.2.2.0.2.0"
/*
2、控制操作,使用 SET。
控制节点说明 OID 值 类型
主机自身的空调控制 1 1.3.6.1.4.1.50688.2.9.256.1.0 INTEGER
主机自身的空调控制 2 1.3.6.1.4.1.50688.2.9.256.2.0 INTEGER
主机自身的空调控制 3 1.3.6.1.4.1.50688.2.9.256.3.0 INTEGER
主机自身的空调控制 4 1.3.6.1.4.1.50688.2.9.256.4.0 INTEGER
*/
// 01 制冷模式、风速-自动、温度16℃、上下扫风、左右扫风
#define AirConditioning_DESCR "1.3.6.1.4.1.50688.2.9.256.1.0"
// 关机 63 可以在任何模式下学习 关空调
#define AirConditioning_CLOSE_DESCR "1.3.6.1.4.1.50688.2.9.256.63.0"
void get_system_descriptor() {
int status;//return status
//CTarget ctarget((IpAddress)"15.123.41.7", OctetStr("public"), OctetStr("private"));
CTarget ctarget((IpAddress)"15.123.41.7", "public", "private");
Vb vb(SYSDESCR);//SNMP++ variable Binding
Pdu pdu;//SNMP ++ pdu
//--------[Construct a SNMP++ SNMP Object--------------
Snmp::socket_startup();
Snmp snmp(status);//create a snmp session
if (status != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);//if fail,print error string
return;
}
//---------[Invoke a SNMP++ Get]------------------------
pdu += vb;//add the variable binding
if ((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)
{
cout << snmp.error_msg(status);
}
else {
pdu.get_vb(vb, 0);//extract the variable binding
cout << "System Descriptor = " << vb.get_printable_value();
}
//snmp.set(pdu, ctarget);
// int Snmp::set(Pdu &pdu, SnmpTarget &target)
//int Snmp::set(Pdu &pdu, SnmpTarget &target,
// const snmp_callback callback,
// const void * callback_data)
}
int main(int argc, char *argv[])
{
get_system_descriptor();
return 0;
}
注意:IP地址需要根据自己的snmp远程主机进行设置。 修改之前运行代码得到如下的结果:
参考资料
- 深入学习Golang—channel
- 当Python字符串遇上MySQL
- Spring Boot 2.0正式发布,升还是不升呢?
- Spring Cloud构建微服务架构:分布式服务跟踪(入门)
- Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
- Spring Cloud Gateway真的有那么差吗?
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
- Golang语言社区--【基础知识】循环
- Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
- Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】
- Spring Boot中使用LDAP来统一管理用户信息
- 使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc
- 使用Swagger2Markup实现API文档的静态部署(二):Markdown和Confluence
- Dubbo官方的Starter发布1.0.0测试版,与Spring Boot的结合将更加自然
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法