www.webdeveloper.com
Results 1 to 3 of 3

Thread: Scrap torrent

Hybrid View

  1. #1
    Join Date
    Apr 2014
    Posts
    5

    Arrow Scrap torrent

    'm using scrap torrents and show the seeds of them, I use the script that I found on the internet and it uses socket to connect the tracker and get the data, it run on my localhost with xampp server but when it does not server works, it does not catch the seeds of the stream and the script generates an error message

    Script msg:
    Error: Could not open HTTP connection. Connection error: yes
    The script:
    Code:
    <?php
    	/* 	Torrent UDP Scraper
    		v1.2
    		
    		2010 by Johannes Zinnau
    		johannes@johnimedia.de
    		
    		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. #2
    Join Date
    Apr 2014
    Posts
    5
    Code 2:
    Code:
    <?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");
            }
    ?>
    Code 3 (tscraper.php):
    Code:
    <?php
    /*  Torrent Scraper Base Class
        v1.0
    
        2010 by Johannes Zinnau
        johannes@johnimedia.de
    
        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;
        }
    }
    
    
    ?>

  3. #3
    Join Date
    Dec 2002
    Location
    Seattle, WA
    Posts
    1,843
    firstly, that script ignores the bittorrent protocol specification. if the URI does NOT have "/announce" (case-insensitive), the URI does NOT support "/scrape".
    udptscraper::scrape() is not sending a proper HTTP request. Even over TCP or UDP HTTP is the transport method.

    BitTorrent Specification

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles