Analyseur de fichiers .torrent

Soyez le premier à donner votre avis sur cette source.

Vue 21 682 fois - Téléchargée 724 fois

Description

Ce script permet l'analyse d'un fichier torrent en y récupérant des informations comme:
-Le nom du fichier a télécharger
-Le calcul du hash du fichier torrent
-Le nombre de fichiers qui composent le fichier a télécharger
-La taille du(des) fichier(s) a télécharger
-L'url du tracker indexant le torrent
-La date de création du fichier torrent

Source / Exemple :


<?php

require_once ("BDecode.php");
require_once ("BEncode.php");

//*********************************************//functions
         function calcfilesize($bytes)
        {
        if ($bytes < 1000 * 1024)
            return number_format($bytes / 1024, 2) . " kB";
        elseif ($bytes < 1000 * 1048576)
            return number_format($bytes / 1048576, 2) . " MB";
        elseif ($bytes < 1000 * 1073741824)
            return number_format($bytes / 1073741824, 2) . " GB";
        else
            return number_format($bytes / 1099511627776, 2) . " TB";
        }
		
		
		 function checktorrent($alltorrent)
		{
			$debutTorrent = "";
			for ($i=0;$i<11;$i++)
			{
				$debutTorrent .= $alltorrent[$i];
			}
			if($debutTorrent == "d8:announce")
			{
				//echo $debutTorrent;
				echo " Le fichier est bien un torrent <br />";
			}
			else
			{
				//echo $debutTorrent;
				exit (" Erreur le fichier n'est pas un torrent");
			}
		}		
		 function calchash($alltorrent)
		{
			$array = BDecode($alltorrent);
			if (!$array)
			{
				echo "<p class=\"error\">There was an error handling your uploaded torrent. The parser didn't like it.</p>";
				endOutput();
				exit;
			}
			$hash = @sha1(BEncode($array["info"]));
			
			echo "<b>Hash du torrent : </b>$hash <br />";
		}
		 function parcourirtorrent($filesTorrentSize,$alltorrent)
		{
			$compt=0;
			$tailleFichier = '';
			$urlfound = false;
			$namefound = false;
			$datefound = false;
			for ($i=0;$i<$filesTorrentSize;$i++)
			{
				//************//nom du torrent
				if ($alltorrent[$i] == "n" and $namefound !=true)
				{
					$a = $i;
					$name = $alltorrent[$a].$alltorrent[$a+1].$alltorrent[$a+2].$alltorrent[$a+3];
					if ($name == "name")
					{
						$index = $alltorrent[$a+4].$alltorrent[$a+5];
						
							$index = $a+7+$index;
							$nameTorrent = "";
							for ($j=$a+7;$j<$index;$j++)
							{
								$nameTorrent .= $alltorrent[$j];
								
							}
							echo " <b>Nom du torrent :</b> $nameTorrent <br />";
							$namefound = true;
					}
					
				}
				//************//trouver l'url  du tracker
				if ($alltorrent[$i] == "e" and $urlfound != true)
				{
					$b = $i;
					$index = $alltorrent[$b+1] . $alltorrent[$b+2];
					$index = $b+4+$index;
					$urlTracker = "";
					for ($j=$b+4;$j<$index;$j++)
					{
						$urlTracker .= $alltorrent[$j];
						
					}
					echo " <b>URL du tracker :</b> $urlTracker <br />";
					$urlfound = true;
					
				}
				//************//trouver la date création du torrent 
				if ($alltorrent[$i] == "d" and $datefound != true)
				{
					$d = $i;
					$datei = $alltorrent[$d] . $alltorrent[$d+1] . $alltorrent[$d+2] . $alltorrent[$d+3].  $alltorrent[$d+4];
					if ($datei == "datei")
					{
	 					$indexdepart = $d+4;
						$timestamp = "";
						for ($j=$indexdepart+1;$j<$indexdepart+11;$j++)
						{
							$timestamp .= $alltorrent[$j];	
						}
						$date = date('d/m/Y à H:i',$timestamp);
						echo "<b>Date de création du .torrent:</b> $date<br/>";
						$datefound = true;
					}
					
				}
				//************//trouver la taille total du fichier
				if ($alltorrent[$i] == 'l')
				{
					$c = $i;
					$checklength = $alltorrent[$c].$alltorrent[$c+1].$alltorrent[$c+2].$alltorrent[$c+3].$alltorrent[$c+4].$alltorrent[$c+5];
					//echo "<b>doit contenir lenght:</b> $checklength";
					if ($checklength == "length")
					{
						
						for ($d=$c+7;$d<$filesTorrentSize;$d++)
						{	
						
						
							//echo " <b>variable parcoure : </b>$alltorrent[$d]";
							if ($alltorrent[$d] == 'e')
							{
								$compt++;
								$tabTailleFichier[$compt]=$tailleFichier;
								$tailleFichier = '';
								break;
							}
							else
							{
								$tailleFichier .= $alltorrent[$d];
								//echo " <b>!!!!taille fichier!!!!!:</b> $tailleFichier";
								
							}
						}					
					}
				}
			}
			$globalPoid=0;
			for ($b=1;$b<=$compt;$b++)
			{
				//echo " >>Fichiers $b et sa tailles : $tabTailleFichier[$b]";
				$globalPoid =  $globalPoid+$tabTailleFichier[$b];
			}
			$calcfilesize = calcfilesize($globalPoid);
			echo " <b>Poids total du dossier :</b> $calcfilesize <br />";
			echo " <b>Nombre de fichiers :</b> $compt <br />";
		}
		

		
		
//*********************************************//main()	
	
if (isset($_FILES["torrent"]))
{
		//is_uploaded_file($_FILES["torrent"]["tmp_name"]) or die("<p class=\"error\">File upload error 2</p>\n");
		$filesTorrent = fopen($_FILES["torrent"]["tmp_name"], "rb") or die(" File check error");
		$filesTorrentSize = filesize($_FILES["torrent"]["tmp_name"]);
		$alltorrent = fread($filesTorrent, $filesTorrentSize);
		
		//************//Verif si le fichier est un torrent
		checktorrent($alltorrent);
		//************//calcul du hash 
		calchash($alltorrent);
		//************//Debut
		parcourirtorrent($filesTorrentSize,$alltorrent);
		//************//End
}

?>

Conclusion :


Ce script utilise pour le calcul du hash, les fonctions BDecode et BEncode écrites par Bram Cohen (le créateur de BitTorrent), réecrites en PHP.
Je debute en php et je suis conscient que la methode utilisée pour le traitement du fichier torrent n'est surement pas la meilleur. Je pense qu'il doit exister des fonctions pour le traitement des chaines de caractères dans les fichiers de données (Byte). Je suis ouvert à toutes les critiques, je pense qu'il y en aura ...
Dernier point pour la création de ce script, je me suis appuyé sur un très bon tutorial disponible à cette adresse : http://www.run.montefiore.ulg.ac.be/~martin/resources/BitTorrentTutoriel.html

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
mercredi 10 mars 2010
Statut
Membre
Dernière intervention
8 janvier 2012

si j'ai bien compris le souhait de dabiz59, il peut trouver son bonheur sur un site comme http://torrenteditor.com/
Messages postés
12
Date d'inscription
samedi 12 janvier 2008
Statut
Membre
Dernière intervention
12 juin 2009

bonsoir Waldo2188
Exellente idée de connaitre les sources disponible Mais perso
J'aimerai trouver cette source mais sans upload de fichier pour tester le torrent simplement une url serais parfait mais avec tout les infos possible (seed leech complete hash tracker etc...)
si vous connaissez faite moi signe ;)
merci à tous ;)
Messages postés
48
Date d'inscription
mardi 23 novembre 2004
Statut
Membre
Dernière intervention
20 décembre 2009

Salut,

Oui il est tout à fait possible de connaître de le nombre de seeders et de leechers en interrogeant le tracker, mais le nombre de seeders et leechers n'est pas ecrit dans le fichier torrent.
Pour plus d'information sur le protocole et sur la façon de connacté de la tracker: http://www.run.montefiore.ulg.ac.be/~martin/resources/BitTorrentTutoriel.html

Voilou
Messages postés
142
Date d'inscription
jeudi 12 février 2004
Statut
Membre
Dernière intervention
20 mai 2008

Salut,
Chapeau pour l'idée.
Cependant j'ai une question, est-il possible de connaitre le nombre de leechers et seeds sur un torrent?
merci
Utilisateur anonyme
Le mieu c'est

echo 'Nombre de fichiers : Salut ! '.$compt.'
';

xD
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.