Content is user-generated and unverified.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ CampNetwork Address Checker v1.0 Проверка адресов на блокировку в testnet.campnetwork.xyz Автор: Community Edition Дата: 2024 ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ: 1. Установите Python 3.7+ с https://python.org 2. Установите необходимые библиотеки: pip install requests cloudscraper 3. Создайте файл addresses.txt и поместите туда адреса (по одному на строку) 4. Запустите скрипт: python campnetwork_checker.py 5. Выберите метод проверки из предложенных """ import os import sys import time import json import random import webbrowser from datetime import datetime # Проверка версии Python if sys.version_info < (3, 7): print("❌ Требуется Python 3.7 или выше!") print(f" У вас установлен Python {sys.version}") input("\nНажмите Enter для выхода...") sys.exit(1) # Попытка импорта необходимых библиотек try: import requests except ImportError: print("❌ Модуль 'requests' не установлен!") print("📦 Установите его командой: pip install requests") input("\nНажмите Enter для выхода...") sys.exit(1) # Глобальные настройки ADDRESSES_FILE = "addresses.txt" BLOCKED_FILE = "blocked_addresses.txt" PROGRESS_FILE = "check_progress.json" API_BASE_URL = "https://testnet.campnetwork.xyz/api/snag/user?walletAddress=" # Цвета для Windows консоли (опционально) try: import colorama colorama.init() GREEN = colorama.Fore.GREEN RED = colorama.Fore.RED YELLOW = colorama.Fore.YELLOW BLUE = colorama.Fore.BLUE RESET = colorama.Style.RESET_ALL except: GREEN = RED = YELLOW = BLUE = RESET = "" def print_banner(): """Выводит баннер программы""" banner = f""" {BLUE}╔═══════════════════════════════════════════════════════╗ ║ CampNetwork Address Checker v1.0 ║ ║ Проверка адресов на блокировку ║ ╚═══════════════════════════════════════════════════════╝{RESET} """ print(banner) def load_addresses(): """Загружает адреса из файла""" if not os.path.exists(ADDRESSES_FILE): print(f"{RED}❌ Файл {ADDRESSES_FILE} не найден!{RESET}") print(f"\nСоздайте файл {ADDRESSES_FILE} и добавьте адреса (по одному на строку)") # Создаем пример файла with open(ADDRESSES_FILE, 'w') as f: f.write("0x1234567890123456789012345678901234567890\n") f.write("0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\n") print(f"{GREEN}✅ Создан пример файла {ADDRESSES_FILE}{RESET}") return None with open(ADDRESSES_FILE, 'r', encoding='utf-8') as f: addresses = [line.strip() for line in f if line.strip() and line.strip().startswith('0x')] if not addresses: print(f"{RED}❌ Файл {ADDRESSES_FILE} пуст или не содержит валидных адресов!{RESET}") return None return addresses def save_results(blocked_addresses): """Сохраняет результаты в файл""" with open(BLOCKED_FILE, 'w', encoding='utf-8') as f: f.write(f"# CampNetwork Blocked Addresses\n") f.write(f"# Дата проверки: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") f.write(f"# Всего заблокировано: {len(blocked_addresses)}\n\n") for addr in blocked_addresses: f.write(f"{addr}\n") def method1_requests_check(addresses): """Метод 1: Проверка через requests (может не работать из-за Cloudflare)""" print(f"\n{BLUE}🔄 Метод 1: Проверка через HTTP запросы{RESET}") session = requests.Session() session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Referer': 'https://testnet.campnetwork.xyz/' }) blocked_addresses = [] successful = 0 failed = 0 for i, address in enumerate(addresses, 1): print(f"[{i}/{len(addresses)}] Проверяю: {address}") try: response = session.get(API_BASE_URL + address, timeout=10) if response.status_code == 200: try: data = response.json() is_blocked = str(data.get('isBlocked', '')).lower() if is_blocked in ['yes', 'true', '1']: blocked_addresses.append(address) successful += 1 print(f" {RED}❌ ЗАБЛОКИРОВАН{RESET}") else: successful += 1 print(f" {GREEN}✅ Активен{RESET}") except: failed += 1 print(f" {YELLOW}⚠️ Ошибка разбора ответа{RESET}") elif response.status_code == 403: print(f" {RED}❌ 403 Forbidden - Cloudflare блокирует запросы{RESET}") print(f"\n{YELLOW}Cloudflare защита обнаружена! Попробуйте другой метод.{RESET}") return None else: failed += 1 print(f" {YELLOW}⚠️ HTTP {response.status_code}{RESET}") time.sleep(random.uniform(1, 2)) except Exception as e: failed += 1 print(f" {YELLOW}⚠️ Ошибка: {str(e)[:50]}{RESET}") return blocked_addresses def method2_cloudscraper_check(addresses): """Метод 2: Проверка через cloudscraper (обход базовой Cloudflare защиты)""" print(f"\n{BLUE}🔄 Метод 2: Проверка через CloudScraper{RESET}") try: import cloudscraper except ImportError: print(f"{RED}❌ Модуль cloudscraper не установлен!{RESET}") print(f"📦 Установите: pip install cloudscraper") return None scraper = cloudscraper.create_scraper() blocked_addresses = [] successful = 0 for i, address in enumerate(addresses, 1): print(f"[{i}/{len(addresses)}] Проверяю: {address}") try: response = scraper.get(API_BASE_URL + address, timeout=15) if response.status_code == 200: try: data = response.json() is_blocked = str(data.get('isBlocked', '')).lower() if is_blocked in ['yes', 'true', '1']: blocked_addresses.append(address) successful += 1 print(f" {RED}❌ ЗАБЛОКИРОВАН{RESET}") else: successful += 1 print(f" {GREEN}✅ Активен{RESET}") except: print(f" {YELLOW}⚠️ Ошибка разбора JSON{RESET}") else: print(f" {YELLOW}⚠️ HTTP {response.status_code}{RESET}") time.sleep(random.uniform(2, 4)) except Exception as e: print(f" {YELLOW}⚠️ Ошибка: {str(e)[:50]}{RESET}") return blocked_addresses def method3_manual_check(addresses): """Метод 3: Полуавтоматическая проверка через браузер""" print(f"\n{BLUE}🔄 Метод 3: Полуавтоматическая проверка{RESET}") print("\n📝 Инструкция:") print("1. Я буду открывать каждый адрес в браузере") print("2. Посмотрите на значение 'isBlocked' в JSON ответе") print("3. Нажмите 'y' если isBlocked: 'Yes' или true") print("4. Нажмите 'n' если isBlocked: 'No' или false") print("5. Нажмите 's' чтобы пропустить адрес") print("6. Нажмите 'q' чтобы выйти") input(f"\n{BLUE}Нажмите Enter для начала...{RESET}") blocked_addresses = [] for i, address in enumerate(addresses, 1): print(f"\n[{i}/{len(addresses)}] Адрес: {address}") url = API_BASE_URL + address print(f"🔗 Открываю в браузере...") webbrowser.open(url) time.sleep(1.5) while True: answer = input("Заблокирован? (y/n/s/q): ").lower().strip() if answer == 'y': blocked_addresses.append(address) print(f" {RED}❌ Помечен как заблокированный{RESET}") break elif answer == 'n': print(f" {GREEN}✅ Активен{RESET}") break elif answer == 's': print(f" {YELLOW}⏭️ Пропущен{RESET}") break elif answer == 'q': print(f" {YELLOW}🛑 Выход...{RESET}") return blocked_addresses else: print(" ❓ Используйте: y/n/s/q") return blocked_addresses def method4_batch_urls(addresses): """Метод 4: Генерация списка URL для массовой проверки""" print(f"\n{BLUE}🔄 Метод 4: Генерация URL для массовой проверки{RESET}") urls_file = "urls_to_check.txt" with open(urls_file, 'w', encoding='utf-8') as f: for addr in addresses: f.write(f"{API_BASE_URL}{addr}\n") print(f"\n{GREEN}✅ Создан файл {urls_file} с {len(addresses)} URL{RESET}") print("\n📝 Что делать дальше:") print("1. Откройте файл urls_to_check.txt") print("2. Используйте расширение браузера для массового открытия вкладок") print("3. Или импортируйте в инструмент для массовой проверки URL") print("4. Проверьте значение 'isBlocked' на каждой странице") return [] def main(): """Главная функция""" print_banner() # Загрузка адресов addresses = load_addresses() if not addresses: input(f"\n{YELLOW}Нажмите Enter для выхода...{RESET}") return print(f"\n{GREEN}📋 Загружено {len(addresses)} адресов{RESET}") # Меню выбора метода while True: print(f"\n{BLUE}Выберите метод проверки:{RESET}") print("1. HTTP запросы (быстро, но может не работать)") print("2. CloudScraper (обход базовой защиты)") print("3. Полуавтоматический (через браузер)") print("4. Генерация URL для массовой проверки") print("5. Выход") choice = input(f"\n{BLUE}Ваш выбор (1-5): {RESET}").strip() blocked_addresses = None if choice == '1': blocked_addresses = method1_requests_check(addresses) elif choice == '2': blocked_addresses = method2_cloudscraper_check(addresses) elif choice == '3': blocked_addresses = method3_manual_check(addresses) elif choice == '4': method4_batch_urls(addresses) continue elif choice == '5': print(f"\n{YELLOW}До свидания!{RESET}") break else: print(f"{RED}❌ Неверный выбор!{RESET}") continue # Сохранение результатов if blocked_addresses is not None: print(f"\n{'='*50}") print(f"{GREEN}✅ Проверено адресов: {len(addresses)}{RESET}") print(f"{RED}❌ Заблокировано: {len(blocked_addresses)}{RESET}") print(f"{'='*50}") if blocked_addresses: save_results(blocked_addresses) print(f"\n{GREEN}💾 Результаты сохранены в {BLOCKED_FILE}{RESET}") print(f"\n{RED}Первые заблокированные адреса:{RESET}") for addr in blocked_addresses[:5]: print(f" {addr}") if len(blocked_addresses) > 5: print(f" ... и еще {len(blocked_addresses) - 5}") another = input(f"\n{BLUE}Проверить другим методом? (y/n): {RESET}").lower() if another != 'y': break input(f"\n{BLUE}Нажмите Enter для выхода...{RESET}") if __name__ == "__main__": try: main() except KeyboardInterrupt: print(f"\n\n{YELLOW}Прервано пользователем{RESET}") except Exception as e: print(f"\n{RED}Критическая ошибка: {e}{RESET}") input("\nНажмите Enter для выхода...")
Content is user-generated and unverified.
    CampNetwork Address Checker - Complete Package | Claude