Ну смотрите: системное время у меня стоит (+3 МСК) на компе, иду в тот же хуер на компе, все четко. Ставлю прокси в браузер компа(хром, локация прокси тоже МСК), всё четко, совпадает.
Иду в зенку в PM без прокси всё совпадает. Ставлю прокси, расхождение 3 час. Локальное, то есть прокси показывает правильно, а системное на 3 часа меньше почему то, хотя системное на компе у меня не менялось. Откуда берет этот показатель зенка, вот в чем вопрос.
А главный вопрос: если у меня локация мск, прокси мск зачем я еще должен что то в зенке там менять всякими кодами?
а кто кроме тебя еще знает что у тебя прокси московские ? это что по умолчанию должно выставляться ? у меня например прокси челябинские. у меня тоже претензии, почему блин у меня автоматом тайм зона на челябинск не ставится ? вот какого там разрабы , мух не ловят ?
а кто кроме тебя еще знает что у тебя прокси московские ? это что по умолчанию должно выставляться ? у меня например прокси челябинские. у меня тоже претензии, почему блин у меня автоматом тайм зона на челябинск не ставится ? вот какого там разрабы , мух не ловят ?
Потому, что у меня ни когда не было таких проблем. Прокси всегда были мск. У меня было ток две проблемы раньше это днс палился и вебртс. На днях обновился и появилась такая проблема. Ну хз, раньше точно у меня на проксях не было разхождения по времени, так как учитывая это, я всегда брал мск.
То что у вас на скрине, это ставить после установки прокси же ?
Потому, что у меня ни когда не было таких проблем. Прокси всегда были мск. У меня было ток две проблемы раньше это днс палился и вебртс. На днях обновился и появилась такая проблема. Ну хз, раньше точно у меня на проксях не было разхождения по времени, так как учитывая это, я всегда брал мск.
То что у вас на скрине, это ставить после установки прокси же ?
Привет, спасибо за статью. Вот этот момент я бы поправил: 1. DNS. Скрыть DNS можно следующей строчкой C#-кода:
instance.SetBrowserPreference("network.proxy.socks_remote_dns", true);
Не скрыть, а направить в сторону прокси сервера, и это актуально только для socks протокола, о чем сама настройка и говорит по сути. Для http проксей по дефолту DNS запросы уже идут с сторону прокси.
Почему у меня на сайте http://f.vision/ в разделе Navigator постоянно пишет: Установлен фейковый юзер агент. В чем тут фейковость? Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 когда это устанавливает сама зенка?
Почему у меня на сайте http://f.vision/ в разделе Navigator постоянно пишет: Установлен фейковый юзер агент. В чем тут фейковость? Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 когда это устанавливает сама зенка?
В этой статье мы рассмотрим создание профилей для своих проектов, особенности их генерации, проверки, загрузки. Также в статью включены пара полезных сниппетов по этой теме.
Статья рассчитана на «новичков» и «середнячков» в ZennoPoster.
Кратко и под спойлером о том, что такое профили для самых новичков.
Профиль представляет собой виртальную личность-пользователя и параметры его браузера, работу которого эмулирует ZennoPoster.
К личности относятся такие данные, как логин, пароль, имя, фамилия, возраст и т.п., к параметрам браузера - UserAgent, парметры экрана, отпечатки браузера, куки, прокси и т.п.
С каждым запуском шаблона в ZennoPoster, а также просто с простым запуском ProjectMaker, программа генерирует случайный профиль, который применяется к виртальному браузеру (инстансу).
Профиль можно сохранить в файл соответствующим кубиком, в результате чего на диске появится файл с расширением ".zpprofile", в котором будут храниться все данные виртальной личности и её параметров браузера.
Так как в файле профиля хранятся кэш, куки, различные хранилища сайтов - сайты "узнают" конкретный профиль, который вы загрузили из файла и использовали до этого. Это позволяет, например, не залогиниваться заново на сайтах, на которых шаблон залогинивался с этим профилем в прошлые запуски.
Иными словами, загрузка/сохранение профиля работают по тому же принципу, как и Ваш обычный браузер - т.е. хранит данные, где вы залогинены, на какие сайты заходили и т.п. Тем самым система профилей позволяет эффективно эмулировать реальных пользователей в ZennoPoster.
Долгое время ZennoPoster имел "базовую" реализацию профилей, в которой учитывались самые основные параметры и настройки виртуального браузера. Интернет не стоит на месте, и сайты обзаводятся всё более и более мощными отслеживающими и анти-бот системами. Базовой реализации профилей ZennoPoster стало не хватать, в результате чего появились варианты решения этой проблемы в виде замечательной статьи «Анонимность в каждый ZennoPoster» в двух частях от @ibred, а потом и готовых шаблонов Spoofer и SpooferJoiner от @YrKa. Однако, если следовать статьям, нужно было внедрять в свои шаблоны достаточно много кода, и суметь сделать это грамотно и удобно для дальнейшего использования (что без хорошего знания кода, опять же, реализовать проблематично). Готовые шаблоны избавляли от этого, но были платными и имели некоторые свои проблемы и неудобства.
К счастью, весной 2018 разработчики ZennoPoster выпустили обновление 5.17, в котором представили новую систему генерацию профилей, которая включала почти все вещи, описанные в статье «Анонимность в каждый ZennoPoster». У пользователей появилось решение «из коробки», для использования которого теперь достаточно проставить несколько «галочек».
Как именно это работает, можно ознакомиться по следующим ссылкам: раз, два.
Тем не менее, на практике для совсем полноценного использования нужно немного больше, чем установка и настройка галочек и ползунков в статическом блоке «Профиль» - и именно такие нюансы предлагаю разобрать.
Рассмотрим создание отдельного шаблона-генератора профилей и сниппета, который будет загружать сгенерированные профили. То есть, по факту, создадим современные аналоги Spoofer и SpooferJoiner.
Отдельный шаблон-генератор профилей удобен тем, что можно заранее сгенерировать пачку профилей с нужными параметрами. Сниппет загрузки профиля предназначен для загрузки профиля и донастройки второстепенных параметров браузера.
Для начала просто настроим базовую версию генератора (т.е. только с «галочками») и посмотрим, что будет.
1. Заходим в статический блок «Профиль», включаем ручной режим на вкладке «Браузер» и включаем все эмуляции.
2. В соседнем блоке «Настройки проекта» желательно сразу ставить «галочку» напротив «Выделенный процесс» (отдельный инстанс под каждый браузерный поток, чтобы не могло быть никаких случайный пересечений между разными инстансами даже в теории).
3. Либо кубиками, либо сниппетом устанавливаем прокси и сохраняем профиль.
Предварительная установка прокси в инстанс нужна для того, чтобы далее в профиль сохранился сам прокси, а также его данные по часовому поясу, геопозиции и IP в WebRTC (в ином случае, соответственно, эти данные в профиль не попадут).
Так как при каждом запуске шаблона ZennoPoster сам генерирует случайный профиль (ещё перед выполнением, учитывая при этом наши настройки из блока «Профиль»), то остаётся только сохранить этот сгенерированный профиль.
Теперь запустим созданный шаблон в ZennoPoster, в результате чего получим сгенерированный профиль.
Создадим ещё один шаблон, который будет представлять проект, в котором будет использоваться созданный профиль.
Помимо непосредственно кода или кубика загрузки профиля рекомендую так же устанавливать прокси, как это делалось в шаблоне-генераторе (только тут после загрузки). Почему – если Вы вдруг начнёте использовать, например, backconnect-прокси с регулярно меняющимся внешним IP, то возможна ситуация, когда данные таймзоны и геопозиции нового IP не будут соответствовать данным старого, сохраненного в профиле (хотя, возможно, в последних версиях ZennoPoster этот момент уже учитывается автоматом).
После загрузки профиля нужно проверить, всё ли правильно у нас эмулируется. Существует достаточно много сайтов для этих целей, лично я предпочитаю проверять по следующим 3, в большинстве случаев этого вполне достаточно. http://f.vision/ https://whatleaks.com/ https://whoer.net/
У каждого из таких сайтов есть свои особенности и свои косяки, поэтому ограничиваться проверкой по одному точно не стоит.
По «f.vision» обнаружились следующие проблемы.
1. DNS определяются рабочей машины, а не DNS прокси.
2. В WebRTC обнаружился какой-то левый IP, который не является ни IP прокси, ни локальным IP, сгенерированным Zenno.
3. Параметры экрана (Screen) - рабочая область в ProjectMaker оказалась больше, чем сгенерированная Zenno.
1. DNS также определяются рабочей машины, а не DNS прокси.
2. В WebRTC установлено всё правильно (и IP прокси, и локальный IP, сгенерированный Zenno) – сайт ругается чисто на то, что лучше выключать WebRTC.
3. Passive OS Fingerprint (операционная система, на которой поднят прокси) не соответствует Browser Useragent (операционной системе, которая эмулируется в профиле).
Помимо того, что подсвечивают ошибками сами сайты, крайне рекомендую проверять конкретные параметры отпечатков браузера. Открываем в ленте «Текущий профиль», вкладку «Профиль», и сравниваем значения с теми, что показывают сайты.
Впрочем, этим заниматься стоит главным образом сразу после перехода на новую версию ZennoPoster (особенно, если меняется первое или второе число в названии версии), так как бывает, что в обновах что-нибудь ломается.
Лично я предпочитаю не поручать Zenno установку IP-адресов в WebRTC по следующим причинам:
1) в случае использования backconnect-прокси с регулярно меняющимся внешним IP – при смене в WebRTC может остаться старый IP, что дискредитирует бота в глазах сайта;
2) обычно меня не совсем устраивают диапазоны локальных адресов, которые использует Zenno.
В связи с этим можно вставлять в WebRTC исключительно сгенерированный локальный IP. На мой взгляд, это лучше, чем вообще ничего не вставлять в WebRTC, в то же время шансов спалить что-то лишнего практически нет. Код вставки:
C#:
// Установка локального IP в WebRTC
string ipLocal = "192.168.{0}.{1}";
ipLocal = String.Format(ipLocal, Global.Classes.rnd.Next(2), Global.Classes.rnd.Next(2, 255));
// 1-й параметр - локальный IPv4, 2-й - IPv6, 3-й - внешний IPv4, 4-й - режим работы WebRTC
instance.SetWebRTCAdresses(ipLocal, null, null, ZennoLab.InterfacesLibrary.Enums.Browser.WebRTCMode.Emulate);
3. Параметры экрана (Screen).
Данная проблема по большей части касалась только PM, так как именно там по умолчанию есть расхождение между сгенерированным рабочим экраном и реальной рабочей областью в PM. Тем не менее, отладка в основном производится в PM, и лучше сразу позаботиться об этом (да и мало ли, вдруг однажды и в ZP забагует).
Рабочая область задаётся с помощью метода SetWindowSize. В последних версиях ZP он как раз стал нормально работать в ProjectMaker.
Этот отпечаток эмулируется со стороны провайдера прокси. Соответственно, если необходимо точное совпадение, есть следующие варианты:
1) найти провайдера, который поднимает прокси на нужной ОС;
2) найти провайдера, который предоставляет услуги эмуляции нужной ОС;
3) поднять свои прокси на нужной ОС или сэмулировав нужную ОС (нужны соответствующие знания).
А так, по моему опыту, этот отпечаток далеко не критический, и в большинстве задач можно закрывать глаза (траст с истории и кукисов куда важнее в наше время, и почти всегда перекрывает подобные вещи).
5. DoNotTrack
На мой взгляд, спорный вопрос насчёт того, стоит его включать или нет. Лучше смотреть конкретные случаи, включён ли обычно DoNotTrack у той ЦА, на основе которой Вы генерируете профили. Тем не менее, код включения занесём в шаблон.
Тоже спорный параметр. С одной стороны, его принято отключать в Zenno, с другой – не помню, когда Zenno палил IP или что-то ещё через Flash. Плюс, отключение Flash автоматом означает отключение сэмулированных плагинов – что, в свою очередь, тоже может быть триггером для вызова подозрений. В общем, на какой стул садиться – решать Вам.
Добавляем весь вышеупомянутый код сразу после загрузки профиля и заново загружаем профиль, вновь смотрим сайты. Видим, что все проблемы решены.
Единственное, «f.vision» ругается на DNS, показывая при этом DNS прокси, и совпадение страны прокси со страной DNS. У этого сайта всё ещё встречаются баги (что, впрочем, разработчики не отрицают), поэтому надо сверять с другими. Тем не менее, лично мне этот сайт нравится больше других уже хотя бы тем, что не цепляет счётчики Яндекс.Метрики и Гугл Аналитики, как это делает тот же «whoer».
Ещё небольшая оговорка – код генерации локального IP лучше вставлять в шаблон-генератор, чтобы IP сохранялся непосредственно в профиле и брался из него, а не генерировался заново с каждой новой загрузкой профиля.
Как итог имеем, что с введением системы генерации профилей в ZP 5.17 большая часть эмуляций и отпечатков хорошо работает «из коробки», но в то же время, некоторые мелочи всё равно надо учитывать и дописывать.
Также хочется упомянуть такой момент. На мой взгляд, отдельный шаблон для генерации профилей – вещь очень удобная. Однако, тот момент, что все настройки системы профилей задаются только в статическом блоке «Профиль», и не доступны для редактирования ни кодом, ни кубиками – делает его нормальную реализацию невозможным.
Например, для одной задачи нам нужно подготовить 100 хромовских профилей с версиями 71-73, для другой задачи – 200 профилей FF с версией 63. Вместо того, чтобы иметь возможность вынести эти параметры во входные настройки:
Приходится каждый раз лезть в PM и изменять там вручную. Очень надеюсь, что разработчики что-нибудь придумают, как добавить такую возможность в новых версиях ZP (по крайней мере у меня есть проекты, в которых это востребовано, в тикеты писал, очень жду).
В заключение хотелось бы привести пару сниппетов безопасного сохранения и загрузки профилей.
Бывают случаи, когда профиль может тупо не загрузиться из файла, и в работе шаблона использоваться новый автопрофиль, сгенерированный Zenno при старте шаблона. Если такой профиль сохранить обычным способом после работы, то он перезапишет старый профиль, тем самым ряд сохраненных данных и куки от предыдущих сеансов будут потеряны.
Также при выполнении шаблонов при определенных условиях текущий профиль может «слететь» (например, падение инстанса или некорректная его перезагрузка), в результате, опять же, куки и много данные могут быть потеряны.
Причины таких исходов могут быть разные, как неверная логика, кривой код или баги новых билдов самой ZP (в отношении профилей лично я встречался со всеми этими вещами). Поэтому для более-менее серьёзных браузерных шаблонов – на мой взгляд, такие сниппеты очень полезны.
// Путь к профилю
string profilePath = Path.Combine(project.Path, "2.zpprofile");
// Переменные проекта, которые нужно сохранить
var saveVars = new[] { "var1", "var2" };
#region Save
Action<string,string[]> Save = (path, saveVariables) =>
{
if (File.Exists(path))
{
string profilePathAlt = profilePath.Replace(".zpprofile", "_ForCheck.zpprofile");
// Сохранение копии профиля
project.Profile.Save(profilePathAlt, true, true, true, true, true, true, true, true, true, saveVariables);
var infoOld = new FileInfo(profilePath);
var infoNew = new FileInfo(profilePathAlt);
// Допустимая погрешность в байтах
long diff = 5 * 1024;
// Если новый файл тот же или больше, с учётом допустимой погрешности
if (infoNew.Length >= infoOld.Length - diff)
{
// Сохранение профиля и удаление копии
project.Profile.Save(profilePath, true, true, true, true, true, true, true, true, true, saveVariables);
File.Delete(profilePathAlt);
}
else
{
string text = String.Format("Обнаружено уменьшение размера профиля в байтах. Старый размер: {0} Новый размер: {1}. Путь: {2}",
infoOld.Length, infoNew.Length, profilePath);
throw new Exception(text);
}
}
else
{
project.Profile.Save(path, true, true, true, true, true, true, true, true, true, saveVariables);
}
};
#endregion
// Сохранение профиля
Save(profilePath, saveVars);
На этом всё, спасибо за внимание.
PS: демо-шаблоны, которые использовались для написания статьи, прикреплены к теме.
PPS: На всякий случай отмечу, что целью статьи не является показать, как создавать наиболее "защищённые" профили с системой генерации Zenno 5.17+. Цель - показать базовые моменты создания профилей относительно высокого уровня защищенности на основе свежей системы генерации, при минимуме усилий и без случайных фейлов из-за незнания каких-либо базовых нюансов.
Для тех, кого волнует именно задача максимализации всех возможных эмуляций - рекомендую заниматься более глубоким аудитом и допиливанием профилей, с учётом как статей на форуме, так и в других источниках в интернете.
Без разницы, код в любом случае включает эмуляцию WebRTC с настройками, заданными в коде.
Во всяком случае так должно быть, в некоторых билдах Zenno бывает всякое ломается.
Без разницы, код в любом случае включает эмуляцию WebRTC с настройками, заданными в коде.
Во всяком случае так должно быть, в некоторых билдах Zenno бывает всякое ломается.
Спасибо за ответ. Можете еще пояснить почему при отработке вашего кода эмуляции webRTC перестает отображаться webRTC public IP ? И можно ли это как-то дополнить кодом ?
Спасибо за ответ. Можете еще пояснить почему при отработке вашего кода эмуляции webRTC перестает отображаться webRTC public IP ? И можно ли это как-то дополнить кодом ?
Можете воспользоваться стандартным кубиком "настройки"=> установка прокси => эмуляция webrtc в 5.40 вроде корректно работает. Если вам известен адрес можете поменять, не проблема.
Можете воспользоваться стандартным кубиком "настройки"=> установка прокси => эмуляция webrtc в 5.40 вроде корректно работает. Если вам известен адрес можете поменять, не проблема.
Подскажите правильно ли я понял что локальный IP неизменен для каждого устройства, и если его не эмулировать для каждого внешнего ip, то смена внешнего ip (например перезапуск модема) делается бессмысленным так-как ресурс все равно видит один и тот-же локальный ip ? И бывают ли обстоятельства естественной (не подозрительной с точки зрения ресурса относительно пользователя с историей посещений) смены локального ip в рамках одного профиля идентифицированного ранее ресурсом ?
Подскажите правильно ли я понял что локальный IP неизменен для каждого устройства, и если его не эмулировать для каждого внешнего ip, то смена внешнего ip (например перезапуск модема) делается бессмысленным так-как ресурс все равно видит один и тот-же локальный ip ? И бывают ли обстоятельства естественной (не подозрительной с точки зрения ресурса относительно пользователя с историей посещений) смены локального ip в рамках одного профиля идентифицированного ранее ресурсом ?
Локальный адрес - это адрес внутри вашей локальной сети, выше есть код чтобы его генерировать, если вы меняете ip и профиль другой, то лучше локальный так же генерировать, если профиль один и тот же, то генерировать каждый раз не нужно
Подскажите, пожалуйста, про такой момент.
Допустим, я сгенерировал и сохранил/нагулял профиль. В нем сохраняется текущая версия браузера?
Через некоторое время, допустим, обновилась Зенька и в ней появился свежий браузер. Будет ли изменен браузер при вызове этого профиля или надо его заново пересохранять?
Подскажите, пожалуйста, про такой момент.
Допустим, я сгенерировал и сохранил/нагулял профиль. В нем сохраняется текущая версия браузера?
Через некоторое время, допустим, обновилась Зенька и в ней появился свежий браузер. Будет ли изменен браузер при вызове этого профиля или надо его заново пересохранять?
Еще заметил один момент. Делаю проектик. Он лайкает Инстаграм. Основной шаблон использует десктоп версию.
Для него использую нагулянные профили сгенерированные по инструкции из этой темы.
И вот на некоторых аккаунтах начали прилетать блоки именно на лайки. Иногда через день блок снимался. Но на паре профилей уже дней 5 блок висит.
Решил проверить с мобильной версии. Сгенерил мобильный профиль и зашел в аккаунт - блока на лайки нет.
Кто нибудь с этим сталкивался?
Лимитов никаких не нарушал. Пару раз словил блок менее чем на 10 лайках. Аккаунты, правда, свежие совсем были. Но профили нагулянные на других сайтах, сервисах.
Кто то с таким сталкивался?
Имеет смысл совсем перейти на мобильную версию Инсты и полностью отказаться от использования десктопа?
1. Зашел с обычного мобильного (родное разрешение 2340×1080 ) на whoer.net и увидел там странное разрешение
С чем это может быть связано?
2. Правильно ли я понимаю, что instance.SetWindowSize(W,H); устанавливает размер окна PM и не влияет на то как видится устройство сайту?
3. А вот это:
project.Profile.ScreenSizeHeight = H;
project.Profile.ScreenSizeWidth = W;
Уже меняет именно то, что видно на стороне сайта на который заходим? И эти параметры хранятся в профиле?
Заранее благодарю за ответы))
-----
Еще вопрос по шрифтам. Усть ли у кого сниппет рандомизации шрифтов под Хром десктоп/мобайл?
Безвозмездно или платно) Оба варианта устроят)
1. Зашел с обычного мобильного (родное разрешение 2340×1080 ) на whoer.net и увидел там странное разрешение Посмотреть вложение 51780
С чем это может быть связано?
2. Правильно ли я понимаю, что instance.SetWindowSize(W,H); устанавливает размер окна PM и не влияет на то как видится устройство сайту?
3. А вот это:
project.Profile.ScreenSizeHeight = H;
project.Profile.ScreenSizeWidth = W;
Уже меняет именно то, что видно на стороне сайта на который заходим? И эти параметры хранятся в профиле?
Заранее благодарю за ответы))
-----
Еще вопрос по шрифтам. Усть ли у кого сниппет рандомизации шрифтов под Хром десктоп/мобайл?
Безвозмездно или платно) Оба варианта устроят)
1. Все правильно показывает, ваше разрешение не причём
2. setwindow установка размеров инстанса
3. Эти параметры генерируются в профиле при включённом чекбоксе screen
Шрифты в инстасах движков хрома и фф со своими особенностями, но менять можно и там и там
Автору респект за статью! Мне, как новичку, очень помогла! Но при написании шаблона нужна помощь в решении следуещего вопроса.
Коротко опишу ситуацию: делаю генератор польских профилей. За базу беру Germany и далее меняю переменные на польские: страна, имя и т.д.
Установил польские project.Profile.AcceptLanguage, project.Profile.UserAgentBrowserLanguage, project.Profile.UserAgentLanguage. Далее перехожу f.vision и вижу такую картину (скрин прикреплен). Несоответсвие таймзон IP игнорим, так как на разных сайтах по-разному определяет, раз Польша, раз Франция. А вот разные языки браузера - это запал. Открываю файл профиля browserprofiledata.zpdata и нахожу проблему: параметр "languages":"de-DE,de,en-US,en" (скорее всего это языки установленной системы) Помогите с кодом, чтоб перезаписать это файл с уже новыми параметрами "languages":"pl-PL,pl,en-US,en"