Ответ
Tor (The Onion Router) — это бесплатная, децентрализованная сеть с открытым исходным кодом, предназначенная для обеспечения анонимности и конфиденциальности в интернете. Она скрывает IP-адрес пользователя и шифрует его трафик, направляя его через цепочку из нескольких случайно выбранных серверов (узлов или нод).
Принцип работы: «луковая маршрутизация»
Название происходит от аналогии с луковицей, где данные "заворачиваются" в несколько слоев шифрования.
- Построение цепи: Клиентское ПО Tor получает список доступных узлов и строит случайную цепочку, обычно из трех узлов: входного (entry), промежуточного (middle) и выходного (exit).
- Многослойное шифрование: Данные шифруются последовательно для каждого узла цепи, начиная с последнего. Каждый слой шифрования может быть расшифрован только соответствующим узлом.
- Передача трафика:
- Входной узел знает реальный IP-адрес пользователя, но не знает конечного пункта назначения. Он снимает первый слой шифрования и отправляет данные дальше.
- Промежуточный узел не знает ни отправителя, ни получателя. Он лишь передает трафик между входным и выходным узлами.
- Выходной узел знает конечный пункт назначения, но не знает, кто был изначальным отправителем. Он снимает последний слой шифрования и отправляет запрос на целевой ресурс (например, веб-сайт).
Таким образом, ни один узел в цепи не обладает полной информацией о маршруте, что и обеспечивает анонимность.
Пример использования в Python
Для отправки запросов через Tor можно использовать библиотеку requests
с SOCKS-прокси. Для смены IP-адреса (цепочки узлов) используется библиотека stem
для взаимодействия с контроллером Tor.
import requests
from stem import Signal
from stem.control import Controller
# Требуется запущенный Tor-сервис с открытым ControlPort (обычно 9051)
def get_tor_session():
session = requests.session()
# Настройка прокси для HTTP и HTTPS
session.proxies = {
'http': 'socks5h://127.0.0.1:9050',
'https': 'socks5h://127.0.0.1:9050'
}
return session
# Функция для смены IP-адреса (цепочки Tor)
def renew_connection():
with Controller.from_port(port=9051) as controller:
controller.authenticate(password="your_control_password") # Укажите пароль, если он установлен
controller.signal(Signal.NEWNYM)
print("Новая цепочка Tor создана!")
# Получаем сессию для работы через Tor
s = get_tor_session()
print("Текущий IP (через Tor):", s.get("http://httpbin.org/ip").json()['origin'])
# Меняем IP
renew_connection()
print("Новый IP (через Tor):", s.get("http://httpbin.org/ip").json()['origin'])
Основные цели использования:
- Защита приватности и анонимности.
- Обход интернет-цензуры и блокировок.
- Безопасный доступ к ресурсам в доменной зоне
.onion
(скрытые сервисы).