import bencoder import requests import hashlib import struct import socket import random # Remplacez ce fichier .torrent par le fichier .torrent que vous voulez analyser fichier_torrent = "libre.torrent" # Ouverture du fichier torrent en mode lecture binaire with open(fichier_torrent, "rb") as f: # Lecture du contenu du fichier contenu_torrent = f.read() # Décodage du contenu du fichier torrent en utilisant le module bencode decoded_torrent = bencoder.decode(contenu_torrent) # Récupération de l'URL de l'annonce à partir du dictionnaire décodé announce_url = decoded_torrent[b"announce"] print(announce_url) # Récupération des informations du fichier torrent à partir du dictionnaire décodé info = decoded_torrent[b"info"] print(info) # Encodage des informations du fichier torrent en utilisant le module bencode info_encoded = bencoder.encode(info) # Calcul du hash SHA-1 des informations encodées pour obtenir l'info hash info_hash = hashlib.sha1(info_encoded).digest() # print(info_encoded) # Générer un identifiant de pair (peer_id) unique peer_id = "-TR0001-654312467946" # Paramètres de la requête HTTP GET params = { "info_hash": info_hash, "peer_id": peer_id, "port": 6881, "uploaded": 0, "downloaded": 0, "left": info[b"length"], "compact": 1, "event": "started", } # Envoi d'une requête GET à l'URL de l'annonce (convertie en chaîne de caractères) en utilisant le module requests response = requests.get(announce_url.decode(), params=params, allow_redirects=False) # Décodage de la réponse du tracker en utilisant le module bencode tracker_response = bencoder.decode(response.content) peers = tracker_response[b"peers"] # Parcours des indices de la liste des pairs avec un pas de 6 for i in range(0, len(peers), 6): # Récupération de l'adresse IP à partir des 4 octets correspondants ip = socket.inet_ntoa(peers[i: i + 4]) # Récupération du port en décodant les 2 octets suivants port = struct.unpack(">H", peers[i + 4: i + 6])[0] # Affichage du pair trouvé avec son adresse IP et son port print(f"Pair trouvé : {ip}:{port}")