- 论坛徽章:
- 0
|
近来写了个抓包程序,放在网络出口处,出发点是抓取所有用户的包,然后写到数据库里面。
处理流程是这样:
1.把抓取的包信息写到一文件里面,信息为源IP,目的IP,源端口,目的端口,抓包时间等5项
2.按固定的时间(比如说1个小时)对文件进行处理,所作的处理为用gawk把文件组织成sql语句,
例如:
抓取的文件的内容是"123.123.123.123,10.10.10.10,4523,80,2007-02-09 12:00:00"
通过gawk后,文件内容变为
insert into tableA values("123.123.123.123","10.10.10.10","4523","80","2007-02-09 12:00:00");
3.将2中生成的文件result,用mysql命令导入数据库,mysql db<result
4.循环上述所说的
外界条件:
网络出口处流量18Mbps
Linux下文件大小有限制,为2G
问题:
随着用户数量增多,每小时抓取的数据量必定会超过2G,如何解决?即使把1个小时改为半个小时,也会出现超2G的情况。这里暂不作大文件(超2G)处理。
我觉得我这样做法的效率很低,但又说不出低在那里,请指点?
程序曾经出现过写数入据库丢失数据现象,我怀疑是由于上次数据未处理完入库而下一次又开始处理数据入库造成的。
请问,怎样才能高效的处理上述的情况?请各位指点!如果各位有更好的想法,请提出,谢谢!
|
|