最近似乎有很多人做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.com/64/BE/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
  • http://torcache.net/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
  • http://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent
选择其中之一下载即可。得到对应的种子文件后,可以直接通过MonoTorrent解析成对象,并读取资源的名称、大小、收录日期、包含的文件等信息,接下来就可以存入数据库为以后的搜索引擎做准备了。

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

2、搜索引擎的实现

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

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

参考资料

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

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

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

http://en.wikipedia.org/wiki/Kademlia

BT樱桃

http://www.btcherry.com/

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

  1. 最近用.NET实现DHT爬虫,全.NET实现

    最近用.NET实现DHT爬虫,全.NET实现,大家可以加我QQ交流下  309159808 转载于:https://www.cnblogs.com/oshoh/p/9236186.html

  2. 用Python养一只DHT爬虫

    DHT是什么 DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法.在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整 ...

  3. Python分布式爬虫-elasticsearch搭建搜索引擎

    Python分布式爬虫-elasticsearch搭建搜索引擎 一.elasticsearch使用 1.elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它 ...

  4. 几款磁力搜索引擎,找资料更方便

    Bt177.info 一款强大的磁力搜索引擎网站,这款网站包含有7万多个磁力链接,提供提供网盘形式和磁力形式的储存,有很多你想要的东西.如果是音频和视频的话支持在线观看. Bt977 磁力搜索引擎,支 ...

  5. 高效的磁力搜索引擎 -_高效的企业测试-结论(6/6)

    高效的磁力搜索引擎 - 该系列的最后一部分将涵盖其他端到端测试,生产中的测试以及各部分的结论. 进一步的端到端测试和生产中的测试 除了仅验证单个被测应用程序并模拟外部问题的系统测试之外,我们的管道还必 ...

  6. 如何高效实现搜索引擎爬虫进行数据挖掘-搜索引擎爬虫(SERP)集成测试与分享

    身处大数据时代中,我们面对海量的互联网数据,如何自动高效地获取感兴趣的信息并为我们所用是一个非常重要的问题,以下就针对这个重要的搜索引擎爬虫问题来做一个技术分享. 什么是SERP和搜索引擎爬虫:搜索引 ...

  7. Python课设实验 之 爬虫应用——校园网搜索引擎(使用bs4进行数据分析.)

    题目要求: 第3题  爬虫应用--校园网搜索引擎 本题旨在使用Python建立一个适合校园网使用的Web搜索引擎系统,它能在较短时间内爬取页面信息,具有有效准确的中文分词功能,实现对校园网上新闻信息的 ...

  8. python语言磁力搜索引擎源码公开,基于DHT协议,十二分有技术含量的技术博客...

    之前我在写百度网盘爬虫,百度图片爬虫的时候答应网友说,抽时间要把ok搜搜的的源码公开,如今是时候兑现诺言了,下面就是爬虫的所有代码,完全,彻底的公开,你会不会写程序都可以使用,不过请先装个linux系 ...

  9. 一个dht网络的“磁力链接”搜索python代码

    这个python代码是用来从DHT网络(一种分布式的"磁力链接"的共享网络,这个叫法是我个人对这种分布式网络的称呼)中,检测收集"磁力链接".每一个磁力链接就对 ...

  10. dht java_java 构建磁力链接索引:Bencode 关于DHT的编码

    前言bencode 是 dht 的标准编码格式,DHT如果你没听说过,那磁力链接总得听说过吧,磁力链接就是基于DHT发展起来 想要自己建立磁力建立一套磁力链接索引,用来查询相关的资源,那么Bencod ...

最新文章

  1. 根据应用程序池名称获得第一个站点的物理路径
  2. 【Linux】一步一步学Linux——usernetctl命令(175)
  3. Merge Two Sorted Lists LeetCode
  4. figma下载_搬到Figma对我意味着什么
  5. html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法
  6. 只删除字符串前面的‘*’号。
  7. elastic-job控制台部署与使用
  8. (组合数学习题)递推关系一道经典题分析与解答
  9. Vue基本使用---vue工作笔记0002
  10. 关于用C#编写ActiveX控件4(转)
  11. [现代程序设计]homework-03
  12. 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误...
  13. javascript的getElementByTagName
  14. LordPE 查看程序依赖项的好工具
  15. dtft频移性质_08 DTFT变换的性质
  16. CSDN日报190225——滴滴员工求裁员,阿里不裁员,互联网公司裁员众生相!
  17. 面试题-实现数组map方法
  18. 【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
  19. Android 9 wifi PNO 扫描
  20. animate.css 动画库的使用

热门文章

  1. 完美解决Tensorflow不支持AVX2指令集问题|指令集加速
  2. Vue 3 中文文档来啦!
  3. Autosar OSEK 网络管理学习笔记
  4. matlab实现Sobel边缘检测
  5. 金融市场:最全的外汇平台资料大全(包括开户金额、点差、特色!)
  6. catia怎么添加毛坯_CATIA教程
  7. linux下journalctl日志在哪,journalctl---系统日志
  8. 一加3t刷机后还卡_一加3t刷机工具大全+3个ROM
  9. netperf的安装、性能测试、参数、启动报错的坑、实例
  10. Radasm出现error LNK2001