2014-04-21 63 views
0

我使用报废洪流并显示他们的种子,我使用了我在互联网上发现的脚本,它使用套接字连接跟踪器并获取数据,它在我的本地主机上使用xampp服务器运行,但是当它不服务器的工作原理,它不会赶上流的种子和脚本生成错误消息洪流报废器

脚本MSG:

Error: Could not open HTTP connection. Connection error: yes The script:

代码1(udptracker.php):

<?php 
    /* Torrent UDP Scraper 
     v1.2 

     2010 by Johannes Zinnau 
     [email protected] 

     Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License 
     http://creativecommons.org/licenses/by-sa/3.0/ 

     It would be very nice if you send me your changes on this class, so that i can include them if they are improve it. 
     Thanks! 

     Usage: 
     try{ 
      $timeout = 2; 

      $scraper = new udptscraper($timeout); 
      $ret = $scraper->scrape('udp://tracker.tld:port',array('0000000000000000000000000000000000000000')); 

      print_r($ret); 
     }catch(ScraperException $e){ 
      echo('Error: ' . $e->getMessage() . "<br />\n"); 
      echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "<br />\n"); 
     } 
    */ 

include "tscraper.php"; 

    class udptscraper extends tscraper{ 


     /* $url: Tracker url like: udp://tracker.tld:port or udp://tracker.tld:port/announce 
      $infohash: Infohash string or array (max 74 items). 40 char long infohash. 
      */ 
     public function scrape($url,$infohash){ 
      if(!is_array($infohash)){ $infohash = array($infohash); } 
      foreach($infohash as $hash){ 
       if(!preg_match('#^[a-f0-9]{40}$#i',$hash)){ throw new ScraperException('Invalid infohash: ' . $hash . '.'); } 
      } 
      if(count($infohash) > 74){ throw new ScraperException('Too many infohashes provided.'); } 
      if(!preg_match('%udp://([^:/]*)(?::([0-9]*))?(?:/)?%si', $url, $m)){ throw new ScraperException('Invalid tracker url.'); } 
      $tracker = 'udp://' . $m[1]; 
      $port = isset($m[2]) ? $m[2] : 80; 


      $transaction_id = mt_rand(0,65535); 
      $fp = fsockopen($tracker, $port, $errno, $errstr); 
      if(!$fp){ throw new ScraperException('Could not open UDP connection: ' . $errno . ' - ' . $errstr,0,true); } 
      stream_set_timeout($fp, $this->timeout); 


      $current_connid = "\x00\x00\x04\x17\x27\x10\x19\x80"; 


      //Connection request 
      $packet = $current_connid . pack("N", 0) . pack("N", $transaction_id); 
      fwrite($fp,$packet); 


      //Connection response 
      $ret = fread($fp, 16); 
      if(strlen($ret) < 1){ throw new ScraperException('No connection response.',0,true); } 
      if(strlen($ret) < 16){ throw new ScraperException('Too short connection response.'); } 
      $retd = unpack("Naction/Ntransid",$ret); 
      if($retd['action'] != 0 || $retd['transid'] != $transaction_id){ 
       throw new ScraperException('Invalid connection response.'); 
      } 
      $current_connid = substr($ret,8,8); 


      //Scrape request 
      $hashes = ''; 
      foreach($infohash as $hash){ $hashes .= pack('H*', $hash); } 
      $packet = $current_connid . pack("N", 2) . pack("N", $transaction_id) . $hashes; 
      fwrite($fp,$packet); 


      //Scrape response 
      $readlength = 8 + (12 * count($infohash)); 
      $ret = fread($fp, $readlength); 
      if(strlen($ret) < 1){ throw new ScraperException('No scrape response.',0,true); } 
      if(strlen($ret) < 8){ throw new ScraperException('Too short scrape response.'); } 
      $retd = unpack("Naction/Ntransid",$ret); 
      // Todo check for error string if response = 3 
      if($retd['action'] != 2 || $retd['transid'] != $transaction_id){ 
       throw new ScraperException('Invalid scrape response.'); 
      } 
      if(strlen($ret) < $readlength){ throw new ScraperException('Too short scrape response.'); } 
      $torrents = array(); 
      $index = 8; 
      foreach($infohash as $hash){ 
       $retd = unpack("Nseeders/Ncompleted/Nleechers",substr($ret,$index,12)); 
       $retd['infohash'] = $hash; 
       $torrents[$hash] = $retd; 
       $index = $index + 12; 
      } 


      return($torrents); 
     } 
    } 
?> 

代码2:

<?php 
include "httptscraper.php"; 

$scrap1 = "$row[torrent]"; 
preg_match('#magnet:\?xt=urn:btih:(?<hash>.*?)&dn=(?<filename>.*?)&tr=(?<trackers>.*?)$#', $scrap1, $magnet_link); 
$magnet_link['trackers'] = explode('&', urldecode(str_replace('tr=','', $magnet_link['trackers']))); 
$resultados2 = $magnet_link['trackers'][0]; 
$resultados1 = $magnet_link['hash']; 

try{ 
      $timeout = 2; 

      $scraper = new udptscraper($timeout); 
      $ret = $scraper->scrape($resultados2,array($resultados1)); 

      $array = $ret[$resultados1]; 
      $array2 = $array['seeders']; 
      print_r($array2); 
     }catch(ScraperException $e){ 
      echo "Sem Info"; 
      //echo('Error: ' . $e->getMessage() . "<br />\n"); 
      //echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "<br />\n"); 
     } 
?> 

代码3(tscraper.php):

<?php 
/* Torrent Scraper Base Class 
    v1.0 

    2010 by Johannes Zinnau 
    [email protected] 

    Licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License 
    http://creativecommons.org/licenses/by-sa/3.0/ 

    It would be very nice if you send me your changes on this class, so that i can include them if they are improve it. 
    Thanks! 

    Usage: 
    See udptscraper.php or httptscraper.php 
*/ 


class ScraperException extends Exception { 
    private $connectionerror; 


    public function __construct($message,$code=0,$connectionerror=false){ 
     $this->connectionerror = $connectionerror; 
     parent::__construct($message, $code); 
    } 


    public function isConnectionError(){ 
     return($this->connectionerror); 
    } 
} 


abstract class tscraper { 
    protected $timeout; 


    public function __construct($timeout=2){ 
     $this->timeout = $timeout; 
    } 
} 


?> 
+1

你在追寻哪个追踪器?是吗? – Bender

回答