写了个磁力搜索的网页 - 收录最近热门分享的资源

好吧,又很疯狂地做了一个东西:http://bt.shousibaocai.com/

btsearch

平常我们高端用户都会用到BT工具来分享一些好玩的资源,例如ubuntu 13.04的ISO安装盘,一些好听的音乐等。这个时候我们会进入一个叫做P2P的网络,大家都在这个网络里互相传递数据,这种分布式的数据传输解决了HTTP、FTP等单一服务器的带宽压力。以往的BT工具(包括现在也有)在加入这个P2P网络的时候都需要借助一个叫Tracker的中心服务器,这个服务器是用来登记有哪些用户在请求哪些资源,然后让请求同一个资源的用户都集中在一起互相分享数据,形成的一个集群叫做Swarm。

这种工作方式有一个弊端就是一旦Tracker服务器出现故障或者线路遭到屏蔽,BT工具就无法正常工作了。所以聪明的人类后来发明了一种叫做DHT(Distributed Hash Table)的去中心化网络。每个加入这个DHT网络的人都要负责存储这个网络里的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库。在DHT里定位一个用户和定位一个资源的方法是一样的,他们都使用SHA-1产生的哈希值来作标识。

具体如何工作的呢?举个形象点的例子,把DHT网络比作一个朋友圈子,你想进入这个圈子必须要有一个人带领你进去,通常会有一些特定人负责介绍你进入这个圈子。当你被A带进这个朋友圈,此刻你就只认识A而已。但是你的目的是想找奥巴马总统,所以你会问A要奥巴马的联系方式,但是A没有奥巴马的联系方式,他会介绍一个美国朋友B给你认识。于是你去问B要奥巴马的联系方式,B其实也没有奥巴马的联系方式,但是B认识一个州长C。于是你又得到了C的联系方式,C把奥巴马的联系方式告诉你之后,你就可以写信或者致电给奥巴马了。

这种DHT网络听起来很不错,没有中心服务器,也不怕被DDOS,看看海盗湾如今还能挺立那么久就知道了。但是有没有安全隐患在里面呢?答案是肯定有的。有些不听话的用户可能会在DHT网络里捣乱,譬如说撒谎,明明自己不是奥巴马,却偏说自己是奥巴马,这样会误导其他人无法正常获取想要的资源。另外,用户在DHT网络里的隐私可能会被窃听,因为在DHT网络里跟其他用户交换资源的时候,难免会暴露自己的IP地址,所以别人就会知道你有什么资源,你在请求什么资源了。这也是目前DHT网络里一直存在的一个弱点。

正是利用这个弱点,我根据DHT协议用Python写了一段白菜程序,加入了这个DHT网络。在这个网络里,我会认识很多人,越多越好,并且观察这些人的举动,比如说A想要ubuntu的安装盘,那么我会把A的这个行为记下来,同时我会把ubuntu安装盘这个资源的信息也记下来,保存到数据库中,统计请求ubuntu这个资源的人有多少。如今,这个爬虫已经运行了两个昼夜,以每分钟记录3000多个资源信息的速度工作(单机器单线程,耗尽了CPU的一个核心)。到目前为止(48小时),共发出4亿条交友请求,收到1100万条来自朋友的资源请求。到底有多少资源目前另外一个程序还在分析中,从已分析的300万请求中,独立资源个数为20万个。保守估计这1100万条请求中涉及资源个数为50万以上。迟点有空的话,对这些资源进行分类和分析。

在DHT网络里发现的资源基本上都是最新的活跃资源,一些几年前的资源现在没有用户请求的话就不会被挖掘出来。想想海盗湾沉淀了那么久才500万资源,我跑了两天的程序就已经探测到50万资源,所以随着时间推移,会有更多的资源被探测出来,而且那些最新的能够被接近实时的速度发现到。本来通过增加一个节点进程可以加快探测速度,但是我没有这样做的原因是分析请求的哈希值的速度赶不上发现新请求的速度。有兴趣的朋友可以自己琢磨一下这方面的东西,国内研究DHT网络的人应该比较少。前段时间我打探过几家现在做P2P视频播放的公司里,没有人做这方面的研究。

 

