PHP 中的 Torrent 抓取

Posted

技术标签:

【中文标题】PHP 中的 Torrent 抓取【英文标题】:Torrent Scrape in PHP 【发布时间】:2015-05-08 16:16:13 【问题描述】:

我正在尝试使用 php 为播种机和 leechers 抓取种子跟踪器。 这是 torcahche 返回的哈希值:7026AB638744F2BD2444033A8730DA146E15A886 以下跟踪器随种子一起提供:

udp://tracker.openbittorrent.com:80/announce
udp://tracker.publicbt.com:80/announce
udp://tracker.ccc.de:80/announce

这些是我尝试获取所需信息的方法:

            $orig="7026AB638744F2BD2444033A8730DA146E15A886";
            $infoHash=$orig;
            $nfo='udp://tracker.openbittorrent.com:80/scrape?hash_id='.$infoHash;
            echo '<br>'.$nfo;
            $gitsl=$this->input->get($nfo);
            print_r($gitsl);

            $infoHash=pack('H',$orig);
            $nfo='udp://tracker.openbittorrent.com:80/scrape?hash_id='.$infoHash;
            echo '<br>'.$nfo;
            $gitsl=$this->input->get($nfo);
            print_r($gitsl);

            $infoHash=hex2bin($orig);
            $nfo='udp://tracker.openbittorrent.com:80/scrape?hash_id='.$infoHash;
            echo '<br>'.$nfo;
            $gitsl=$this->input->get($nfo);
            print_r($gitsl);

            $infoHash='%70%26%AB%63%87%44%F2%BD%24%44%03%3A%87%30%DA%14%6E%15%A8%86% ';
            $nfo='udp://tracker.openbittorrent.com:80/scrape?hash_id='.$infoHash;
            echo '<br>'.$nfo;
            $gitsl=$this->input->get($nfo);
            print_r($gitsl);

所以一无所获,出现了以下问题:

    torchache 提供的哈希值是否正确? 真的只需要一个简单的获取请求就可以获取信息吗? 这就是您在 codeigniter 中执行获取请求的方式吗? torrent 文件本身有问题吗?

我还尝试了多个允许您手动输入哈希信息以进行抓取的网站,但均未成功。

希望有人能帮忙,干杯。

【问题讨论】:

How to convert torrent info hash for scrape?的可能重复 除了这个问题之外,该种子哈希不会出现在线任何地方。你确定它是正确的吗? @duskwuff 通过制作哈希的磁力链接表明它确实是一个有效的洪流。 magnet:?xt=urn:btih:7026AB638744F2BD2444033A8730DA146E15A886 【参考方案1】:

重复我对这个问题的回答:UDP Tracker Scraping 1 script working other Not


问题是您正在向 UDP 跟踪器发送 http-scrape。 UDP-trackers 使用完全不同的协议:BEP15 - UDP Tracker Protocol for BitTorrent

【讨论】:

【参考方案2】:

嗯,首先,你不要像这样的GET 请求。这就是您读取输入值的方式。

其次,您正在尝试通过 UDP 执行请求。所以你不能只 GET 它,因为浏览器或其他任何东西都会做一个 HTTP 请求。

如本站评论中所述

UDP 的问题在于,在 TCP 的情况下,你有一个隧道,在里面 其中所有数据都是双向的,但在 UDP 的情况下,您发送 UDP 数据包,并且必须打开端口以侦听答案(如果 它会回来)。如果你得到一些数据,数据包可以 以不同的顺序返回 - 你也必须处理这个问题。

这就是为什么普通的GETfile_get_contents() 对你没有多大好处。

您可以使用stream_wrapper_register() 来实现UDP 请求的包装器。

此外,您应该使用$infoHash = urlencode(pack("H*", $orig)) 来获取提供给跟踪器所需的字符串。

【讨论】:

以上是关于PHP 中的 Torrent 抓取的主要内容,如果未能解决你的问题,请参考以下文章

Rest API 根据 torrent Hash 获取 Torrent 信息

如何使用 php 从 torrent 文件中获取哈希信息?

通过php下载.torrent文件,Invalid Bencoding

刮多轨器torrent php

散列 torrent 文件片段

使用 monotorrent c# 创建 torrent