This commit is contained in:
2026-05-03 23:33:47 +03:00
parent 2a89917c44
commit 015b22264c
4 changed files with 536 additions and 231 deletions
+247
View File
@@ -0,0 +1,247 @@
#!/usr/bin/env python3
"""
Тестирование long polling через SOCKS5 прокси
Проверяет, может ли прокси поддерживать длительные соединения
"""
import asyncio
import aiohttp
import sys
import logging
from datetime import datetime
# Настройка логирования
logging.basicConfig(
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.INFO
)
logger = logging.getLogger(__name__)
# Конфигурация прокси
PROXY_URL = "socks5://FYqj9n:n4br4L@185.168.251.163:8000"
TELEGRAM_BOT_TOKEN = "8460953229:AAFZ_1iYLsCTRWR-glNumHxoHXMxTe2-A84"
async def test_socks5_connection():
"""Тест базового подключения через SOCKS5"""
print("\n" + "=" * 60)
print("ТЕСТ 1: Базовое подключение через SOCKS5")
print("=" * 60)
try:
from aiohttp_socks import ProxyConnector
# Парсим прокси
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if match:
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
logger.info(f"✅ SOCKS5 прокси настроен: {host}:{port}")
else:
logger.error("❌ Не удалось распарсить прокси URL")
return False
async with aiohttp.ClientSession(connector=connector) as session:
# Тест 1: Проверка IP через прокси
async with session.get("https://api.ipify.org?format=json", timeout=10) as resp:
data = await resp.json()
logger.info(f"✅ IP через прокси: {data.get('ip')}")
# Тест 2: Проверка подключения к Telegram API
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getMe"
async with session.get(url, timeout=10) as resp:
if resp.status == 200:
data = await resp.json()
if data.get('ok'):
logger.info(f"✅ Подключение к Telegram работает! Бот: @{data['result']['username']}")
return True
else:
logger.error(f"❌ Ошибка API: {data}")
return False
else:
logger.error(f"❌ HTTP {resp.status}")
return False
except ImportError:
logger.error("❌ Установите aiohttp-socks: pip install aiohttp-socks")
return False
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def test_long_polling():
"""Тест long polling через SOCKS5"""
print("\n" + "=" * 60)
print("ТЕСТ 2: Long polling через SOCKS5")
print("=" * 60)
print("⚠️ Этот тест будет ждать 30 секунд...")
print(" Отправьте команду /test боту в Telegram в течение 30 секунд\n")
try:
from aiohttp_socks import ProxyConnector
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if not match:
logger.error("❌ Не удалось распарсить прокси")
return False
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
async with aiohttp.ClientSession(connector=connector) as session:
# Получаем последнее обновление
get_updates_url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates"
# Сначала сбрасываем offset
async with session.get(f"{get_updates_url}?offset=-1", timeout=10) as resp:
await resp.json()
# Тестируем long polling с timeout=30 секунд
start_time = datetime.now()
logger.info("🔄 Начинаем long polling (ожидание 30 секунд)...")
async with session.get(f"{get_updates_url}?timeout=30&offset=-1", timeout=35) as resp:
if resp.status == 200:
data = await resp.json()
elapsed = (datetime.now() - start_time).total_seconds()
if data.get('result'):
logger.info(f"✅ Получено сообщение через {elapsed:.1f} секунд!")
logger.info(f"📨 Сообщение: {data['result'][0].get('message', {}).get('text')}")
return True
else:
logger.warning(f"⚠️ Long polling завершился через {elapsed:.1f} секунд без сообщений")
logger.warning(" Прокси работает, но сообщений не было получено")
return True # Это НЕ ошибка, просто не было сообщений
else:
logger.error(f"❌ Ошибка HTTP {resp.status}")
return False
except asyncio.TimeoutError:
logger.error("❌ Таймаут long polling!")
logger.error(" Прокси НЕ поддерживает длительные соединения")
return False
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def test_alternative_methods():
"""Тест альтернативных методов (телеграф, вебхук)"""
print("\n" + "=" * 60)
print("ТЕСТ 3: Альтернативные методы")
print("=" * 60)
try:
from aiohttp_socks import ProxyConnector
import re
match = re.search(r'socks5://([^:]+):([^@]+)@([^:]+):(\d+)', PROXY_URL)
if not match:
return False
username = match.group(1)
password = match.group(2)
host = match.group(3)
port = int(match.group(4))
connector = ProxyConnector.from_url(f"socks5://{username}:{password}@{host}:{port}")
async with aiohttp.ClientSession(connector=connector) as session:
# Тест: Проверка скорости ответа
urls = [
("Telegram API (getMe)", f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getMe"),
("Google", "https://google.com"),
("Cloudflare", "https://cloudflare.com"),
]
for name, url in urls:
try:
start = datetime.now()
async with session.get(url, timeout=10) as resp:
elapsed = (datetime.now() - start).total_seconds()
if resp.status == 200:
logger.info(f"{name}: {elapsed:.2f} сек (статус {resp.status})")
else:
logger.warning(f"⚠️ {name}: {elapsed:.2f} сек (статус {resp.status})")
except Exception as e:
logger.error(f"{name}: ошибка - {e}")
return True
except Exception as e:
logger.error(f"❌ Ошибка: {e}")
return False
async def main():
"""Главная функция"""
print("\n" + "=" * 60)
print("🧪 ТЕСТИРОВАНИЕ SOCKS5 ПРОКСИ ДЛЯ LONG POLLING")
print("=" * 60)
print(f"\n📡 Прокси: {PROXY_URL.split('@')[-1] if '@' in PROXY_URL else PROXY_URL}")
print(f"🤖 Бот: @ten_may_bot")
# Тест 1: Базовое подключение
basic_ok = await test_socks5_connection()
if not basic_ok:
print("\n❌ Базовое подключение не работает!")
print("Проверьте настройки прокси")
return
# Тест 2: Long polling
long_polling_ok = await test_long_polling()
# Тест 3: Альтернативные методы
await test_alternative_methods()
# Итоги
print("\n" + "=" * 60)
print("📊 РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ")
print("=" * 60)
if long_polling_ok:
print("\n✅ SOCKS5 прокси ПОДДЕРЖИВАЕТ long polling!")
print(" Бот должен работать нормально.")
print("\n💡 Запустите бота:")
print(" python bot.py")
else:
print("\n❌ SOCKS5 прокси НЕ ПОДДЕРЖИВАЕТ long polling!")
print("\n⚠️ Это означает, что вы НЕ сможете получать обновления")
print(" через этот прокси в реальном времени.")
print("\n📌 Рекомендации:")
print(" 1. Используйте VPN вместо прокси")
print(" 2. Найдите другой прокси, который поддерживает длительные соединения")
print(" 3. Настройте свой собственный прокси (например, 3proxy)")
print(" 4. Используйте webhook (требуется HTTPS сервер)")
print("\n" + "=" * 60)
if __name__ == "__main__":
# Установка зависимостей если нет
try:
import aiohttp_socks
except ImportError:
print("Устанавливаю aiohttp-socks...")
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "aiohttp-socks"])
print("Установка завершена. Перезапустите тест.\n")
sys.exit(1)
asyncio.run(main())