Очистка даркнета с помощью Python, Selenium и TOR в Mac OSX

Предупреждение: доступ к даркнету может быть опасным! Продолжайте на свой страх и риск и примите необходимые меры безопасности, такие как отключение сценариев и использование службы VPN.

Вступление

Для большинства пользователей Google - это выход в Интернет. Однако глубокая сеть содержит страницы, которые не могут быть проиндексированы Google. В этом пространстве находится темная сеть - анонимные веб-сайты, часто называемые скрытыми службами, которые занимаются преступной деятельностью - от наркотиков до взлома и торговли людьми.

URL-адреса веб-сайтов в темной сети не соответствуют соглашениям и часто представляют собой случайную строку букв и цифр, за которой следует поддомен .onion. Для разрешения этих веб-сайтов требуется браузер TOR, и к ним нельзя получить доступ через традиционные браузеры, такие как Chrome или Safari.

Поиск скрытых сервисов

Первое препятствие при очистке даркнета - поиск скрытых сервисов, которые нужно очистить. Если вы уже знаете, где находятся веб-сайты, которые хотите очистить, вам повезло! URL-адреса этих веб-сайтов часто недоступны для поиска и передаются от человека к человеку, лично или через Интернет. К счастью, есть несколько способов найти эти скрытые службы.

Метод 1: каталоги

Каталоги, содержащие ссылки на скрытые сервисы, существуют как в темной сети, так и в поверхностной сети. Эти каталоги могут дать вам хорошее направление, но часто они содержат более известные службы и службы, которые легче найти.

Метод 2: отбор проб "снежный ком"

Выборка Snowball - это метод сканирования, который берет исходный веб-сайт (например, тот, который вы нашли из каталога), а затем сканирует веб-сайт в поисках ссылок на другие веб-сайты. После сбора этих ссылок поисковый робот продолжит процесс для этих сайтов, расширяя свой поиск в геометрической прогрессии. Этот метод позволяет находить скрытые службы, не указанные в каталогах. Кроме того, эти сайты с большей вероятностью привлекают серьезных преступников, поскольку их существование не так прозрачно.

Хотя для поиска скрытых сервисов рекомендуется использовать метод выборки снежный ком, его реализация выходит за рамки данной статьи. Я написал вторую статью о сэмпле снежного кома в даркнете здесь.

Настройка среды

После определения скрытых сервисов, которые нужно очистить, необходимо настроить среду. В этой статье рассматривается использование Python, Selenium, браузера TOR и Mac OSX.

Браузер TOR

Браузер TOR - это браузер, который использует сеть TOR и позволяет нам разрешать веб-сайты с использованием поддомена .onion. Браузер TOR можно скачать здесь.

VPN

Использование VPN при сканировании темной сети может обеспечить вам дополнительную безопасность. Виртуальная частная сеть (VPN) не требуется, но настоятельно рекомендуется.

Python

В этой статье я предполагаю, что на вашем компьютере уже установлен python с выбранной вами IDE. В противном случае в Интернете можно найти множество руководств.

Панды

Pandas - это пакет Python для обработки данных. Pandas будет использоваться для хранения и экспорта данных, скопированных в файл csv. Pandas можно установить с помощью pip, введя следующую команду в свой терминал:

pip install pandas

Селен

Selenium - это пакет Python для автоматизации браузера. Селен будет использоваться для сканирования веб-сайтов и извлечения данных. Selenium можно установить с помощью pip, введя в терминал следующую команду:

pip install selenium

Геккодрайвер

Чтобы селен мог автоматизировать браузер, требуется драйвер. Поскольку браузер TOR работает под управлением Firefox, мы будем использовать Mozilla Geckodriver. Вы можете скачать драйвер здесь. После загрузки извлеките драйвер и переместите его в папку ~ / .local / bin.

Firefox двоичный

Также потребуется расположение двоичного файла Firefox в браузере TOR. Чтобы найти это, щелкните правой кнопкой мыши браузер TOR в папке с приложениями и выберите «Показать содержимое». Затем перейдите к двоичному файлу Firefox и скопируйте полный путь. Сохраните этот путь где-нибудь для дальнейшего использования.

Реализация

Теперь, когда вы настроили свою среду, вы готовы приступить к написанию парсера.

Сначала импортируйте веб-драйвер и FirefoxBinary из селена. Также импортируйте панды как pd.

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
import pandas as pd

Создайте «двоичную» переменную и задайте ей путь к двоичному файлу Firefox, который вы сохранили ранее.

binary = FirefoxBinary(*path to your firefox binary*)

Настройте веб-драйвер для использования Firefox и передайте двоичную переменную.

driver = webdriver.Firefox(firefox_binary = binary)

