猜想了一下ed2k资源的内网搜索可能有两种方案:
一,对给定ip段的主机进行搜索,观察也没有ed2k资源正在进行交互,如果有,对资源名称进行分析记录,作为搜索依据。
二,定位eMule服务器,调用eMule公开的搜索API进行资源搜索。
方案一太FTP了,eMule客户端自己的搜索也是按照方案二的,方案二是比较现实的方向。
如果要在内网实现,需要这样几个步骤:
1,使用内网提供的client进行下载,wireshark抓包分析出server的地址;
2,目前内网提供的client仅仅只有依据ed2k下载的功能,估计只有hash匹配没有名字匹配,名字匹配必须另找接口;
3,有办法能够遍历server上的share list就更方便了,总共享量应该不大,能有list对资源利用有不小的作用,这个需要可以使用第2项进行覆盖,如果能有 按类型 搜索的API,获取一张.avi的查询结果,一张.doc的结果,加上常用的资源后缀,差不多也就是想要的share list了。
对eMule的原理了解太少,还好网上的资料比较丰富,但是还没找到头绪,近期定位每天读点文档,慢慢找感觉。
emule是如何搜索的?
每一个客户端连接到一个服务器作为他的主服务器。在连接时,由客户端告诉主服务器他share了那些文件,以及IP地址等其他信息。所以每一个服务器会记录所有登陆到他服务器上的以上信息。在本服务器搜索时,它会通过匹配记录的已知以上信息把查找结果反馈给搜索的客户端列表。
emule是如何下载的?
当客户端选择了一个文件下载时,它首先收集一个拥有该文档的客户端的列表。
它会先行查询主服务器所有登陆用户他们是否拥有该文件。然后再连接和查选其他服务器的登陆用户所拥有该文件的客户端列表。一旦它找到拥有该文件的其他客户端,它将请求每个客户端发送这个文件的不同片。直至最后文件由这个不同的片组装成一个完整的文件。
找到几篇精彩的博文,谢过几位前辈,先收藏了,慢慢拜读:
开源软件,用vb打造人人都可以用,人人都可以开发的P2P软件
http://blog.csdn.net/CHINAVBCODE/archive/2005/08/30/468097.aspx
emule应用及原理
http://blog.csdn.net/petit/archive/2005/03/27/332157.aspx
源码解析