Ir ao conteúdo
  • Cadastre-se
Alanps

PHP Torrent

Recommended Posts

Oi, estou com esse sistema rodando em localhost, mas em servidores ele não roda, alguém sabe o porque ? tenho que habilitar alguma coisa  ? Estou usando o xampp... 

<?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);		}	}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Você forneceu muito pouca informação.

De nada adianta  postar o código se não explicar seu problema em detalhes.

 

Então  vamos lá..

 

Qual erro apresenta? como estão organizado os arquivos da classe tscraper e esta classe que extende a tscraper? 

Como tentou usar a classe?  Já leu a documentação e/ou tentou procurar saber se existe alguma documentação?(  se não tiver aí o cara tem que ter bola de cristal para entender o código.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem nenhuma documentação o código, e estou precisando fazer o "scrap" de torrentes, que é pegar o numero de seeds/peers/etc...

O erro que apresenta é o do script:

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

Estou usando a classe assim (o primeiro include é o do arquivo lá de cima):

<?phpinclude "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");		}?>

O único arquivo

 

tscraper.php

<?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;		}	}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está cadastrado o endereço do tracker? 

 

Segundo a mensagem, o erro é de conexão, pois ele não pode abrir uma conexão HTTP. 

 

Veja que no seu post #1,  postou  a classe udptscraper, que é estendida da classe tscraper. ( não use o include,  use o require_once() como mostra na "pequena" documentação no gitHub)

Só que na sua tentativa de conexão, você incluiu a classe httptscraper  mas instanciou um objeto da classe udptscraper. 

 

tente alterar para:

$scraper = new httptscraper($timeout)

desta forma para haver conexão o endereço deve ser por exemplo: http://tracker.tld:port/announce

 

Se o endereço do tracker for em UDP,  você deve instanciar  o objeto da classe udptscraper como você fez antes e o endereço deve ser por exemplo:  udp://tracker.tld:port

Compartilhar este post


Link para o post
Compartilhar em outros sites

enãto mas o script tá funcionando no localhost,não entendo porque não roda no servidor, e tentei em vários...e estou usando a conexão udp é que troquei os nomes da classes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×