现在我已编程实现了基于winpcap网络数据包的收集和分析工作,主要针对TCP和UDP包进行,把包中各字段值存入数据库,现在我要根据这些收集到的包来生成连接记录。
例如对于tcp来说,一个连接记录要有下列字段:
duration  src_bytes              dst_bytes            ..............
持续时间  源端收集到数据包字节数   目的端收集到数据包字节数
甚至更复杂的一些统计数据,比如重试次数,错误分段数等等。
我的思路是根据数据库中存放的TCP数据包的SEQ,ACK字段来进行匹配,从最开始的三次握手协议开始连接(SYN,ACK-SYN,ACK)到最后的三次握手关闭连接结束,整个过程作为一个连接记录。我觉得思路应该是正确的,但是在实际网络中,我发现这样处理的效果根本不好,主要体现在一下几个方面:
1.无论我用自己写的数据包收集程序还是windump来收集tcp数据包,收集了大约5000条,但其中基本没有看到tcp三次握手建立连接的包,也难看到关闭连接的包。我想了一下其实建立连接和关闭连接的过程很短(有些甚至是非法关闭了),关键过程建立连接后传送数据包的过程,这个过程也占用了大量时间
2.即使我能找到建立连接和关闭连接的包,但是对这些包进行处理好像要不断的查询数据库,对记录的某些字段进行匹配,这样做起来好像效率很低啊所以,就以上问题请教一下高手,能否给出一个思路或者算法,甚至程序,小弟感激不尽了!!!!!