基于中软Linux实现代理服务器与防火墙(2)

2009-05-13 00:57:31来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


作者:李宇

流量统计

流量统计使用ntop提供的统计功能来实现。ntop在统计过程中,会在内存中创建一个数据列表,即时更新数据信息。同时,它提供定时向数据库中发送相关数据的功能,时间间隔可以在编译前设置。我们可以根据实际需要定义ntop统计的数据。利用ntop提供的向MySQL数据库中更新数据的方法,定期存储数据到备份数据库表中。定期存储数据的功能使用select_test.c实现,同时刷新内存中ntop流量值及ntop默认数据库表。

有了保存于MySQL数据库中的统计数据,通过来用PHP编写动态网页,完成数据库中数据的查询和统计。具体的实现方法比较简单。如果需要了解如何构建Apache+MySQL+PHP完成流量查询,可以在很多Linux技术交流网站查找到相关的技术文档。

由于ntop记录的信息非常详细,有些协议是很少使用的,或是产生的流量比较少,可以忽略不计,所以我们要对ntop记录的数据做一调整。

以下所做的工作有简化数据表结构(保留我们需要的字段,简化保存的数据);创建备份数据库表test;修改ntop源代码中的sql.c,简化默认的ntop向MySQL数据库中添加的数据;编写数据库表数据的备份程序;设定ntop对数据库的刷新时间,保证刷新内存的时间小于我们设定的循环时间(参见ntop.h);将网卡设置为非混杂模式;编写脚本完成循环统计功能。

简化后的数据表结构(mySQLdefs.txt)

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\""

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:基于中软Linux实现代理服务器与防火墙(1)

下一篇:Linux服务器硬盘提速方案