Как работает сеть 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 (скрытые сервисы).

Ответ 18+ 🔞

Слушай, ну вот объясняю тебе, как эта штука работает, а сам думаю — ёпта, какая же гениальная, блядь, идея! Tor, он же "Луковый маршрутизатор". Представь себе обычную луковицу, сука. Только вместо слёз — шифрование, блядь, овердохуищное.

Суть в трёх словах, чтоб ты понял: Твой запрос в интернет — это как записка. Чтобы её никто не прочитал, ты заворачиваешь её в три конверта, блядь. Каждый следующий конверт — для своего курьера. Первый курьер (входной узел) снимает свой конверт, видит только адрес второго курьера, но не видит, что в записке и кому она в итоге. Второй (промежуточный) — просто передаёт оставшийся пакет третьему. Третий, выходной узел, снимает последний конверт и несёт записку по конечному адресу. Он-то видит, куда нести, но понятия не имеет, от кого она изначально пришла, блядь! Ни один из них всей картины не видит. Красота, да? В рот меня чих-пых!

А теперь на пальцах с кодом. Вот смотри, как через Питон это всё крутить. Главное — чтоб у тебя сам Tor в системе запущен был, конечно.

import requests
from stem import Signal
from stem.control import Controller

# Тут мы сессию Requests настраиваем, чтобы она вся через Tor-прокси гонялась
def get_tor_session():
    session = requests.session()
    # Вот эта магия 'socks5h' — это и есть указание на наш локальный Tor
    session.proxies = {
        'http':  'socks5h://127.0.0.1:9050',
        'https': 'socks5h://127.0.0.1:9050'
    }
    return session

# А это, сука, святая святых — смена айпишника! Новая цепочка узлов.
def renew_connection():
    # Подключаемся к управляющему порту Tor (обычно 9051)
    with Controller.from_port(port=9051) as controller:
        controller.authenticate()  # Если пароль не ставил, то просто пустые скобки
        controller.signal(Signal.NEWNYM)  # Команда "Дайте мне новую личность, нахуй!"
        print("Цепочка обновлена! Теперь ты другой человек, блядь.")

# Пользуемся
s = get_tor_session()
# Смотрим, под каким айпишником нас видят
print("Сейчас я вот этот:", s.get("http://httpbin.org/ip").json()['origin'])

# А теперь — фокус-покус!
renew_connection()
# И оп-па! Мы уже другие!
print("А теперь я вот этот:", s.get("http://httpbin.org/ip").json()['origin'])

Ну и зачем это всё, спросишь? Да обычному человеку — чтобы его, блядь, не отслеживали каждый чих в сети, чтобы цензуру всякую обходить, если живешь там, где интернет — как зона строгого режима. А ещё есть там целая тёмная материя — сайты .onion, скрытые сервисы. Без Tor к ним просто не подступиться, как к танку с голой жопой.

Вот и вся наука. Не так страшен чёрт, как его малюют. Главное — головой думать, а то анонимность анонимностью, а глупость свою, блядь, не спрячешь ни за какими луковыми прокси.