📄 equip_statue.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 + -