Прокси для соцсетей и отложенного постинга: профили антидетект-браузера и адреса
Для работы с несколькими учётными записями площадке важен согласованный набор признаков, и адрес занимает в нём одну строку из полутора десятков. Отпечаток браузера, часовой пояс, язык интерфейса, поведение WebRTC и то, откуда уходят запросы к службе имён, читаются вместе, и расхождение между ними заметно сильнее, чем повтор одного адреса. Рабочая схема выглядит так: отдельный профиль антидетект-браузера, отдельная строка из списка адресов, согласованные между собой настройки внутри профиля.
Дальше разобрано, из чего складывается этот набор признаков, как раскладывать профили по адресам, почему адрес не меняется посреди сессии, как заполняется профиль в Dolphin и его аналогах, где лежит поле посредника в сервисах отложенной публикации, что проверять перед первым заходом и какие ошибки повторяются чаще всего.
Из чего складывается набор признаков профиля
Площадка собирает признаки на трёх уровнях сразу. Сетевой уровень: внешний адрес, подсеть, набор служебных заголовков запроса, отпечаток рукопожатия TLS. Браузерный уровень: строка User-Agent, платформа, разрешение экрана и глубина цвета, список установленных шрифтов, отрисовка через canvas и WebGL, параметры аудио-контекста, число ядер процессора, объём памяти. Поведенческий уровень: время суток захода, скорость набора текста, характер прокрутки, интервалы между действиями.
Значение имеет согласованность внутри набора. Профиль, который сообщает платформу Windows и одновременно отдаёт отрисовку WebGL от видеоядра Apple, выглядит противоречиво при любом адресе. Профиль с языком интерфейса на одном языке, заголовком Accept-Language на другом и часовым поясом, взятым откуда-то третьим, тоже разъезжается. Мы поэтому начинаем настройку с внутренней согласованности профиля и только потом подключаем адрес.
| Уровень | Что читается | Чем управляем |
|---|---|---|
| Сетевой | Внешний адрес, подсеть, служебные заголовки | Строка из списка адресов, протокол HTTP или SOCKS5 |
| Сетевой | Откуда уходят запросы к службе имён | Разбор имён на стороне посредника |
| Браузерный | User-Agent, платформа, разрешение, шрифты | Настройки профиля антидетект-браузера |
| Браузерный | Canvas, WebGL, аудио-контекст | Режим подмешивания шума в профиле |
| Браузерный | Часовой пояс, язык, Accept-Language | Автоопределение по внешнему адресу |
| Браузерный | WebRTC | Режим подмены на внешний адрес |
| Поведенческий | Ритм действий, время захода | Расписание работы и прогрев профиля |
Поведенческий уровень мы обычно оставляем людям, при этом одну вещь настраиваем осознанно: ритм работы с профилем. Учётная запись, которая молчит весь день и потом за десять минут выдаёт двадцать действий, читается по логам площадки не хуже совпадающих отпечатков. Прогрев на первой неделе мы держим коротким: по десять минут в день, заход, просмотр ленты, пара подписок, выход. Дальше профиль переходит в рабочий режим и живёт обычным расписанием проекта.
Служебные заголовки стоят отдельным пунктом. Посредник, который добавляет к запросу поля вроде Via, X-Forwarded-For или Proxy-Connection, сообщает о себе прямо. Приватные серверные адреса такие поля не добавляют, и запрос доходит до площадки в том виде, в котором его собрал браузер. Подробный разбор всего, что уходит на сторону площадки, собран в материале про то, что сайт видит о посетителе.
Связка «профиль плюс своя строка адреса»
Единица работы здесь одна: профиль антидетект-браузера вместе с назначенной ему строкой из списка. Профиль хранит куки, локальное хранилище, историю и весь набор отпечатков. Строка задаёт, откуда уходят запросы. Пара живёт вместе от создания профиля до конца работы с ним.
Список адресов забирается в кабинете в двух форматах: IP:PORT для машины с привязанным адресом и IP:PORT:LOGIN:PASS для доступа по логину с паролем. Для профилей антидетект-браузера чаще берут второй формат: он переносится вместе с профилем на другую машину и работает там без правки настроек привязки.
# строки для назначения профилям
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd
185.24.87.16:8000:user5521:pf39kd
# та же строка в записи, которую понимает большинство браузеров
socks5://user5521:[email protected]:8000
Порядок назначения простой. Создали профиль, сразу задали ему строку, сохранили, проверили внешний адрес встроенной кнопкой. Только после этого профиль первый раз идёт на площадку. Профиль, который успел один раз зайти напрямую, дальше несёт этот след в куках и в истории, и переназначение адреса задним числом картину уже не переписывает.
Протокол берётся по возможностям браузера. HTTP и HTTPS понимают все, SOCKS5 поддерживают почти все и он предпочтительнее: имена разбираются на стороне выхода, поэтому запросы к службе имён не уходят мимо посредника. В пакете доступны SOCKS4 и SOCKS5 на выбор, и работу профилей удобно строить на прокси SOCKS5 для антидетект-браузеров.
Как раскладывать профили по адресам
Базовое правило мы формулируем коротко: один рабочий профиль, одна строка списка. Наш пул держит около 12 000 активных адресов, состав обновляется в реальном времени, поэтому строк хватает даже под крупную сетку профилей.
Родственные профили допускают исключение. Личная страница человека и страница бренда, которую он же ведёт, связаны и в жизни, поэтому один адрес на два таких профиля выглядит естественно. То же касается основного профиля и профиля для просмотра статистики того же проекта. Больше трёх связанных профилей на одну строку сводить не стоит.
| Сценарий | Профилей | Строк адресов | Комментарий |
|---|---|---|---|
| Один бренд, одна площадка | 1 | 1 | Простейший случай, пара живёт неизменной |
| Бренд плюс личная страница ведущего | 2 | 1 | Связь очевидна и площадке, и людям |
| Пять брендов одного агентства | 5 | 5 | Пересечений между клиентами не делаем |
| Сетка из тридцати профилей | 30 | 30 | Разброс по подсетям идёт из состава пула |
| Профили разных сотрудников | По числу людей | По числу людей | Каждый работает со своей парой |
| Тестовый профиль для проверок | 1 | 1 | Держим отдельно от рабочих |
Профили сотрудников мы разводим по строкам всегда, даже когда люди ведут один проект. Причина практическая: сотрудники работают из разных мест и в разное время, и общая точка входа для двух разных ритмов работы выглядит противоречиво. Отдельная строка на человека снимает вопрос и заодно упрощает передачу дел, когда профиль переходит к другому специалисту.
Раскладка записывается в таблицу и хранится рядом с рабочими файлами. Поля минимальные: имя профиля, площадка, строка адреса, дата создания, ответственный. Через месяц работы сетка на два десятка профилей уже не держится в памяти, и таблица снимает вопрос «какой адрес был у этого профиля» за секунду.
Нагрузка по потокам здесь маленькая. Тридцать профилей, работающих одновременно, дают несколько десятков соединений, а стандартные пакеты рассчитаны до 1000 потоков. При двух привязанных адресах общий лимит делится между ними пополам, поэтому для работы с одной машины вторую привязку разумнее держать свободной. Условия по числу профилей и параллельной работе описаны на странице про приватные серверные адреса для команды.
Почему адрес не меняется посреди сессии
Сессия на площадке живёт куками и токеном, привязанным к устройству. Площадка сверяет их с тем, откуда пришёл запрос. Резкая смена внешнего адреса в середине активной сессии выглядит подозрительно, и типовая реакция площадки на это предсказуема: повторный запрос подтверждения, иногда выход из учётной записи.
Схема работы с пулом это учитывает. Из списка берётся конкретная строка, она прописывается в профиль и держится там весь рабочий заход. Ротация внутри пула автоматическая, состав меняется, при этом соединение, открытое через выбранную строку, работает всё время сессии. Мы перечитываем список перед началом рабочего дня и в этот момент, если нужно, обновляем строки в профилях: замена делается между сессиями, при закрытом браузере.
Практический порядок выглядит так. Утром скрипт тянет актуальный список ссылкой из кабинета. Раскладка сверяется: строки, пропавшие из списка, заменяются на новые, остальные профили остаются со своими. Дальше рабочий день идёт без правок настроек. Вечером профили закрываются, и следующая сверка проходит уже завтра.
# утренняя сверка: тянем актуальный список и сравниваем с раскладкой
curl -s "https://<адрес выдачи из кабинета>" -o /opt/smm/proxies.txt
comm -23 <(cut -d: -f1,2 /opt/smm/profiles.csv | sort) \
<(cut -d: -f1,2 /opt/smm/proxies.txt | sort)
# вывод показывает строки, которых в актуальном списке уже нет
Настройка профиля в Dolphin по шагам
Dolphin построен вокруг карточки профиля, и все нужные поля лежат в ней. Порядок заполнения такой.
Шаг первый: создание. Кнопка нового браузера, имя профиля, тег или папка. Имя лучше делать говорящим: площадка, проект, порядковый номер. Через полсотни профилей имена вида «профиль 12» перестают что-либо означать.
Шаг второй: вкладка прокси. Выбирается тип, HTTP или SOCKS5, дальше заполняются четыре поля: адрес узла, порт, логин, пароль. Строку из списка можно вставить целиком, программа разберёт её по полям сама. Рядом стоит кнопка проверки, и она отрабатывает до сохранения профиля: показывает внешний адрес, время отклика и часовой пояс, который площадка увидит.
Шаг третий: основные параметры. Платформа, версия браузерного движка, User-Agent. Разрешение экрана и глубина цвета. Здесь достаточно взять предложенный набор: он собран согласованно и внутренних противоречий не содержит.
Шаг четвёртый: часовой пояс и язык. Оба поля переводятся в режим определения по внешнему адресу. Тогда профиль сам подставит пояс и язык интерфейса, согласованные с тем, откуда идут запросы, и заголовок Accept-Language соберётся под них же.
Шаг пятый: WebRTC. Режим подмены, при котором наружу отдаётся внешний адрес соединения. Отключение WebRTC целиком тоже работает, при этом заметно само по себе: браузер без WebRTC встречается редко. Подробности по этому каналу собраны в заметке про проверку и отключение WebRTC.
Шаг шестой: canvas, WebGL и аудио-контекст. Режим подмешивания шума, стабильного для конкретного профиля. Важно, чтобы шум был постоянным между запусками: профиль, который каждый раз отдаёт новый отпечаток отрисовки, выглядит страннее профиля с одним и тем же.
Шаг седьмой: сохранение и первый запуск. Профиль открывается, первым делом проверяется внешний адрес и согласованность настроек, и только потом идёт заход на площадку. Пошаговый разбор полей с картинками интерфейса лежит на странице про настройку Dolphin для работы с профилями.
| Что настраиваем | Где в профиле | Что ставим |
|---|---|---|
| Тип посредника | Вкладка прокси | SOCKS5 при поддержке браузером |
| Адрес и порт | Вкладка прокси | Строка из списка кабинета |
| Логин и пароль | Вкладка прокси | Пара из формата IP:PORT:LOGIN:PASS |
| Платформа и User-Agent | Основные параметры | Предложенный согласованный набор |
| Часовой пояс | Отдельное поле | Определение по внешнему адресу |
| Язык интерфейса | Отдельное поле | Определение по внешнему адресу |
| WebRTC | Раздел приватности | Подмена на внешний адрес |
| Canvas и WebGL | Раздел отпечатков | Шум, стабильный для профиля |
| Служба имён | Следствие протокола | Разбор имён на стороне выхода |
Другие антидетект-браузеры: те же поля под другими именами
Octo Browser, AdsPower, GoLogin, Undetectable и Multilogin устроены изнутри одинаково. Отличаются названия разделов и расположение кнопок, набор полей повторяется. Везде есть карточка профиля с блоком посредника, везде принимаются HTTP, HTTPS и SOCKS5, везде можно завести общий список адресов и назначать строки профилям пачкой.
Пара мелочей отличается от браузера к браузеру, и мы их проверяем при переезде сетки. Первая: разбор вставленной строки. Часть программ понимает запись IP:PORT:LOGIN:PASS целиком, часть требует четыре отдельных поля, и склеенная строка в поле узла даёт ошибку подключения без внятного текста. Вторая: поведение встроенной кнопки проверки. У одних браузеров она ходит через настройки профиля целиком, у других мимо них, и тогда показанный адрес говорит лишь о доступности узла.
Массовое назначение стоит отдельного внимания. Список загружается один раз, дальше программа раздаёт строки профилям по порядку либо по указанному соответствию. Раздача «по порядку» удобна при первичной сборке сетки, при этом соответствие всё равно выгружается в таблицу и хранится: без него восстановить пары после переустановки будет долго.
Общий подход к работе через антидетект-браузеры, включая совместимость протоколов и формат строк, разобран на странице про прокси для антидетект-браузеров.
Сервисы отложенной публикации и поле посредника
Отложенный постинг работает двумя способами. Первый: сервис подключается к площадке официальным способом через выданный доступ, публикует по расписанию со своей стороны, и запросы идут с адресов самого сервиса. Второй: публикация идёт из браузерного профиля, вручную или скриптом, и тогда работает адрес профиля.
У части сервисов поле посредника есть прямо в карточке подключаемой учётной записи: там задаются узел, порт, логин и пароль, и все обращения к площадке по этой записи идут через него. У части поля нет, и тогда учётная запись добавляется в сервис из браузерного профиля, а дальше публикации уходят со стороны сервиса.
| Способ публикации | Где задаётся адрес | Что учитываем |
|---|---|---|
| Сервис с полем посредника в карточке записи | Настройки подключённой записи | Строка та же, что у профиля браузера |
| Сервис без поля посредника | Адрес не задаётся | Добавление записи делаем из профиля |
| Публикация вручную из профиля | Профиль антидетект-браузера | Адрес профиля неизменен весь заход |
| Свой скрипт по программному доступу | Переменные окружения | HTTPS_PROXY со строкой профиля |
| Планировщик на своём сервере | Настройки задания | Одна строка на одну учётную запись |
Для собственных скриптов достаточно переменных окружения либо параметра клиента.
# запуск скрипта публикации через строку профиля
export HTTPS_PROXY="socks5h://user5521:[email protected]:8000"
export HTTP_PROXY="$HTTPS_PROXY"
python3 /opt/smm/publish.py --account brand_main --queue morning
# та же проверка одним запросом до запуска очереди
curl -s -x "$HTTPS_PROXY" https://ifconfig.me
Расписание публикаций мы тоже разносим. Пять профилей, публикующих в одну минуту по одинаковому шаблону, дают заметный след даже при разных адресах. Разброс в пятнадцать двадцать минут между постами и небольшая разница в оформлении убирают этот эффект целиком, а сервисы отложенной публикации такой разброс задают прямо в очереди.
Запись socks5h вместо socks5 включает разбор имён на стороне выхода. Разница в одной букве, влияние на картину заметное: без неё имена разбираются локально и запросы к службе имён уходят от машины напрямую.
Что проверять перед первым заходом в профиль
Проверка занимает пару минут и делается один раз на профиль. Порядок ниже отработан на сетках разного размера и закрывает основные расхождения.
| Шаг | Что смотрим | Признак готовности |
|---|---|---|
| 1 | Внешний адрес | Совпадает со строкой, назначенной профилю |
| 2 | Служебные заголовки | Полей Via, X-Forwarded-For, Proxy-Connection нет |
| 3 | WebRTC | Наружу уходит внешний адрес соединения |
| 4 | Запросы к службе имён | Разбор идёт со стороны посредника |
| 5 | Часовой пояс | Согласован с тем, что отдаёт внешний адрес |
| 6 | Язык и Accept-Language | Совпадают между собой и с языком интерфейса |
| 7 | Отпечаток отрисовки | Одинаков при двух запусках профиля |
| 8 | Время отклика | Стабильно от запроса к запросу |
Шаги с пятого по седьмой удобно закрывать прямо в консоли открытого профиля.
// язык, набор языков и часовой пояс профиля
navigator.language;
navigator.languages;
Intl.DateTimeFormat().resolvedOptions().timeZone;
new Date().getTimezoneOffset();
// стабильность отпечатка отрисовки: запустить дважды, сравнить строки
const c = document.createElement('canvas').getContext('2d');
c.fillText('profile-check', 4, 12);
c.canvas.toDataURL().slice(-48);
Первый шаг мы делаем сервисом, который возвращает адрес обращения, и сверяем показанное значение со строкой из раскладки посимвольно. Второй шаг закрывается страницей проверки заголовков: смотрим весь список полей, которые дошли до приёмника, и убеждаемся, что служебных среди них нет. Такое поведение держат анонимные прокси без служебных заголовков, и проверка на них проходит одинаково для любой строки из списка. Третий и четвёртый шаги делаются проверочными страницами по WebRTC и по службе имён, они есть в открытом доступе и работают внутри профиля без установки чего-либо.
Отдельно держим тестовый профиль. Он создаётся с теми же настройками, что и рабочие, и служит для проверок нового браузера, новой версии программы или новой строки списка. Ошибка, найденная на тестовом профиле, стоит десять минут работы, та же ошибка на рабочем профиле стоит истории учётной записи.
Результат проверки записывается в ту же таблицу раскладки, отдельной колонкой с датой. Профиль, прошедший проверку, дальше открывается без повторных сверок до момента, когда его строка адреса меняется.
Ошибки, которые повторяются чаще всего
Первая по частоте: один адрес на десяток профилей. Площадка видит десять учётных записей, приходящих с одной точки, и связывает их между собой. Раскладка «одна строка на профиль» устраняет причину полностью, а строк в пуле на 12 000 адресов хватает с запасом. Требования браузеров к посреднику и совместимость по протоколам собраны на странице про прокси под многоаккаунтинг и профили.
Вторая: разъезд часового пояса и языка. Профиль сообщает один часовой пояс, заголовок Accept-Language говорит про другой язык, интерфейс площадки открыт на третьем. Режим определения по внешнему адресу закрывает все три поля разом, поэтому мы включаем его всегда.
Третья: включение и выключение посредника посреди сессии. Человек открыл профиль, начал работу, увидел медленный отклик, снял галочку и продолжил. Сессия при этом продолжается уже с адреса рабочей машины, и связь между профилем и этой машиной остаётся в логах площадки навсегда. Правило простое: настройки адреса меняются при закрытом профиле.
Четвёртая: копирование готового профиля вместе с отпечатком. Клонированные профили отличаются только именем и куками, отпечаток отрисовки у них совпадает до символа. Новый профиль создаётся с нуля, копируется только раскладка полей на бумаге.
Пятая: работа из-под профиля до проверки. Первый заход дороже всех последующих, потому что именно он формирует историю учётной записи. Проверка перед первым заходом занимает две минуты, разбор последствий пропущенной проверки занимает несколько дней.
| Ошибка | Что видно на площадке | Как устраняем |
|---|---|---|
| Один адрес на десяток профилей | Записи связываются между собой | Одна строка списка на профиль |
| Часовой пояс и язык разъехались | Повторные запросы подтверждения | Определение обоих полей по адресу |
| Посредник включён посреди сессии | Смена точки входа в активной сессии | Правки только при закрытом профиле |
| Профиль скопирован целиком | Совпадающий отпечаток отрисовки | Создание профиля с нуля |
| Первый заход без проверки | Расхождение признаков с самого начала | Восемь шагов проверки до захода |
| Строка меняется каждый день | Постоянная смена точки входа | Замена строки по факту, между сессиями |
Частые вопросы
Подойдут ли прокси под работу с моими профилями?
Заранее предугадать поведение каждой площадки и каждого браузера нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Двух часов достаточно, чтобы собрать пару профилей в Dolphin или другом браузере, назначить им строки, пройти все восемь шагов проверки и посмотреть отклик на своих площадках.
Сколько адресов можно привязать к пакету?
В стоимость входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках кабинета. При двух привязанных адресах общее число потоков делится между ними пополам. Для работы с профилями чаще берут формат с логином и паролем: он переносится вместе с профилем на другую машину и от привязки не зависит.
Можно ли отобрать адреса под конкретную страну?
Нет, наш пул представляет микс со всего мира, выборка по отдельной стране не делается. Для сетки профилей это работает в плюс: строки приходят из разных подсетей сами по себе, а часовой пояс и язык профиль подставляет по внешнему адресу автоматически.
В каком формате выдаётся список адресов?
Форматов два на выбор: IP:PORT и IP:PORT:LOGIN:PASS. Забрать список можно ссылкой или файлом прямо в кабинете, обновляется он в режиме реального времени. Пакет после оплаты включается примерно за 5 минут, и назначать строки профилям можно сразу.
Соседние задачи вынесены отдельно: несколько рекламных кабинетов одной компании с раскладкой по сотрудникам, съём позиций и работа с выдачей с расчётом нагрузки под семантику, сбор прайсов и остатков для интернет-магазина с окном выгрузки. Как поднять посредника в обычном браузере без антидетекта, расписано в материале про подключение прокси в браузере.