纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com

编程知识 更新时间:2023-05-03 03:52:13

最近似乎有很多人做DHT爬虫,但是好像没有完全用C#实现的,所以我来介绍一下C#的实现过程。关于DHT协议的原理,网上有很多介绍的文章,这里就不再赘述,仅说说实现的过程,作为抛砖引玉吧。


1、DHT爬虫的实现

DHT协议我选择使用MonoTorrent项目并稍作修改,使爬虫可以得到其他节点“开始下载”的通知。每个DHT节点都有自己的ID,而开始下载的通知只会发送到离自己“最近”的节点,所以如果我们想要收到更多的消息,就要启动尽可能多、ID尽可能平均分布的节点。

在我们收到的“开始下载”消息中,有一个40字节长的字符串,就是这个资源的ID,也表示网络中有一个用户开始下载这个资源了。下载同一个资源的用户越多,表示这个资源越热门,下载速度也越快。

得到资源ID后,需要通过种子缓存服务下载对应的种子文件。如资源ID:640FE84C613C17F663551D218689A64E8AEBEABE,则对应的种子下载地址分别为:

  • https://zoink.it/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
  • http://bt.box.n0808/64/BE/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
  • http://torcache/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
  • http://torrage/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
选择其中之一下载即可。得到对应的种子文件后,可以直接通过MonoTorrent解析成对象,并读取资源的名称、大小、收录日期、包含的文件等信息,接下来就可以存入数据库为以后的搜索引擎做准备了。

需要注意的是爬虫启动时需要通过已经在DHT网络中的节点引导,常用的引导节点是dht.transmissionbt和router.bittorrent,端口都是6881。


2、搜索引擎的实现

种子信息的检索使用Lucene.Net,是Apache Lucene项目的.Net移植。通过IIS中运行的守护线程,定时将最新采集的BT信息加入到Lucene索引中,aspx后台通过关键词进行检索即可。

Lucene默认的分词器StandardAnalyzer对中文支持的不是很好,其他的选择还有盘古分词和庖丁解牛,这里btcherry用的是Apache提供的ChineseAnalyzer和StandardAnalyzer配合使用。


参考资料

http://www.bittorrent/beps/bep_0005.html

http://codemacro/2013/05/19/crawl-dht/

http://blog.csdn/xxxxxx91116/article/details/7970815

http://en.wikipedia/wiki/Kademlia


BT樱桃

http://www.btcherry/

更多推荐

纯C#实现的DHT爬虫和磁力搜索引擎 - btcherry.com

本文发布于:2023-04-30 11:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/59561e0c431396856fa9301892268c45.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   磁力   搜索引擎   DHT   btcherry

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 114293文章数
  • 28932阅读数
  • 0评论数