Создайте переменную «url» и задайте для нее URL-адрес скрытой службы, которую вы хотите очистить.

url = *your url*

Откройте браузер TOR и получите URL-адрес.

driver.get(url)

Теперь вы можете очистить скрытый сервис, как любой веб-сайт!

Основные методы очистки от селена

Независимо от того, являетесь ли вы новичком в Selenium или нуждаетесь в обновлении, вы можете использовать эти базовые методы, чтобы эффективно очистить веб-сайт. Дополнительные руководства по очистке Selenium можно найти в Интернете.

Поиск элементов

Ключевой частью парсинга с помощью Selenium является поиск HTML-элементов для сбора данных. В Selenium есть несколько способов сделать это. Один из способов - использовать имя класса. Чтобы найти имя класса элемента, вы можете щелкнуть его правой кнопкой мыши и нажать «Проверить». Ниже приведен пример поиска элемента по имени класса.

driver.find_element_by_class_name("postMain")

Вы также можете найти элементы по их XPath. XPath представляет расположение элемента в структуре HTML. Вы можете найти XPath элемента в контекстном меню элемента HTML в интерфейсе проверки. Ниже приведен пример поиска элемента с помощью XPath.

driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div[1]/div/a[1]')

Если вы хотите найти несколько элементов, вы можете использовать «find_elements» вместо «find_element». Ниже приведен пример.

driver.find_elements_by_class_name("postMain")

Получение текста элемента

Вы можете получить текст элемента с помощью текстовой функции. Ниже приведен пример.

driver.find_element_by_class_name('postContent').text

Хранение элементов

Вы можете сохранять элементы, сохраняя элемент в переменной, а затем добавляя переменную в список. Ниже приведен пример.

post_content_list = []
postText = driver.find_element_by_class_name('postContent').text
post_content_list.append(postText)

Сканирование между страницами

Некоторые страничные веб-сайты включают номер страницы в URL-адрес. Вы можете перебрать диапазон и изменить URL-адрес для сканирования нескольких страниц. Пример ниже.

for i in range(1, MAX_PAGE_NUM + 1):
  page_num = i
  url = '*first part of url*' + str(page_num) + '*last part of url*'
  driver.get(url)

Экспорт в файл CSV

После сканирования страницы и сохранения данных в списках вы можете экспортировать эти списки в виде табличных данных с помощью Pandas. Пример ниже.

df['postURL'] = post_url_list
df['author'] = post_author_list
df['postTitle'] = post_title_list
df.to_csv('scrape.csv')

Меры по предотвращению сканирования

Многие скрытые службы используют меры защиты от сканирования, чтобы сохранить информацию в секрете и избежать DDoS-атак. Наиболее распространенные меры, с которыми вы столкнетесь, - это капчи. Хотя существуют некоторые автоматические решатели капчи, часто скрытые службы будут использовать уникальные типы капчи, которые решатели не могут передать. Ниже приведен пример капчи, найденной на форуме.

Если капча требуется в определенных точках (например, при первом подключении к серверу), вы можете использовать функцию неявного ожидания в Selenium. Эта функция будет ожидать в течение заранее определенного времени, пока не будет выполнено следующее действие. Ниже приведен пример использования этого метода, в котором Selenium будет ждать, пока не найдет элемент с именем класса postMain.

driver.implicitly_wait(10000)
driver.find_element_by_class_name("postMain")

В других случаях, если сервер идентифицирует вас как робота, он перестанет вас обслуживать. Чтобы обойти это, очищайте веб-сайт по частям, а не все сразу. Вы можете сохранить данные в разных CSV-файлах и объединить их с дополнительным скриптом Python с помощью функции Pandas concat. Ниже приведен пример.

import pandas as pd
df = pd.read_csv('scrape.csv')
df2 = pd.read_csv('scrape2.csv')
df3 = pd.read_csv('scrape3.csv')
df4 = pd.read_csv('scrape4.csv')
df5 = pd.read_csv('scrape5.csv')
df6 = pd.read_csv('scrape6.csv')
frames = [df, df2, df3, df4, df5, df6]
result = pd.concat(frames, ignore_index = True)
result.to_csv('ForumScrape.csv')

Обсуждение

Очистка даркнета имеет уникальные проблемы по сравнению с очисткой поверхностной сети. Однако он относительно невостребован и может обеспечить отличные операции по разведке киберпреступлений. Хотя скрытые сервисы часто используют меры по предотвращению сканирования, их все же можно обойти и предоставить интересные и полезные данные.

Я хочу повторить, что сканирование даркнета может быть опасным. Обязательно соблюдайте необходимые меры безопасности. Продолжайте исследовать безопасный просмотр темной сети. Я не несу ответственности за причиненный вред.