$ cat proxy_checker.py
import requests
import sys
# --- CONFIGURATION ---
PROXY_FILE = '/home/username/Bureau/Tools/proxy_list/clean_unique_proxies.txt'
OUTPUT_FILE = '/home/username/Bureau/Tools/proxy_list/tested_proxies.txt'
TIMEOUT = 5 # Temps d'attente maximum par proxy (en secondes)
URL_TEST = '
http://www.google.com
'
# ---------------------
print(f"[*] Chargement des proxies depuis : {PROXY_FILE}")
try:
with open(PROXY_FILE, 'r') as f:
proxies_list = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
print(f"[ERREUR] Fichier introuvable : {PROXY_FILE}")
sys.exit(1)
working_proxies = []
total_proxies = len(proxies_list)
print(f"[*] {total_proxies} proxies trouvés. Début du test...")
for i, proxy_address in enumerate(proxies_list):
# Ajout du préfixe 'http://' au cas où il serait manquant,
# même si votre liste est déjà formatée.
if not proxy_address.startswith('http'):
proxy_address = 'http://' + proxy_address
proxies = {
'http': proxy_address,
'https': proxy_address,
}
try:
# Test de la connexion
response = requests.get(
URL_TEST,
proxies=proxies,
timeout=TIMEOUT,
allow_redirects=False # Optionnel, pour un test plus rapide
)
if response.status_code in [200, 301, 302]:
print(f"[SUCCÈS] Proxy {i+1}/{total_proxies}: {proxy_address} OK ({response.status_code})")
working_proxies.append(proxy_address)
else:
print(f"[ECHEC] Proxy {i+1}/{total_proxies}: {proxy_address} Code : {response.status_code}")
except requests.exceptions.RequestException:
print(f"[ECHEC] Proxy {i+1}/{total_proxies}: {proxy_address} Timeout ou Erreur Connexion.")
# --- SAUVEGARDE ---
with open(OUTPUT_FILE, 'w') as f:
for proxy in working_proxies:
f.write(proxy + '\n')
print("-" * 40)
print(f"[RÉSUMÉ] {len(working_proxies)} proxies fonctionnels enregistrés dans {OUTPUT_FILE}")
print(f"[*] Fichier prêt pour sqlmap ou ghauri.")
$ cat proxy_maintainer.py
import requests
import sys
import os
import time
from requests.exceptions import RequestException
# --- CONFIGURATION ---
URL_SOURCE = 'https://cdn.jsdelivr.net/gh/proxifly/free-proxy-list@main/proxies/protocols/http/data.txt'
OUTPUT_FILE = '/home/username/Bureau/Tools/proxy_list/tested_proxies.txt'
TIMEOUT = 7
URL_TEST = 'http://www.google.com'
# ---------------------
def fetch_proxies(url):
"""Récupère la liste brute des proxys depuis l'URL."""
print(f"[*] 1. Récupération des proxys depuis : {url}")
try:
response = requests.get(url, timeout=30)
response.raise_for_status()
return response.text.splitlines()
except RequestException as e:
print(f"[ERREUR] Échec de la récupération des proxys : {e}")
return []
def test_and_save_proxies(proxies_list, output_file):
"""Teste chaque proxy et l'ajoute directement au fichier de sortie."""
# 🌟 NOUVEAU : Lire les proxys déjà testés dans le fichier de sortie pour éviter les doublons
try:
with open(output_file, 'r') as f:
# On utilise un set pour une recherche rapide des proxys déjà présents
tested_set = {line.strip() for line in f if line.strip()}
except FileNotFoundError:
tested_set = set()
total_proxies = len(proxies_list)
newly_validated_count = 0
print(f"[*] 2. {total_proxies} proxys trouvés. {len(tested_set)} déjà enregistrés.")
print("[*] Début du test de validité et sauvegarde en temps réel...")
# 🌟 NOUVEAU : Ouvrir le fichier en mode ajout ('a')
with open(output_file, 'a') as f:
for i, proxy_address in enumerate(proxies_list):
proxy_address = proxy_address.strip()
if not proxy_address:
continue
# Nettoyage et standardisation de l'adresse IP:PORT
cleaned_address = proxy_address.split('//')[-1]
http_url = 'http://' + cleaned_address
# 🌟 Sauter le test si le proxy est déjà dans le fichier
if http_url in tested_set:
continue
proxies = {'http': http_url, 'https': http_url}
try:
response = requests.get(
URL_TEST,
proxies=proxies,
timeout=TIMEOUT,
allow_redirects=True,
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
)
if response.status_code in [200, 301, 302]:
# 🌟 Écrire immédiatement le proxy validé
f.write(http_url + '\n')
tested_set.add(http_url) # Ajouter au set pour éviter les doublons dans la même session
newly_validated_count += 1
except RequestException:
pass
# 🌟 Étape de post-traitement pour retirer les doublons (juste au cas où)
# L'utilisation du mode 'a' + le set minimise les doublons, mais ce nettoyage assure l'unicité
# Lecture finale de tous les proxys (y compris les nouveaux) et nettoyage des doublons
with open(output_file, 'r') as f:
final_list = sorted(list(set(line.strip() for line in f if line.strip())))
# Écriture finale des proxys uniques (écrasement)
with open(output_file, 'w') as f:
for proxy in final_list:
f.write(proxy + '\n')
print("-" * 40)
print(f"[RÉSUMÉ] 3. {newly_validated_count} nouveaux proxys ajoutés. Total final dans le fichier : {len(final_list)}.")
print("[*] Fichier de rotation prêt pour les outils.")
# --- POINT D'ENTRÉE ---
if __name__ == "__main__":
raw_proxies = fetch_proxies(URL_SOURCE)
if raw_proxies:
# Lancement de la fonction qui teste et sauvegarde immédiatement
test_and_save_proxies(raw_proxies, OUTPUT_FILE)
print("[*] Maintenance terminée. Prêt pour l'ajout à la Crontab.")
$ crontab -e
no crontab for username - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]: 2
crontab: installing new crontab