Предположим, что вы захотели получить информацию с сайта расположенного на домене onion. В общем-то, ничего особенного в этом нет. Даже, в какой-то мере проще, чем в клирнете. Все потому, что здесь используется очень мало скриптов. А следовательно, к особым ухищрениям для парсинга страниц можно не прибегать без необходимости. Вот только туда еще нужно попасть. И с помощью простого requests сделать этого не получиться. Немного покопавшись в Интернете я нашел решение, которое пока работает.
Дисклеймер: Данная информация взята из открытых источников и предназначена исключительно для ознакомления с работой указанной технологии. За использование данной информации в целях, отличных от ознакомления, автор ответственности не несет.
Шаг 1: Установка tor
Начнем с начала . По очереди вводим в терминале команды для обновления пакетов и установки пакета tor:
sudo apt-get update
sudo apt-get install tor
И это самое простое. Двигаемся дальше. Дело в том, что с 2022 года трафик Tor стал блокироваться. И просто так, без использования мостов, подключиться к onion-сети не получиться. Поэтому, чтобы использовать мосты, необходимо установить следующий пакет:
sudo apt install obfs4proxy
После этого получаем список мостов. Идем на эту страницу и выполняем пошагово все, что от нас просят, пока не получим необходимый результат. Ну, или можно сделать проще. Находим и запускаем в телеграмм бота и запрашиваем у него мосты. После чего открываем файл конфигурации tor:
sudo xed /etc/tor/torrc
Я это сделал наименее безболезненным способом. После того, как откроется конфигурация, туда нужно дописать следующие строки в конец файла:
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
Bridge obfs4 185.246.188.76:7180 0F14...
Bridge obfs4 208.87.97.172:1701 08AA...
Bridge obfs4 54.196.245.125:9162 7966...
UseBridges 1
Здесь следует обратить внимание на то, что для указания моста сначала пишем ключевое слово: Bridge, и только потом уже мост. Сохраняем конфигурацию и перезапускаем tor.
sudo /etc/init.d/tor restart
Проверить, работает ли сервис можно с помощью команды:
/etc/init.d/tor status
В ответе вы получите что-то вроде этого. Ну или должны получить.
● tor.service - Anonymizing overlay network for TCP (multi-instance-master)
Loaded: loaded (/lib/systemd/system/tor.service; disabled; vendor preset: enabled)
Active: active (exited) since Sat 2024-03-02 03:07:00 +06; 35min ago
Process: 16751 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 16751 (code=exited, status=0/SUCCESS)
CPU: 2ms
мар 02 03:07:00 hm systemd[1]: Starting Anonymizing overlay network for TCP (multi-instance-master)...
мар 02 03:07:00 hm systemd[1]: Finished Anonymizing overlay network for TCP (multi-instance-master).
Hint: Some lines were ellipsized, use -l to show in full.
Для остановки и запуска tor необходимо использовать следующие команды:
sudo /etc/init.d/tor start
sudo /etc/init.d/tor stop
Еще один нюанс заключается в том, что если вы не хотите, чтобы tor стартовал вместе с системой, следует выполнить команду:
sudo systemctl disable tor.service
И вот только теперь можно переходить ко второму шагу.
Шаг 2: Установка библиотек Python
Чтобы не растягивать повествование, установим нужные библиотеки с помощью одной команды:
pip install requests requests[socks] requests[security]
Теперь, когда все, что нужно нам установлено и настроено, можно переходить к написанию кода. Здесь ничего особого нет. За исключением некоторых нюансов, о которых я расскажу ниже. В целом, после установки библиотек, которые позволяют использовать proxy, код не отличается от обычного.
import requests
proxies = {
'http': 'socks5h://127.0.0.1:9050',
'https': 'socks5h://127.0.0.1:9050'
}
url = 'http://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion/'
r = requests.get(url, proxies=proxies, verify=False) # using TOR network
print(r.text)
Вот как раз таки в указании прокси есть нюанс. Если вы укажете socks5://127.0.0.1:9050, у вас может ничего не заработать. По крайней мере, у меня не происходило ничего. От слова совсем. И только после того, как я добавил буковку h, чтобы получилось socks5h://127.0.0.1:9050, все встало на свои места, и код заработал в обычном режиме.
В коде, приведенном выше, я получаю html-код главной страницы библиотеки «Флибуста», которая, как вы знаете, уже давно и прочно обосновалась в onion. Но сейчас не об этом. Попробуем выполнить код и получить еще и заголовки.
В итоге вот что у нас получилось:
{'Server': 'nginx', 'Date': 'Fri, 01 Mar 2024 21:49:36 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked',
'Connection': 'keep-alive', 'Keep-Alive': 'timeout=10', 'Vary': 'Accept-Encoding, Cookie', 'Cache-Control': 'public, max-age=600',
'Last-Modified': 'Fri, 01 Mar 2024 21:49:36 +0000', 'Expires': 'Sun, 11 Mar 1984 12:00:00 GMT', 'ETag': 'W/"1709329776"',
'Content-Encoding': 'gzip'}
Выше — заголовки, ниже код станицы. Конечно не весь. Только его начало.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Флибуста | Книжное братство</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="/opds" type="application/atom+xml;profile=opds-catalog" rel="related" />
<link rel="alternate" type="application/rss+xml" title="Флибуста RSS" href="http://flibustaongezhld6dibs2dps6vm4nvqg2kp7vgowbu76tzopgnhazqd.onion/rss.xml" />
Получилась, этакая, спонтанная инструкция. Для чего это вообще нужно? Тут может быть множество вариантов применения. Включая парсинг сайтов в обычной сети не со своего адреса. Не со всеми сайтами это получается. Некоторые блокируют доступ с адресов Тор. Тем не менее, попробовать можно. Есть инструкции, как написать код, который будет в автоматическом режиме менять личности после выполнения нескольких итераций.
Ну и самое банальное, для чего это нужно мне — просто не забыть. Бывает, что нужно найти что-то. И помнишь, что где-то это видел. Вот только где… На поиски уходит довольно много времени. А так, сводная инструкция будет доступна в одном месте. По крайней мере для меня. Ну и для тех, у кого она окажется.
А на этом все. Спасибо за внимание. Надеюсь, что данная информация будет вам полезна.
Подписывайся на наш канал в телеграме, у нас много полезного!