[DHT Protocol] http://www.bittorrent.org/beps/bep_0005.html

 

写了个磁力搜索的网页 - 收录最近热门分享的资源》上有293条评论

    1. Xiaoxia 文章作者

      暂还没有开源的决定,过段时间考虑下,部分会开源的的,比如如何做DHT协议通信之类的。

      回复
      1. Mine

        bitcoin谁给谁多少钱是看得到的,而且从第一笔交易开始就是完全公开的。
        不过这个“谁”只是个hash值,不知道这个值对应到谁,所以也就是匿名的了。

        回复
          1. wb

            这是我最反感的,国外,几个人就能做一个大站,成就一个一个的商业神话。可TM在中国,却把大量人力物力放在了内容审查过滤上,好像咱一传什么zhengzhi信息这国家就得完蛋似的。

            回复
            1. Xiaoxia 文章作者

              国情不同,国内可以用愚民教育,因为普遍老百姓素质不高,不能跟先进国家相比。就像你在美国要求小学生佩戴红领巾,看他们会不会像中国小学生那么乖。如果没有新闻联播洗脑,说不定就会乱起来了~~

              回复
      1. wb

        [ Traceback (most recent call last):
        File “/usr/local/lib/python2.6/dist-packages/tornado-2.4.1-py2.6.egg/tornado/web.py”, line 1042, in _execute
        getattr(self, self.request.method.lower())(*args, **kwargs)
        File “site_dht.py”, line 59, in get
        self.render(‘index.html’, reports=reports, results=results, s=s, ss=ss, stats=stats)
        UnboundLocalError: local variable ‘stats’ referenced before assignment ]

        是不是在调整,我这刚打开出这个。[chrome]

        回复
                1. Xiaoxia 文章作者

                  二维码那个不知道怎么用的,手机能播放磁力链接么?
                  完整文件列表我想在新窗口打开。

                  回复
                  1. wb

                    能呀 。手机上的应用,比如 手雷。迅雷离线。http://m.xunlei.com/lixian.html 如果你用安卓机的话,可以试用一下。

                    那个二维码我想应该是后台程序来完成的,比如先读取下文件,判断是否为视频格式,然后把磁力链接生成一个二维码。。但是具体要说程序怎么写,这个我就不会了。呵呵

                    当然了,也不一定只是单独针对视频文件,其他也可以

                    回复
                  2. wb

                    哎呀,我脑残了。优酷就是呀,随便点进一个视频,播放器下面就有一个【用手机看】 不过他那个还要点一下,有点麻烦

                    回复
  1. Pingback引用通告: 推荐一个P2P下载利器 | 精品笔记

      1. 神猫

        就是没想到要怎么找到第一个节点 我试着抓比特精灵的 但是获取到的不知道是不是kad协议的

        回复
  2. Derek

    果然高端。本以为是爬一些资源网站来收集磁力链,没想到直接爬DHT网络。国人做过类似的爬行ed2k网络的,网站是http://donkey4u.com/,还将视频下载一小段以后用ffmpeg截图。

    回复
  3. 神猫

    请问xiaoxia 难免会暴露自己的IP地址,所以别人就会知道你有什么资源,你在请求什么资源了。
    是指只要知道了一个节点的ip端口 就可以查询这个节点有哪些资源吗?
    如果是那有什么方法查询呢 谢谢哦

    回复
  4. Pingback引用通告: P2P中DHT网络爬虫

  5. van9ogh

    第一次来博主这边, 是因为想到用ICMP TUNNEL, 表示被震撼到了, 问一下小虾的VPS搭建在哪里的啊, 我也打算买一个VPS, 之前一直用的是GITHUB PAGES。。。

    回复
  6. njxxdx

    问个问题,现在可以根据info_hash得到peer的ip和端口了,那怎么样获取这个info_hash对应的种子的信息呢 还要去下种子码

    回复
  7. scuRichard

    仰慕大神啊,话说我手头有个电影的list,想爬每一部电影的类型(如:动作片,记录片)这种,求大神指导

    回复
  8. Pingback引用通告: 写了个磁力搜索的网页 - 收录最近热门分享的资源 | dodo

  9. Sharply

    搜出的确实相当新鲜,但,怎么使用精确搜索功能啊,输入一部英文片名,出来好多无关的片。

    回复
  10. Pingback引用通告: 使用erlang实现P2P磁力搜索-实现 | 创业咖

  11. ggj

    希望能使用搜索框内的文字而不是网站的名称作为搜索结果页面的名称,这样在存书签的时候就能省下不少功夫,谢谢。

    回复
  12. IP兄

    我一搜索就是显示这样错误啊,火狐18.0.2 ,ie也搜索不了:
    Traceback (most recent call last):
    File “/usr/lib/python2.6/site-packages/tornado-2.4-py2.6.egg/tornado/web.py”, line 1042, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
    File “site_dht.py”, line 78, in get
    stats, results = self.search(s, ss, p)
    File “site_dht.py”, line 45, in search
    if ts – update_time > 3600:
    UnboundLocalError: local variable ‘update_time’ referenced before assignment

    回复
      1. dust8

        我find_node收到的都是些无法解析的乱码,后6字节也一样,像
        {‘y': ‘r’, ‘r': {‘nodes': ‘c\x1d\xa0g\xa3\x03\xc8\xc6\xf2h\xb5y\xdd\xce\xe5\xd8\x8b6E\xb3\xb4\xe4\xe9\x88\xc8\xd5s\x04\xd4\xfa2uN\x81\xf9\x03\xe7\x93\xe3lm\x074\xffl\xffT\xf0\x0e3\xc8\xd5FF\xff/\x06\xd2\x1e\x92\x13\x8b\xe7\xd0\xe6\xf8\x1c\x1f\xf8P\xcf\x93e\xa0Y1\xc8\xd5B\x14\xddo\xe3\x1a\xba1\xfa~\xda\x92\x0c\x7f{U\xd5hZPR0L\x04\x1a\xe1B\xbc\x13\xde\xefw%$@\x8f1-\x00\x7fAM\x80|\xc0\xcbS\x95}\x12\xcbL\\\x9e\xcd\xae\xd8\xea;\x97\xbb\x08\xcb\xd2\xde\xff&J\x9a\x92{\xa7\x1f\x86\xf3m\x1a\xeb_Z\x16\x86\x85\x03X\xf2\x07\x85\x8dW4ur\xa7J\xdf\x9d\x0e.\xe8\xe4\x95\x04\tRn2-4\x0b3\xad3\xf5{;\xd7\xd94\n\xfc%\nh\xd3Jb\x0e\x1a\xe1′, ‘id': ‘\x13\xfb\x80\xf4\x17\xe3\x9a\xac\xdd\xc6w?pj\xb2pu@\x90\x8c’}, ‘t': ‘aa’, ‘v': ‘JC\x00\x00′}
        nodes的最后一个node的ip的最后一个字节\xb2pu@,这个字节是乱码,怎么解析为数字?

        回复
  13. 沈同学

    你好,我是在中国科学院工作的大学城同学。
    今天看python上面的程序,看见 pymyqq,然后就被引到这里来了。
    现在我们有个团队,在开发一种叫情感搜索引擎的技术。不知道你有没有兴趣。地点在大学城华师创业学院。
    暑假有兴趣可以一起开发。我的QQ283127072。

    回复
  14. DigData

    为什么我发送d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe这串ping请求,返回的是乱码,而不是d1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:re这种正常的格式?要如何处理?

    回复
  15. DigData

    {
    ‘y’ : ‘r’,
    ‘r’ : {
    ‘nodes’ : ‘#\x8e\xd9\xd0\x15\x98\xc2c>r\x1d3\x95\x11\x87\x91\xa4\xbei\x97\x18\xd7A\xd5\xdb\xdf\x14\xb4\xa3\xbc\x03\xd8~\xccP\x9f\\`\xef8\xc7\x07\xf5\xd1\x85\xcb[i\x17\x14\x8f\x07\xd3%\xbf\xbbmqn\x96\xa5\xab\xec=\xe7\x8c\x15\x8d\xd9\xb4\xee\x94{\x8aO\xc4N\xbd\xed:\xe5\x89N\x89M\x8e\x86\x8e\x99e\x94\xd3\x96\xe5C\x04@#%H@\xf9\x8f\x0f\xb1j\t4\xc4\\u\x8f1\x98\xa3\xae|,\xd7>,\x83o\xf8\\\x15\xa6:\x1a\xe2W\xfa\x1au\xf3xA\x08\x12\xe9\xb4\xa9\xbbaM2\xa6\xb5\xdft.m\x96\xabS\x81\x02\x83;\xaai\x92a\xd2\xdc\x00<~\xbf\x81R\xbe\x17\xc9\r\x8cy\x81P\x81E\xb8P\x0f\x15\x10s\xfa\xc60\xac\toa\xf5~\x0e\x8d\x1by\x1b\x98F4\xa7\x80\xc3+',
    'id' : 'r-\x85\x9e7\xefo\xe4\xd6y{\x94\xca\xd2C\x19\x7f\xb0\xefB'
    },
    't' : 'aa',
    'v' : 'UT\x03\xe7'
    }
    请问这个nodes要怎么解析???

    回复
    1. Xiaoxia 文章作者

      爬啊,但哥是做搜索引擎的啊,这不犯法,我没有主动搜集涉黄信息,也没有跟黄色网站打交道,遵循国内搜索引擎的法律法规。只是我现在在研究过滤一些不健康资源的技术,哈哈,研究出来了就应用上去!

      回复
  16. Pingback引用通告: 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器] – H31Home | 查问题

  17. silver price

    5月份的时候 xiaoxia 发布了一篇叫“ 写了个磁力搜索的网页 - 收录最近热门分享的资源 ” 的文章,我很感兴趣。也第一次了解到DHT(Distributed hash table)。断断续续的学着做。后面 Kevin Lynx 也发布的一些教程。

    回复
      1. bing

        今天找文件安全卫士,发现了楼主的博客,竟然发现dianying.fm是楼主的作品,我一直在用啊。楼主太牛了

        回复
      2. movie002

        我也在搞网站运营,无意中发现你这个fm网站,非常不错,然后顺藤摸瓜到了你的博客。以后可以多多交流资源爬取和网站建设方面的内容。

        回复
  18. stone

    为什么我向router.bittorrent.com:6881发送d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe这串ping请求,没有收到任何回复?是不是这个节点已经不在线?我要上哪才能要到一个在线的节点?

    回复
  19. 胖子

    看了楼主的文章,很震撼,不知楼主能否给一个你自己编的资源爬取程序,好好学习一下。谢谢

    回复
  20. njxxdx

    那个happyfuns的播放器已经把它破解,没有广告纯绿色,播放时也不显示,那个天堂tv也是用这个播放器的把,另外还有那个dht抓取种子,2天抓取就能收到2000W请求,求合作

    回复
    1. Xiaoxia 文章作者

      最近请求人数很多,很火的资源速度自动设置为快,最近没什么人下载的冷门资源设为慢。

      回复
    1. Xiaoxia 文章作者

      几个月前服务器被黑过,磁力搜索的代码被盗取。现在已经不止一个类似磁力搜索实时收录资源的网站了 :(

      回复
      1. David

        xiaoxia,利用bep9和bep10通过info_hash获取种子metadata,这个实测可用吗?bep9协议中都没有info_hash参数,搞不懂怎么实现的。。。

        回复
  21. likom

    请问博主 这个python程序要跑在外网ip上么?就是加入dht网络需不许要外网ip,还是只要一个活动的dht节点的ip

    回复
  22. 元谷

    发条广告:
    喜欢研究p2p协议,dht协议,bt协议,快播协议,迅雷协议等的同学,请加群:97912038 大家一起研究,一起交流!

    回复
  23. xh5724

    大侠你好。我也在开发DHT爬虫。其他的核心基本上已经完成。但是前些日子遇到一个难点了。
    关于INFOHASH的HEADER信息我是通过解析torrent文件得到的(不知道你是怎么弄的)。所以种子文件需要通过种子缓存站也就是种子库去下载。但是前些天这些站莫名其妙的ERROR了。连迅雷种子库也关闭了。所以我想请问一下你是怎么设计的。(或者你是不是通过bt协议获取种子信息)具体怎么做呢?这里我希望你能回答一下吧。谢谢了

    回复
  24. tonykwok

    一直用你做的这个网页检索资源,下载HD电影,真心好用,可为什么今天把magnet链接地址去掉了呢?

    回复
  25. 无名

    怎么有弹出窗口广告了,放广告,非常理解,需要收入维持服务器,但怎么会是自动弹出窗口的广告,而且每几秒就弹出一次

    回复
  26. 5238078

    小虾你好,现在采集来的磁力链的地址怎么转换成种子文件呢,迅雷的bt种子下载库都不能下载了,请问有没有其他的方式可以下载到这些种子呢!执行效率能快点的吗,求推荐!!!!!

    回复
  27. 肖乐乐

    小虾你好,我最近也在做DHT的项目,现在遇到一个难题,就是如何直接从DHT获取种子,看了BEP 09 10,但还是很模糊,不知可否写个博文讲解下~

    回复
  28. fffeng

    研究使用libtorrent 一天,没找到办法来爬dht网络,仅仅能获得peer的ip和pid 但是他们感兴趣什么在python代码就没实现方式了。 通过magnet 获得torrent 倒是很容易。 博主爬dht的网络是自己写的吧?应该不是用libtorrent吧 ?

    回复
  29. dddddd

    楼主我也写了一个放github”https://github.com/NanYoMy/DHT-woodworm”上,也是python写的,10天100线程爬了100w个资源,不知道楼主的速度怎么样?我自己也不清楚这个速度是快还是慢

    回复
      1. ddddddd

        给力楼主,你数据放mongodb上,检索的时候是直接从数据库上search还是在内存建索引?现在网站的速度如何多少pv/s?

        回复
  30. 啦啦

    我想资源 DHT爬虫软件 怎么只能用50线层???
    还有 dht 爬虫 需要什么 网络环境??
    为什么有的vps可以接受数据 有的补行呢?》

    回复
  31. 爬瓦落地

    还是没太明白流程…我的理解是 启动dht网络后 get_peers(infohash) 然后等待announce_peer 消息 对吧?
    但是收到的消息是乱码 ad2:id20:??k??]2??(4BH??9:info_hash20p?3q?+m?f?a?m%M?4:porti177 怎么转换呢?

    回复
  32. kaysen

    想问下你怎么通过哈希值拿到的电影名、文件大小、时间等信息;我看btbook.net还可以拿到迅雷下载链接,求回复

    回复
    1. Xiaoxia 文章作者

      用bittorrent协议就可以下载到meta信息。迅雷下载链接是可以直接推算出的。只有磁力链接也可以用迅雷下载,非得迅雷链接。

      回复
  33. Pingback引用通告: 使用WireShark进行磁力链接协议分析 | aneasystone's blog

  34. Pingback引用通告: 手撕包菜磁力搜索引擎的开源说明 – 剑客|关注科技互联网

  35. 建议者

    按 收录时间 排序已经有了
    希望能有
    按 活跃热度 排序 (这个文件总共被下载多少次)
    按 最后活跃 排序 (这个文件最后一次被下载是什么时候)
    按 大小 、相关 排序用的不是很多 (相关这个排序 应该在后台自动识别好)
    主要还是得保证bt资源下载稳定、速度快
    遇到种子下载失败、被屏蔽 下载速度奇慢、下载大半却没后续资源真的是很糟糕。

    回复
    1. Xiaoxia 文章作者

      被你看到了一个真实的互联网。 权威数据指出互联网的30%流量都是色站带来的。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>