本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
最近在做P2P的session识别,也就是通过对包内容的分析,判断该session是哪种P2P软件。
发现大体上有以下几种方法:
- 有明确文档的,如电骡——在网上可以找到电骡的协议;这种比较方便,中规中矩的按照协议分析就好了;
- 在某些包中会有关键字,如easyMule——到这里要插一句,easyMule一直在误导大家,让大家认为easyMule是eMule的中文版本,其网站是电驴的中文网站。其实则不然。大家随便搜索一下就可以知道事情的始末。在easyMule的TCP连接中,握手后的包中往往会带有verycd的关键字。所以很容易识别;除了easyMule以为,还有很多P2P软件都会在TCP连接后的数据中,夹带自己的关键字。
- 包中没有关键字,但是仍然会有自己的一些固定字节。通过对比,往往可以找出规律;
- 包的内容插入了随机字段,包的内容始终找不到规律。那么可以从包的长度入手。因为尽管该P2P软件加入了随机字段,但是其交互的数据大小往往有规律。比如Ares。打个比方,第一个包的数据长度为11,第二个包的长度为8,第3个的长度为40,第4个的长度也为40。那么,如果该session符合这个特征,我们就可以判断出该session;
- 包的长度以及包的内容没有任何的特征。以Skype为例,因为skype有用户名和密码,所以它可以直接把密码作为私钥对数据进行加密。那么除了skype服务器外,没有人可以解密数据包。无论我们怎么比较数据包的内容,也不会找出规律。那么如何检测Skype的session呢?我们可以从另外一个角度去解决这个问题。在之前的判断中,我们都是通过该session的数据,来判断其协议类别。对于Skype来说,这条路就走不通了。那么我们可以通过skype的活动特征来判断。通过抓包分析,skype在建立TCP连接之前,都会使用UDP来检测对端端口是否可以连接。这就可以成为我们检测skype的手段。当然,在具体的实施中,还有很多细节需要考虑
阅读(4162) | 评论(1) | 转发(0) |