SNMP 是专门用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。
++通过API进行snmp配置++
c
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <stdio.h>
#include <string.h>
// 自定义MIB节点
#define SERVICE_STATUS_OID ".1.3.6.1.4.1.12345.1.1"
#define SERVICE_STATUS_DESC "Service Status"
// 全局变量
int service_status = 0; // 0 = Stopped, 1 = Running
// 处理service_status节点的请求
int handle_service_status(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
switch (reqinfo->mode) {
case MODE_GET:
snmp_set_var_typed_integer(requests->requestvb, ASN_INTEGER, service_status);
break;
case MODE_SET_RESERVE1:
if (*(requests->requestvb->val.integer) != 0 && *(requests->requestvb->val.integer) != 1) {
snmp_set_var_typed_value(requests->requestvb, ASN_NULL, (const u_char *)&service_status, sizeof(service_status));
return SNMP_ERR_WRONGVALUE;
}
break;
case MODE_SET_COMMIT:
service_status = *(requests->requestvb->val.integer);
break;
default:
snmp_log(LOG_WARNING, "Unsupported mode for service_status\n");
return SNMP_ERR_GENERR;
}
return SNMP_ERR_NOERROR;
}
// 注册MIB节点
void register_service_mib()
{
oid service_status_oid[] = {1, 3, 6, 1, 4, 1, 12345, 1, 1};
netsnmp_register_scalar(
netsnmp_create_handler_registration(
"service_status",
handle_service_status,
service_status_oid,
OID_LENGTH(service_status_oid),
HANDLER_CAN_RWRITE
)
);
}
// 启动SNMP代理
void start_snmp_agent()
{
init_agent("service_agent");
init_snmp("service_agent");
// 注册自定义MIB节点
register_service_mib();
// 进入主循环
agent_check_and_process(1);
}
int main(int argc, char **argv)
{
// 初始化SNMP子系统
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
// 启动SNMP代理
start_snmp_agent();
return 0;
}