⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 equip_statue.cpp

📁 这是在linxu环境下,用c实现的snmp监控远程设备状态的程序,这是我们项目的一小部分,拿出来给大家贡献
💻 CPP
字号:
#include <iostream>
#include <string>
#include <fstream>

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

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

using namespace std;
const int BUFFSIZE=1024;
const int IPLEN=30;
const int SQLMAX=1024;
char buff[BUFFSIZE];
class mysql_helper
{
	string _host,_user,_pass;
public:
	mysql_helper(char host[],char user[],char pass[]):_host(host),_user(user),_pass(pass)
	{
	}
	void query(char sql[])
	{
		MYSQL demo_db;
		mysql_init(&demo_db);
		if(!mysql_real_connect(&demo_db, "localhost", "root", "315845",NULL,0,NULL,0)){
			printf(mysql_error(&demo_db));
			exit(1);
		}

		if(mysql_select_db(&demo_db, "3tnet")){ /* Select the database we want to use */
			printf(mysql_error(&demo_db));
			exit(1);
		}

		if(mysql_query(&demo_db,sql)){
			printf(mysql_error(&demo_db));
			exit(1);
		}
		mysql_close(&demo_db);
	}
};
void update_equip_statue(char aboveip[],char descr[],char ip[],int statue,int num)
{
	char query[SQLMAX];
	if(!strcmp(descr,"dorm_32_A102(9/0)")||!strcmp(descr,"dorm_32_B103(10/0)"))
		sprintf(query,"REPLACE interface(interface_id,info,status,ip,number) VALUES('%s_%s','(%s)',%d,'%s',%d)",aboveip,descr,descr,statue,ip,num);
	else
		sprintf(query,"REPLACE interface(interface_id,info,status,ip,number) VALUES('%s_(%s)','(%s)',%d,'%s',%d)",aboveip,descr,descr,statue,ip,num);
	//printf("%s\n",query);
	mysql_helper sqlhelper("localhost","root","315845");
	sqlhelper.query(query);
}
int main(int argc,char * argv[])//第一参数为top结构的地址,第2参数为top的上一层ip地址
{
	if(argc<3)
	{
		cout<<"pls enter topfile and ip"<<endl;
		exit(0);
	}
	ifstream iff(argv[1]);
	if(!iff)
	{
		cout<<"open file "<<string(argv[1])<<"error"<<endl;
		exit(0);
	}
	while(iff.getline(buff,BUFFSIZE))
	{
		//printf("%s\n",buff);
		char descr[BUFFSIZE];
		int num;
		char ip[IPLEN];
		sscanf(buff,"%s%d%s",descr,&num,ip);
		//printf("%s\n%d\n%s\n",descr,num,ip);

		//请求一个snmpget包以确定设备是否可用!
		int equip_statue=2;
		struct snmp_session ss,*ssp;
		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;
		int count=1;

		init_snmp("snmpapp");
		snmp_sess_init(&ss);			/* initialize session */
		ss.version = SNMP_VERSION_2c;
		ss.peername = strdup(ip);
		ss.community =(u_char*) strdup("public");
		ss.community_len = strlen((char*)ss.community); 
		if (!(ssp = snmp_open(&ss))) 
		{
		//  fprintf(stdout,"%s open error!\n",ERROR);
		snmp_perror("snmp_open");
		exit(1);
		}	

		pdu = snmp_pdu_create(SNMP_MSG_GET);

	// read_objid(".1.3.6.1.2.1.1.3.0", anOID, &anOID_len);
		get_node("sysUpTime.0", anOID, &anOID_len);
	// read_objid("SNMPv2-MIB::sysDescr.0", anOID, &anOID_len);

		snmp_add_null_var(pdu, anOID, anOID_len);
	  
		status = snmp_synch_response(ssp, pdu, &response);


		if (status == STAT_SUCCESS && response->errstat == SNMP_ERR_NOERROR) 
		{
			equip_statue=1;
		} 
		else 
		{
			equip_statue=2;
		}
		
		if (response)
		snmp_free_pdu(response);
		snmp_close(ssp);
		update_equip_statue(argv[2],descr,ip,equip_statue,num);

		SOCK_CLEANUP;

	}
	iff.close();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -