Nudecrawler — паук для поиска голых женщин в telegra.ph.
Как программист, я стремлюсь все автоматизировать. Как мужчина, я склонен к Cherchez la femme. Кроме того, как человек, живущий в сети уже больше, чем существует pornhub, я всяких сисек и порно повидал столько, что уже не всегда уверен, интересно ли мне это.
NudeCrawler — вершина client‑side технологий для любителя девушек: он не только сам за вас ищет порно, а еще и даже сам за вас его смотрит, чтобы вам не пришлось! Впрочем, он ведет лог, что и где посмотрел и как ему понравилось, так что, можно «подсматривать за роботом, как он подсматривает за не‑очень‑публично выложенной картинкой, где фотограф подсматривает как девушка переодевается». (В общем, это секс в квадрате, кубе и гипер‑кубе).
Конечный результат работы программы выглядит примерно вот так (на всякий случай я убрал цифры, чтобы специально (слава Богу и Во Славу Сатаны, тут это одно и то же) испортить ссылку — но теперь вы легко и сами сможете найти):
INTERESTING (16 video) https://telegra.ph/Alina-XX-XX-XX
Nude: 129 non-nude: 11
Total video: 16
INTERESTING (30 video) https://telegra.ph/Alisa-XX-XX-XX
Nude: 52 non-nude: 11
Total video: 30
Неэффективное интригующее предостережение
Неважно, какого вы пола, неважно сколько вам лет, какая у вас ориентация, насколько широки ваши сексуальные горизонты и какие извращения вам наиболее интересны — все равно, с NudeCrawler вы найдете много того, что вам не понравится.
Поверьте мне, я повидал некоторое дерьмо. Буквально.
Например, однажды NudeCrawler мне принес вот эту страничку (Критерием интересности было либо сколько‑то NSFW картинок, либо любое видео.) Предупреждаю: на видео яркие цвета, вспышки, если у вас эпилепсия - оно того не стоит. Да и в любом случае, оно того не стоит.
Чем интересен telegra.ph и что там можно найти?
Не зря В. И. Ленин призывал захватывать телеграф в первую очередь.
Телеграф позволяет размещать контент (и имеет свой хостинг картинок и коротких видео) анонимно без модерации. К тому же — очень легко. Контент не запаролен, открыт всем, поэтому какие‑то совсем уж конфиденциальные вещи там вряд ли кто‑то хранит. Но с другой стороны, в прежнюю эпоху (до появления nudecrawler'а), найти какую‑то интересную страничку там невозможно. Песчинка надежно спрятана в куче песка. Но вот с появлением nudecrawler находить интересное стало проще.
Что я (без особых намерений, просто тестируя nudecrawler) находил в telegra.ph:
Обнаженные фото, комиксы, фотосеты и «сливы» (любительские и с OnlyFans / Patreon). И в усеченном виде (вроде «вступайте в наш платный канал чтобы увидеть слив полностью») и в достаточно полном (более 100 картинок. Рекорд за 3 дня — 163 картинки в одной находке).
Коллекции разных «мрачных» видео (драки, [роскомнадзор] в метро под поезд, итд)
Описание нескольких мошеннических схем, прямо готовые гайды, бери да пользуйся. И советы, и ссылки, где они необходимы. Кстати, некоторые из них мне понравились, были довольно остроумными. Я о них раньше не знал (Про звонки из «службы безопасности сбербанка» и из «следственного управления» я уже лет 10 как в курсе).
Огромные списки из десятков ссылок на разные редиректоры и хостинги «сомнительной репутации» вроде mega.nz. На части ссылок — фотки‑видео модели Amouranth, часть удалены, а часть «за грубое нарушение условий использования сервиса».
Личные письма (кто‑то вот так общается, наверное, пишет «незапечатанное» письмо в телеграфе и высылает ссылку. Честно: перестал читать, когда понял, что читаю). Не надо так делать, телеграф — не подходит для всего личного.
Просто галереи в жанре «вот я гуляю по парку», «вот я сделал ремонт на даче»
Объявления о продаже‑аренде недвижимости и автотранспорта
Военные и патриотические статьи и фото (черновики может?) разных сторон и на разных языках.
Огромное количество страниц формата «порноролик — порнорассказ — второй порноролик». Похоже, кто‑то скриптом их создал. Причем в рассказе на гомо‑ тематику (я не вчитывался! честно!) порно‑ролики не в тему рассказа, а нормальные, с общечеловеческими ценностями, где несколько европейских афро‑американцев без явного уважения наслаждаются одной белой женщиной.
Ну и паролей к разным ресурсам там тоже достаточно. Многие гуглятся по запросу вроде:
site:telegra.ph password
. Конечно же, так тоже не надо делать.
Установка
pip3 install nudecrawler
(лучше в virtualenv) или же, прямо из репозитория (кто не рискует, тот не пьет антибиотики):
pip3 install git+https://github.com/yaroslaff/nudecrawler
Вместе с ним поставится встроенный (и медленный) детектор nudepy. Для «поиграться», и чтобы не тащить за собой кучу зависимостей — вполне нормально, но если вам нужно будет использовать другие, то лучше использовать их через docker или скачать требуемые пакеты для использования NudeNet (подробнее — на странице проекта)
Кстати, если фильтрация не нужна вообще, можно использовать просто флажок -a
.
Как пользоваться?
Начнем с самого быстрого (а то не терпится ведь!):
nudecrawler -a Сиськи
INTERESTING (ALL) https://telegra.ph/Siski-XX-XX
Total images: 8
Total video: 1
INTERESTING (ALL) https://telegra.ph/Siski-XX-XX
Total images: 4
INTERESTING (ALL) https://telegra.ph/Siski-XX-XX
Total images: 0
Мы указали -a
, то есть, nudecrawler вообще не фильтровал и показывал все найденные страницы. (даже без картинок).
Давайте поищем красивых людей в надежде на что‑то прекрасное
nudecrawler Маша Наташа "Анатолий Евгеньевич"
Теперь он будет работать медленнее, потому что каждую картинку будет прогонять через встроенный Nudepy фильтр. Кроме того, используются параметры по умолчанию — на странице должно быть 5+ картинок (иначе — сразу отбрасывается), далее, чтобы страница засчиталась как интересная и выдалась в ней должны быть хотя бы 1 NSFW, либо же любое видео. Это можно подкрутить чере параметры --nude
, --total
и --video
. А еще можно добавить -v
чтобы видеть, как он работает. По‑умолчанию ищутся страницы за даты за последние 30 дней (но годы при этом могут быть любыми, так уж устроен телеграф). Это можно подкрутить через -d
.
Если хотим искать по множеству слов, то используем вордлист через -w file
. Вордлист может состоять как из слов, так и из «базовых URL». Базовый URL — это урл без даты и номера, например https://telegra.ph/secret — по этому адресу нет странички, но когда добавим к нему дату и порядковый индекс — какие‑то найдутся.
Из репозитория можно скачать wordlist.txt на 3000 английских слов, или же urls.txt 11 200 базовых URLов телеграфа — это уже отфильтрованные URL (через bulk‑http‑check), по каждому из них на telegra.ph есть страницы (а вот, например, на слово «абажурами», страниц не было, поэтому оно в urls.txt не попало).
Как nudecrawler находит незасвеченные странички?
Адрес страницы в телеграфе зависит от заголовка и для страницы с заголовком "Саша Грей" он будет иметь вид, например:
https://telegra.ph/sasha-grey-01-02-123
01 - "сегодняшний" месяц, когда создается страница. 02 - день месяца (число). И если https://telegra.ph/sasha-grey-01-02 уже существует, то телеграф добавляет еще "счетчик" 2 если и это занято, то 3, итд.
Если ползуну указано искать "Саша Грей", он проверяет все сегодняшние странички с этим заголовком, затем вчерашние и так на -d
дней назад.
Если вдруг, страница с индексом 100 будет, а 101 нет - ползун все равно попробует 102 и далее, пока не будет "дырка" в -f
страниц подряд. (исходно 0, но можно повысить)
Поэтому, спрятать женщину от ползуна можно двумя способами:
Использовать очень необычный заголовок (как пароль, чтобы он не мог быть угадан по вордлисту)
Создать большую "дырку" в счетчиках, например, если ползун будет запущен с
-f 10
, а дырка будет в 20 страниц, которых нет (например с 100 по 120), то 121 он уже не будет пробовать.
Подключаем детекторы!
Я затрудняюсь ответить, какой детектор точнее, аккуратнее, потому что сами границы понятия «голости» довольно нечеткие (на той же тестовой странице разные детекторы находили от 10 до 20 NSFW картинок ), но вот по скорости, nudepy точно медленнее других в 6 раз.
Детекторы обычно работают через tensorflow / keras, тащут за собой огромную кучу зависимостей, поэтому я советую использовать их через docker контейнеры. Например:
sudo docker run --rm --name nsfw-api -d -p 3000:3000 ghcr.io/arnidan/nsfw-api:latest
Теперь можно сказать nudecrawler'у: --detect nsfwapi
и он будет обращаться к нему. Все будет работать быстрее. Про другие варианты, чтобы не перегружать статью — на страничке проекта. Этот способ — вполне хороший.
У этих детекторов есть утечки памяти (у adult‑image‑detector — тоже и еще сильнее). При очень долгой работе он просто сожрет всю доступную память и упадет. Чтобы такого не случилось:
--stop 200 --refresh PATH/TO/refresh-nsfw-api.sh
Теперь, через каждые 200 картинок мы перезапускаем контейнер (но можно и через гораздо больше, главное, чтобы хоть иногда).
Не только для поиска голых женщин в телеграфе!
Во-первых, не только в телеграфе:
nudecrawler --detect nsfwapi --url1 https://oboobs.ru
....
INTERESTING (17 nudes) https://oboobs.ru
Nude: 17 non-nude: 1
Оказывается, на известном хабровчанам oboobs.ru тоже есть сиськи! Можете взять список всех.com доменов, например, прогнать каждый через nudecrawler и вот у вас готовая база «взрослых» сайтов, которую можно использовать в родительских фильтрах.
Во‑вторых, можно подключать любые свои детекторы. На самом деле детектор — это простой скрипт, любая программа на диске, которой передается либо имя скачанного файла, либо его URL. Подключается либо через --detect-image PATH
либо --detect-url PATH
. Можете хоть /bin/true
использовать в качестве такого «озабоченного» детектора, который во всем видит неприличность.
Например, AWS Rekognition умеет обнаруживать оружие на фото. Подключите его и можете найти странички, где есть фото оружия. Или просто можете искать собственные фотки в сети.
А если запустить с ключом -a
и поиск по слову "Пароли", вы удивитесь, как много людей хранят пароли в открытых страничках в телеграфе... В том числе от достаточно важных ресурсов, таких как хостинги. (Тут я должен сказать, что пользоваться чужими паролями незаконно и неэтично)
Пожелания?
Буду рад любым отзывам и пожеланиям. Может быть советам по интересным детекторам и другим идеям, какие фишки стоит добавить, как лучше отфильтровывать скучные странички (Вроде миллиона тех страничек, где два ролика и рассказ между ними).
Дополнения
Новая версия
Выложил новую версию (последняя сейчас: 0.2.3). Основная особенность - внутренний кэш. Самое долгое время занимает фильтрация картинок, а уникальных картинок в телеграфе на самом деле не так уж и много, он забит повторениями. Кэшируется и по URL и по SHA1 сумме. Стастистика кэша за ночь очень впечатляет:
"cache": {
"urls": 4704,
"sums": 4704,
"hit_url": 79504,
"hit_sum": 284,
"miss_url": 4988,
"miss_sum": 4704
}
Менее 5к картинок в кэше (о каждой - только сумма и урл), и при этом почти 80 000 попаданий! Новая версия гораздо быстрее. Да, на каждую из миллиона повторых страниц все равно уйдет какое-то время, но гораздо меньше. Кстати, еще интересные цифры из статистики моего ползуна:
"found_interesting_pages": 10361,
"found_nude_images": 157375,
"gap_max": 4,
"processed_images": 89860,
Еще последняя версия умеет быстро проматывать повторные страницы (иногда их - несколько тысяч. Даже с кэшем их долго обрабатывать, обновитесь хотя бы до 0.2.3).
Еще одна новая версия (0.3.8) с поддержкой docker и evalidate
Вышла еще новая версия. Главное - теперь есть docker контейнер! Все просто:
mkdir /tmp/run
sudo docker run --rm -v /tmp/run:/work yaroslaff/nudecrawler nudecrawler -a Eva "Sasha Grey" "Belle Delphine" Amouranth
Еще - теперь более гибкая фильтрация благодаря evalidate, вместо игры с несколькими параметрами, теперь можно просто задать выражение на пайтоне, например: --expr (total_images>10 or total_video>3) and new_nude_images>2
ну или просто --expr True
Другие мои проекты и где справедливость? :)
Я писал про showcert (showcert repo) - Гораздо более простой и удобный инструмент для админа чем openssl, и в большинстве случаев, может заменить его. (После showcert я вообще перестал openssl пользоваться, он уделывает OpenSSL как пивная открывалка в открывании пива уделывает мультитул с 30 лезвиями, включая пассатижи и молоток). За все время, showcert получил 22 звезды на github (и то, мне кажется, больше звезд со stackoverflow, чем с хабра).
Я писал про okerr (дважды) (okerr repo). Большой по трудоемкости проект, сделанный практически "в одного". Большинство мониторингов делаются большими командами для своих больших целей, okerr - мониторинг (как self-hosted, так и полностью бесплатный(!) сервис) для небольших проектов (от одного сайта. у нас окерр следит за парой десятков серверов). С возможностью внешних проверок из разных стран, с оповещениями через Телеграмм и на почту, с УНИКАЛЬНОЙ возможностью failover (когда у вас вылетает один сервер, но сайт по прежнему живой - все запросы обслуживаются другим), с очень легкой клиентской частью (и можно даже без нее) и с очень простым дописыванием своих проверок (Если вы знаете, что "systemctl status nginx" возвращает не ноль если nginx лежит - то вы уже можете добавить эту проверку). Мониторинг, с проверками доменов на истечение, страничек на коды и контент, сертификатов на валидность и опасность скорого протухания, IP адресов на наличие в антиспам базах, логов на аномальный рост, бэкапов на свежесть и соответствие ожидаемому размеру.... В общем, у нас после перехода на окерр вообще количество внезапных проблем раз в 20 уменьшилось - все или предотвращаем или узнаем сразу же. Две звезды на гитхабе. Две. Ну я понимаю, окерр - это больше сервис (сервер ставить тяжело). Но все равно.
Я писал про evalidate (evalidate repo). Безопасный eval() для Питона. Проблема, которая часто считается условно-невозможной, для которой почти нет безопасного решения, а даже популярные гайды советуют решение, в котором есть уязвимость(!). А evalidate решает ее! Еще asteval решает отчасти похожую задачу, но гораздо медленнее (1.2 секунды в бенчмарке против 0.017 секунд). 3 звезды.
Я писал про hashget (hashget repo). Дедупликатор, который иногда позволяет ужать архивы на 99.5% (причем, в довольно типичных ситуациях). 3 звездочки.
Но стоило мне один раз написать про поиск сисек.... До публикации, у ползуна было 4 звезды (я вообще нигде не упоминал, просто магия сисек приводила к нему людей). Не прошло и суток, сейчас у ползуна 45 звезд! Спасибо, всем кто форкнул и лайкнул! :-) Это очень мотивирует и хочется дорабатывать новые фишечки в него.