Создание Бот-системы для профессиональной социальной сети LinkedIn( Часть 1: введение)

test
Боты атакуют LinkedIn

То как все начиналось. Предыстория бот-системы

Несколько лет я работал в компании по поиску квалифицированного персонала для компаний заказчиков. И первым моим проектом было создание автоматизированной системы поиска персонала в социальной сети для профессионалов Linkedin. Все кто работал с заграницей знают о пользе LinkedIn. Там и компании, и специалисты. В течении около года я занимался созданием этой двухкомпонентной системы со связкой клиент-сервер. В компании уже существовало несколько автоматизированных шаблонов, созданных для ZennoPoster, но все данные хранились в нескольких файлах, в разных форматах и очень по глючному. Для работы хотя-бы 10 ботов параллельно нужно проработать всю архитектуру всей системы, а мы потенциально могли работать сразу в несколько десятков потоков и точно работали в 20-25 потоков уже на этапах тестов. Это 25 ботов в единицу времени. Чего достаточно для отправки нескольких сотен сообщений за пол часа-час. Некоторое время занимал "отстой" ботов прежде чем они начинали слать и быть в целом более активными.

Выгода

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

Особенности системы и некоторые итоги

В конечном итоге мы пришли к следующем результатам перед промышленным запуском. - Количество ботов 2000+. Работа в 20 потоков.
- Потенциально могло быть в десятки раз больше ботов. Работа клиента с нескольких компьютеров в несколько десятков потоков.
- Каждый бот вступал в 5-10 групп, кидал заявку.
- Каждый бот писал в систему группы в которые он вступил/подал заявку.
- По правилам LinkedIn-а можно вступить только в 20 групп одним пользователем.
- По правилам LinkedIn-а можно отправить крайне ограниченное количество сообщений тем людям кто у тебя не в списке. Боты учитывали этот лимит и время ограничения.
- При регистрации боты обходили капчу, смс и подтверждение Email.
- Если один бот вступал в группу, в которой был уже один из наших ботов, то он кидал заявку в друзья боту, второй его подтверждал и после этого бот из группы подтверждал вступление в группу новому боту. Чтобы это не было сильно заметно, боты дружили и подтверждали друг друга в случайном порядке, с ограничениями на повтор в лимит времени.
- Боты которые были заблокированы в социальной сети - отключались. Фиксировалось время. Все действия ботов логировались в системе, так что в перспективе можно было отследить причины на которых боты лучше всего могут палиться, созданием дашбордов и диаграмм.
- Боты фиксировали модераторов групп и администраторов и исключали из рассылки сообщений.
- Поиск проходил несколько списков фильтрации, включая фильтрацию в самом LinkedIn по поиску, так и в нашей собственной системе.
- Персонализация ботов по всем полям, рандомизация аватара/фотографии пользователя. В системе было несколько сотен мужских и женских фоток, каждая из которых рандомизировалась несколькими случайными алгоритмами. Использование фоток фиксировалось для равномерного распределения фотографий, чтобы боты не использовали одни и те же.
- В конечном варианте уже должны были участвовать два типа ботов, скаут и обычный. Для скаутов профили рандомизировались и заполняться должны были максимально подходяще под специалиста на столько, на сколько только это возможно. Они не шлют сообщения, а только вступают в группы, куда не могут вступить другие боты и подтверждают их.
- Был интерфейс модератора, для ответов на сообщения от пользователей. То есть алгоритм построен так что боты проверяют свои сообщения на списки новых сообщений и фиксируют ответ, сохраняя его в систему так что модератор системы видит сообщение и может прямо из системы ответить на него. Бот же зайдя в систему по временным задачам или специально для проверки сообщений потом от себя отправлял текст.
- Цепочечная структура задач. Бот заходит в свой аккаунт и выполняет не одно конкретное действие, а цепочку "случайных" действий определенных для него системой.
- Использование прокси для того чтобы прятать свой IP. В последних случаях анонимизация по максимуму на сколько этого можно было достигнуть в ZennoPoster.
- Сервер задач и очередей. Так как нужно было системе знать выполнялась ли уже задача, есть ли подобная и есть ли фейлы была написана полностью своя очередь задач с аналитикой для типов задач и количество.
- Задачи блокировались по степени выполнения. Один профиль не мог быть запущен одновременно в двух разных потоках, чтобы максимально его очеловечить, ведь маловероятно что один человек сразу сможет кликнуть кнопки на двух разных вкладках.
- Поиск групп подходящих ботами и модерирование их в системе. Автоматическое отсеивание неподходящий по размеру или тематике.
- Профили и сессии пользователей сохранялись. Бота могло разлогинить, но он всегда знал как снова авторизоваться и продолжать действовать или уйти на таймаут. Бот подвязывался за своей прокси. Прокси лимитировались по количеству фейлов и "отмирали".
- Многое прощелкано по анонимизации процессов. Если вам кажется что если вы зашли в сеть через TOR и вас не найдут или не поймут что это вы - бред. Есть множество косвенных характеристик которые позволяют с огромной вероятностью вас распознать. То к чему следует стремиться - не спрятать характеристики, а обмануть систему создав "типичного" пользователя максимально похожего на обычного человека.

Стек технологий

Стеком технологий основным были ZennoPoster с Own C# кодом и Laravel 5 на стороне сервера с большим количеством собственного кода. С количеством потоков приходилось постоянно придумывать что-то новое, так как возникали и состояния гонки, которые серверному PHP в принципе не известны, но решить их вполне можно.

Результат

В конечном итоге мы пришли к спорным результатам, система оказалась полностью рабочей, но LinkedIn нас таки вычислил и со словами менеджера "Мы потратили очень много ресурсов чтобы вас вычислить, по этому вы получаете пожизненный бан и если не прекратите свою деятельность подаем на вас в суд" мы потерпели крах проекта. Поучительная история. Linkedin(соц. сеть) так и не раскрыла как они нас выявили, но с практически 100% вероятностью виной был человеческий фактор, так как подходящий человек связывался с одним из рекрутеров компании и тот уже спокойно мог озвучить название нашей компании, да и в профиле у него это было часто указанно. В целом компания сочла что стоит прекратить данный проект и двигаться другими направлениями. Но так как другие направления очень часто пересекались, многие части проекта постоянно использовались )) Уверен что в описании выше я очень много чего пропустил, что будет указано в следующих материалах. Не знаю, буду ли я описывать множественные технические детали. Наверное только в том случае если будут просьбы что-то описать. Практически все что описано будет в этом и следующих материалах, может быть использовано для любой другой социальной сети, с некоторыми доработками. Суть у них всех подобная.

Всем приятного путешествия в экскурсии по миру ботоводства в соц. сетях!

P.S. Это далеко не единственный проект который довелось строить, так что будут еще ;-)

Следующие материалы серии:

  1. Создание Бот-системы для профессиональной социальной сети LinkedIn( Часть 1: Регистрация, email-верификация, sms, капча)

Категория: 
Share/Save

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!