这学期一直在做一个网络协议识别相关的项目,当然只是打打酱油之类的角色。对网络协议的识别有了自己的一点认识。正好也算是自己的一个阶段性总结。
首先是网络协议识别的方式,目前比较常见的一是基于端口的,比如80端口就识别成是http。二是基于指纹比对,其实就是依据内容进行字符串比对,比如有post,get之类的就识别成http什么的。这两种方法是目前较常见的也比较容易实现的。但是这两种方法有很大的缺点,目前很多p2p软件,木马等端口不固定,而且对内容加密传输,这就造成前两种方法基本上就失效了,而skype就是其中典型的代表。
于是一个新的概念出现了,网络协议的行为特征分析。注意,这里是行为特征,比如包的长度变化,方向变化,加密方法造成的内容特征等。它的优点是不再依赖于端口和内容比对,但缺点也很明显,准确度不能得到保障。而这一块的研究也是很大的热点,涉及到模型的建立,算法的设计等。
另外值得一提的就是包的抓取方式,一种是目前比较常见的开源pcap库。另一种则是比较新的零拷贝抓包,这种方式通过修改内核,将网卡抓到的包的在内存中的物理地址传递到用户层,然后通过map函数将其映射到用户内存空间,然后进行相关计算。这样就少了一个copy_to_user的过程,大大提高了效率。