Как работает сеть Tor и для чего она используется

Ответ

Tor (The Onion Router) — это бесплатная, децентрализованная сеть с открытым исходным кодом, предназначенная для обеспечения анонимности и конфиденциальности в интернете. Она скрывает IP-адрес пользователя и шифрует его трафик, направляя его через цепочку из нескольких случайно выбранных серверов (узлов или нод).

Принцип работы: «луковая маршрутизация»

Название происходит от аналогии с луковицей, где данные "заворачиваются" в несколько слоев шифрования.

  1. Построение цепи: Клиентское ПО Tor получает список доступных узлов и строит случайную цепочку, обычно из трех узлов: входного (entry), промежуточного (middle) и выходного (exit).
  2. Многослойное шифрование: Данные шифруются последовательно для каждого узла цепи, начиная с последнего. Каждый слой шифрования может быть расшифрован только соответствующим узлом.
  3. Передача трафика:
    • Входной узел знает реальный 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 (скрытые сервисы).