Не получается подключиться к IPv6 прокси
Написал код для создания прокси-сервера IPv6 обратного подключения
import socket
import threading
import socks
import ipaddress
import random
import time
class ProxyServer:
def __init__(self, subnet="fe80::/64", prefix_length=64, num_proxies=1, username=None, password=None, allowed_hosts=None, blocked_hosts=None):
self.subnet = subnet
self.prefix_length = prefix_length
self.num_proxies = num_proxies
self.username = username
self.password = password
self.allowed_hosts = allowed_hosts
self.blocked_hosts = blocked_hosts
self._proxies = []
def generate_ipv6(self):
"""
Генерация случайного IPv6 адреса из заданной подсети.
"""
ipv6_network = ipaddress.IPv6Network(self.subnet)
return str(ipaddress.IPv6Address(random.randint(int(ipv6_network.network_address), int(ipv6_network.broadcast_address))))
def rotate_ipv6(self):
"""
Ротация IPv6 адресов каждые rotation_interval секунд.
"""
self._proxies = [self.generate_ipv6() for _ in range(self.num_proxies)]
print(f"Rotated {self.num_proxies} IPv6 proxies")
def handle_client(self, client_socket, proxy_index):
"""
Обработка подключения клиента.
"""
if self.username and self.password:
# Читаем заголовок авторизации от клиента
auth_header = client_socket.recv(1024).decode()
# Проверяем наличие и корректность заголовка авторизации
if not auth_header.startswith('Authorization: Basic '):
# Если заголовок не передан или некорректен, отправляем код статуса 401 Unauthorized
client_socket.sendall(b"HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm='Proxy Server'\r\n\r\n")
client_socket.close()
return
# Извлекаем закодированные учетные данные из заголовка
encoded_credentials = auth_header[len('Authorization: Basic '):]
# Декодируем и разделяем учетные данные на логин и пароль
credentials = encoded_credentials.strip().decode('base64').split(':')
# Проверяем, совпадают ли переданные учетные данные с установленными
if credentials[0] != self.username or credentials[1] != self.password:
# Если учетные данные не совпадают, отправляем код статуса 401 Unauthorized
client_socket.sendall(b"HTTP/1.1 401 Unauthorized\r\nWWW-Authenticate: Basic realm='Proxy Server'\r\n\r\n")
client_socket.close()
return
# Ротация адресов
self.rotate_ipv6()
# Выбираем адрес клиенту
proxy_ip = self._proxies[proxy_index]
print(f"Client connected. Proxy IPv6: {proxy_ip}")
# Если учетные данные верны или не требуется аутентификация
# Отправляем клиенту IP адрес прокси
client_socket.sendall(proxy_ip.encode())
client_socket.close()
def start_socks5_server(self):
"""
Функция, которая осуществляет запуск SOCKS5 сервера.
"""
server = socks.socksocket(socket.AF_INET6, socket.SOCK_STREAM)
server.bind(('::', 1080))
server.listen(5)
print("[*] SOCKS5 Server started on :: at port 1080")
while True:
client_socket, addr = server.accept()
print(f"[*] Accepted connection from {addr[0]}:{addr[1]}")
proxy_index = random.randint(0, self.num_proxies - 1)
client_handler = threading.Thread(target=self.handle_client, args=(client_socket, proxy_index))
client_handler.start()
def get_proxy_info(self):
"""
Функция, которая возвращает информацию о прокси-сервере
"""
return {
"num_proxies": self.num_proxies,
"username": self.username,
"password": self.password,
"allowed_hosts": self.allowed_hosts,
"blocked_hosts": self.blocked_hosts
}
def get_all_proxies(self):
"""
Функция, которая возвращает список всех текущих прокси-адресов.
"""
return self._proxies
if __name__ == "__main__":
# Создание экземпляра прокси-сервера
proxy_server = ProxyServer(subnet="fe80::1", prefix_length=48, num_proxies=10)
# Запуск SOCKS5 сервера
proxy_server.start_socks5_server()
При запуске и подключении клиента получаю вот такой вывод. Пока что всё чётко
root@vm472710:/home/user/IPv6-Proxy-Server# python3 proxy_server.py
[*] SOCKS5 Server started on :: at port 1080
[*] Accepted connection from ::ffff:тутуту:62534
Rotated 10 IPv6 proxies
Client connected. Proxy IPv6: 2a0f:cdc6:50:fe:d026:d700:63d8:cbb4
После этого пытаюсь использовать свой прокси
import requests
proxy = {
'http': 'socks5://[2a0f:cdc6:50:fe:d026:d700:63d8:cbb4]',
'https': 'socks5://[2a0f:cdc6:50:fe:d026:d700:63d8:cbb4]'
}
url = "https://google.com"
try:
response = requests.get(url, proxies=proxy)
if response.status_code == 200:
print("Прокси работает успешно")
else:
print("Ошибка при использовании прокси:", response.status_code)
except Exception as e:
print("Ошибка при использовании прокси:", e)
На что получаю вот такой вывод:
Ошибка при использовании прокси: SOCKSHTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x000002449E257910>: Failed to establish a new connection: [WinError 10065] Сделана попытка выполнить операцию на сокете для недоступного хоста'))
Подскажите, пожалуйста, что я сделал не так и как это можно исправить?