SNMP+MySQL 实现私有mib节点在数据库中存取数据

运行环境

centos7+SNMP 5.7.3+MySQL

net-snmp如何添加自定义MIB(标量)

参考文章
https://blog.csdn.net/qq_36849711/article/details/119204413

SNMP连接MySQL

1.在生成的标量文件 .c文件中包含mysql的头文件,如果找不到这个头文件,查看MySQL是否安装完全

#include “MySQL文件保存路径/mysql.h”

2.使用dlopen/dlsum动态加载动态库

如果只引用头文件,编译安装SNMP的时候可能出现无法识别数据库连接、查询等方法,下面是我通过dlopen动态加载动态库,查找函数的地址实现了数据库连接方法,这种方式类似重新声明函数,所以需要知道要使用的函数的原型。以此类推可以实现数据库查询,数据库连接等方法。
参考文章
https://blog.csdn.net/sa726663676/article/details/123355547

    MYSQL *conn; //数据库连接句柄
	void* handle = dlopen("/usr/lib64/mysql/libmysqlclient.so", RTLD_LAZY);//路径以本机存储位置为准
	MYSQL *(*mysql_init)(MYSQL *mysql);		//初始化
	mysql_init = dlsym(handle, "mysql_init");
	conn = mysql_init(NULL);

 	MYSQL *(*mysql_real_connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);	
	mysql_real_connect = dlsym(handle, "mysql_real_connect");		//连接MySQL
	
    mysql_real_connect(conn, "localhost", "username", "password", "databasename", port, NULL, 0)//通过上述操作后,连接数据库的方法可以使用

3.实现SNMP的GET和SET

对mib节点进行get操作时,获取的就是下面代码的name值,通过给name赋值,可以动态的获取mib节点的值,可以通过上面操作,从数据库取值存入name中,用来实现节点数据的动态读取。

switch (reqinfo->mode) {

case MODE_GET:
    snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
                             buff,
                              strlen(buff));
    break;

我们对mib节点进行set操作时
例如 snmpset -v 2c -c public localhost 1.3.6.1.4.1.xxx.x.x.0 s test
s代表字符 对这个mib节点赋值test
下面代码中,我通过定义一个字符串数组buff,用于接收requests->requestvb->buf中的数据,也就是我上面通过snmpset设置的test值,通过这种方式实现mib节点的修改。

case MODE_SET_COMMIT:
            /* XXX: delete temporary storage */
		
		    memcpy(buff,requests->requestvb->buf,requests->requestvb->val_len); // 赋值
            buff[requests->requestvb->val_len] ='\0';   //字符串结束符
            if (ret != SNMP_ERR_NOERROR) {
                /* try _really_really_ hard to never get to this point */
                netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
            }
            break;

完结

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用Qt和snmp++实现SNMP操作模块,您可以按照以下步骤进行操作: 1. 安装Qt和snmp++:您需要安装Qt和snmp++库才能开始编写代码。您可以从官方网站下载和安装Qt,并从GitHub上获取snmp++代码并编译。 2. 创建Qt项目:使用Qt Creator创建一个新项目,选择Console Application。 3. 添加snmp++库:将snmp++库添加到Qt项目。在Qt Creator,打开.pro文件并添加以下行: ``` INCLUDEPATH += /path/to/snmp++/headers LIBS += /path/to/snmp++/library ``` 4. 编写代码:在Qt项目编写代码来实现SNMP操作。以下是一个简单的示例代码: ``` #include <iostream> #include "snmp_pp/snmp_pp.h" using namespace std; using namespace Snmp_pp; int main(int argc, char *argv[]) { Snmp snmp(Version::version2c); UdpAddress address("192.168.1.1/161"); CTarget target(address); Pdu pdu; Vb vb; vb.set_oid(Oid("1.3.6.1.2.1.1.1.0")); pdu += vb; snmp.get(pdu, target); if (pdu.get_error_status() != 0) { cout << "Error: " << snmp.error_msg(pdu.get_error_status()) << endl; } else { cout << "Result: " << vb.get_printable_value() << endl; } return 0; } ``` 该代码使用snmp++库来获取远程设备的系统描述符。它创建一个SNMP对象,设置目标地址和PDU,并使用get()方法发送请求。 5. 构建和运行:使用Qt Creator构建和运行项目。如果一切正常,您应该会看到结果输出到控制台。 这只是一个简单的示例,您可以根据需要编写更多的代码来实现您的SNMP操作。希望这能帮助您入门。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要创造一个不收费的C-S-D-N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值