diff --git a/Attrap.py b/Attrap.py index f8c788cdda08ad4f02ccc915a669cb96ba8d8511..478eeec942380aebbb976e7770cd0cbdff2a8085 100644 --- a/Attrap.py +++ b/Attrap.py @@ -1,8 +1,10 @@ import os import re +import random import ssl import subprocess import shutil +import string import logging import requests import time @@ -25,9 +27,6 @@ from pypdf import PdfReader from pypdf import PdfWriter from pypdf.generic import NameObject, NumberObject -from stem import Signal -from stem.control import Controller - import hashlib import smtplib import email @@ -153,6 +152,7 @@ class Attrap: self.tor_enabled = False self.tor_max_requests = 0 self.tor_requests = 0 + self.tor_socks5_key = None self.not_before = datetime.datetime(2024, 1, 1) self.smtp_configured = False self.mastodon = None @@ -189,14 +189,8 @@ class Attrap: def enable_tor(self, max_requests=0): """Active l'utilisation de Tor pour effectuer les requêtes.""" - proxies = { - "http": f"socks5h://127.0.0.1:9050", - "https": f"socks5h://127.0.0.1:9050", - } self.tor_enabled = True self.tor_max_requests = max_requests - self.tor_requests = 0 - self.session.proxies.update(proxies) self.tor_get_new_id() def disable_tor(self): @@ -208,18 +202,15 @@ class Attrap: self.session.proxies.update(proxies) def tor_get_new_id(self): - """Change d'identité Tor. Cela permet de changer de noeud de sortie donc d'IP.""" + """Change de circuit Tor. Cela permet de changer de noeud de sortie donc d'IP.""" if self.tor_enabled: - logger.info('Changement d\'identité Tor') - try: - self.session.close() - controller = Controller.from_port(port=9051) - controller.authenticate() - controller.signal(Signal.NEWNYM) - time.sleep(5) - self.tor_requests = 0 - except Exception as exc: - logger.debug(f'Impossible de changer d\'identité Tor: {exc}') + self.tor_socks5_key = 'attrap_' + ''.join(random.choices(string.ascii_lowercase, k=20)) + proxies = { + "http": f"socks5h://attrap:{self.tor_socks5_key}@127.0.0.1:9050", + "https": f"socks5h://attrap:{self.tor_socks5_key}@127.0.0.1:9050", + } + self.session.proxies.update(proxies) + self.tor_requests = 0 def get_sub_pages(self, page_content, element, host, recursive_until_pdf): """ @@ -455,7 +446,7 @@ class Attrap: if page.status_code == 429: logger.warning('Erreur 429 Too Many Requests reçue, temporisation...') self.tor_get_new_id() - time.sleep(55) + time.sleep(1) return self.get_page(url, method, data) if self.tor_enabled: @@ -468,7 +459,7 @@ class Attrap: except requests.exceptions.ConnectionError: logger.warning(f'Erreur de connexion, temporisation...') self.tor_get_new_id() - time.sleep(55) + time.sleep(30) return self.get_page(url, method, data) except requests.exceptions.Timeout: logger.warning(f'Timeout, on relance la requête...') diff --git a/Dockerfile-base b/Dockerfile-base index d3ecee84d0e4c9e92fa1514489ab5f4474879f85..bef978b9e50a4cbf02d74df659ec964b06028b0f 100644 --- a/Dockerfile-base +++ b/Dockerfile-base @@ -8,5 +8,4 @@ RUN apt-get update && \ apt-get install --no-install-recommends -y python3 python3-virtualenv chromium-driver make xauth xvfb tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra curl unzip zip tor file ghostscript && \ apt-get clean && \ rm -rf /var/lib/apt/lists && \ - ln -s /usr/bin/python3 /usr/bin/python && \ - sed -i '/^#ControlPort 9051/s/^#//' /etc/tor/torrc + ln -s /usr/bin/python3 /usr/bin/python diff --git a/README.md b/README.md index 2011c87e0df8f50a8667780bdcb261faad3d8445..3c4337b4d3dbfc0fd7fa7310083498839447096a 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,6 @@ pip3 install -r requirements.txt Vous devez avoir installé les données `eng` et `fra` de Tesseract et le démon Tor. -### Configuration du démon Tor - -Il faut que le port de contrôle 9051 du démon Tor soit ouvert pour permettre à Attrap de s'y connecter. Vous pouvez exécuter la ligne suivante pour faire cela : - -```bash -sed -i '/^#ControlPort 9051/s/^#//' /etc/tor/torrc -``` - ## Utilisation Pour lancer la récupération de toutes les administrations supportées : diff --git a/requirements.txt b/requirements.txt index efe28e57fac9365a16b0d1c3d4fc46e095e8f1d4..bd604ec8f3b01cd8b03e6023fcb48cb8364a1c95 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,3 @@ pypdf>=4.2.0 PyVirtualDisplay>=3.0 requests>=2.31.0 selenium>=4.19.0 -stem>=1.8.2