当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 基于中软Linux实现代理服务器与防火墙(2)
Linux服务器 中的 基于中软Linux实现代理服务器与防火墙(2)
CREATETABLEIPtraffic
(
IPaddressCHAR(16)NOTNULL,
TCPsentRemotelyINT,
TCPrcvdFromRemoteINT,
UDPsentRemotelyINT,
UDPrcvdFromRemoteINT,
PRIMARYKEY(IPaddress)
);
CREATETABLENameMapper
(
IPaddressCHAR(16)NOTNULL,
NameCHAR(50),
PRIMARYKEY(IPaddress)
);
创建备份数据库表test
FieldTypeNullKeyDefaultExtra
IPaddressvarchar(20)YESNULL
dataint(11)YESNULL
datesdateYESNULL
修改ntop源代码中的sql.c
例如:
if(snprintf(sqlBuf,SQL_BUF_LEN,"UPDATEIPtrafficSET"
"TCPSentRemotely=%llu,"
"TCPrcvdFromRemote=%llu,"
"UDPSentRemotely=%llu,"
"UDPrcvdFromRemote=%llu"
"WHEREIPaddress='%s'",
(el->tcpSentRemotely),
(el->tcpReceivedFromRemote),
(el->udpSentRemotely),
(el->udpReceivedFromRemote),
el->hostNumIpAddress)<0)traceEvent(TRACE_ERROR,"Bufferoverflow!");
sendto(sqlSocket,sqlBuf,strlen(sqlBuf),0,(structsockaddr*)&dest,
sizeof(dest));
将需要的字段保留,其它的去除!
编写数据库表数据的备份程序select_test.c的编译程序(编译时运行make)
Makefile:
#ThisisaMakefileforselect_test.c
CC=gcc
INCLUDE=-I/usr/include/mysql
LIBPATH=-L/usr/lib/mysql
LLIB=-lmysqlclient
select_test:select_test.c
$(CC)-oselect_testselect_test.c$(INCLUDE)$(LIBPATH)$(LLIB)
数据库表数据备份程序select_test.c:
#include
#include
#include"mysql.h"
#include
#include
#defineSELECT_QUERY "select
IPaddress,(UDPrcvdFromRemote+UDPsentRemotely+TCPrcv
dFromRemote+TCPsentRemotely)asdatafromIPtrafficwhereIPaddresslike
\"%s\"orIPaddresslike\"%s\""
#defineINSERT_QUERY"insertintotest(IPaddress,data,dates)values
(\"%s\",%d,\"%s\")"
#defineTEST_QUERY"selectdatesfromtestwheredates=\"%s\""
/*获取当前日期*/
getdates(char*currentdate)
{
structtimevaldatetemp;
structtm*datetemp1;
gettimeofday(&datetemp,(void*)NULL);
datetemp1=localtime(&(datetemp.tv_sec));
sprintf(currentdate,"%d-%02d-%02d",datetemp1->tm_year+1900,datetemp1->tm_mon+1,
datetemp1->tm_mday);
}
intmain(intargc,char**argv)
{
unsignedintnum_fields;
unsignedinti;
intcount,num,charge;
MYSQLmysql,*sock;
MYSQL_RES*res;
MYSQL_FIELD**fields;
MYSQL_ROWrow;
charselectqbuf[1024];
charinsertqbuf[1024];
chartestqbuf[512];
charcurrentdate[11];
currentdate[10]=0;
if(argc!=3)
{
fprintf(stderr,"usage:select_test
exit(1);
}
mysql_init(&mysql);
if(!(sock=mysql_real_connect(&mysql,NULL,0,0,"NTOP",0,NULL,0)))
{
fprintf(stderr,"Couldn'tconnecttoengine!\n%s\n\n",mysql_error(&mysql));
perror("");
exit(1);
}
/*INNTOPdatabases,ifhavesomerecorderssameascurrentdate,don'tin
sertthemtodata`table*/
getdates(currentdate);
charge=1;
sprintf(testqbuf,TEST_QUERY,currentdate);
if(mysql_query(sock,testqbuf))
{
fprintf(stderr,"Queryfailed(%s)\n",mysql_error(sock));
exit(1);
}
if(!(res=mysql_store_result(sock)))
{
fprintf(stderr,"Couldn'tgetresultfrom%s\n",
mysql_error(sock));
exit(1);
}
i=mysql_num_rows(res);
if(i==-1)
{
printf("couldn'truntestselectwithcurrentdate\n");
}
if((i!=0)&&(i!=-1))
{
charge=0;
printf("INtesttable,having
somerecordersincludedcurrentdate,error!\n");
exit(1);
}
mysql_free_result(res);
mysql_close(sock);
if(!(sock=mysql_real_connect(&mysql,NULL,0,0,"NTOP",0,NULL,0)))
{
fprintf(stderr,"Couldn'tconnectto
engine!\n%s\n\n",mysql_error(&mysql));
perror("");
exit(1);
}
/#sleep(100)#/
sprintf(selectqbuf,SELECT_QUERY,argv[1],argv[2]);
if(mysql_query(sock,selectqbuf))
{
fprintf(stderr,"Queryfailed(%s)\n",mysql_error(sock));
exit(1);
}
if(!(res=mysql_store_result(sock)))
{
fprintf(stderr,"Couldn'tgetresultfrom%s\n",
mysql_error(sock));
exit(1);
}
while((row=mysql_fetch_row(res))&&charge)
{
num=atoi(row[1]);
sprintf(insertqbuf,INSERT_QUERY,row[0],num,currentdate);
mysql_query(sock,insertqbuf);
评论 (0) All