GenLogin настройка прокси: строка подключения, раздача адресов профилям и локальный API
- Что понадобится
- Куда вносится адрес при создании профиля
- Поддерживаемые протоколы и форма записи строки
- Список адресов и назначение его профилям
- Проверка адреса силами программы
- Распределение профилей по адресам и подсетям
- Локальный интерфейс GenLogin и автоматизация запуска
- Хранение учётных данных
- Проверка после настройки
- Разбор ошибок
GenLogin это антидетект-браузер, где каждый профиль держит собственный отпечаток, отдельное хранилище и свои куки. Страница показывает, в каком поле программа ждёт адрес посредника, в каком виде принимает строку подключения и чем проверить, что профиль уходит наружу назначенным маршрутом.
1. Что понадобится
Клиент GenLogin под Windows, вход в аккаунт и открытая вкладка «Профили». Со стороны сервиса адресов понадобится готовая выгрузка: короткая запись IP:PORT подходит при авторизации по привязанному в кабинете внешнему адресу, полная IP:PORT:LOGIN:PASS при авторизации парой доступа. Из протоколов подойдут SOCKS5 и HTTP, форма профиля принимает оба одной строкой. Локальный интерфейс поднимается вместе с клиентом на порту 55550, отдельного переключателя ему не нужно, достаточно держать программу запущенной.
Перед заведением партии профилей я обновляю выгрузку. В пуле сервиса держится порядка 12 000 адресов, обновление набора идёт автоматически, поэтому файл, скачанный полторы недели назад, приносит вместе с рабочими строками уже отработавшие. Минута на обновление снимает добрую половину вопросов к настройке. Под браузерные профили я держу отдельную строку на каждую карточку, потому что залогиненному окну нужна ровная связь на всё время работы. Тот же порядок раздачи в соседнем антидетекте я собрал на странице про список адресов под карточки Dolphin Anty.
2. Куда вносится адрес при создании профиля
Форма открывается кнопкой «Новый профиль» в верхней части списка. Она разбита на вкладки: «Обзор» с именем и группой, «Прокси» с сетевыми настройками, «Отпечаток» с версией ядра, экраном и языками. Сетевая вкладка устроена компактнее, чем у соседей по классу: хост, порт, логин и пароль программа принимает одной строкой.
| Элемент вкладки «Прокси» | Что вписывать | Замечание |
|---|---|---|
| Тип прокси | «Без прокси», HTTP, HTTPS, SOCKS4, SOCKS5 | тип берётся из выгрузки, перебором его подбирать бесполезно |
| Информация о прокси | одна строка вида хост:порт:логин:пароль | схему socks5:// писать не нужно, пробелы по краям клиент обрезает сам |
| Проверить прокси | кнопка справа от строки | отвечает адресом выхода, страной и временем отклика |
| Часовой пояс | режим определения по адресу выхода | оставляйте автоматический, иначе профиль покажет часовой пояс машины |
| Геопозиция | «Запросить у сайта» или «Запретить» | при автоматическом режиме координаты берутся от адреса выхода |
| WebRTC | «Подмена» | внутренний адрес машины наружу перестаёт уходить |
| Язык интерфейса | по адресу выхода | заголовок Accept-Language собирается из того же источника |
Единое поле заметно ускоряет ручное заведение: строка из выгрузки вставляется целиком, разбирать её на части руками не приходится. У этого же удобства есть обратная сторона. Клиент разбирает строку по двоеточиям и молча принимает лишний фрагмент, поэтому запись с хвостом вида :socks5 создаст профиль, который свалится при первом запуске. Я взял привычку вставлять строку и сразу нажимать проверку, до сохранения формы. Сохранённая карточка теряется среди сотни однотипных, и поиск её по списку занимает больше времени, чем повторный набор строки.
Нижняя часть вкладки «Отпечаток» решает половину будущих претензий целевых площадок. Часовой пояс, язык и координаты я оставляю в автоматическом режиме, чтобы браузер и маршрут говорили одно и то же. Разъезд между ними виден со стороны сайта с первой загрузки страницы.
3. Поддерживаемые протоколы и форма записи строки
Четыре протокола из выпадающего списка ведут себя по-разному, и разница касается авторизации и того, какие порты пройдут через посредник.
| Протокол | Пример строки в поле | Авторизация парой | Что учесть |
|---|---|---|---|
| HTTP | 192.0.2.61:8080:g3117:Vt8xNw4c | да | ходит по портам 80 и 443, нестандартный порт сайта может закрыться на маршруте |
| HTTPS | 192.0.2.61:8443:g3117:Vt8xNw4c | да | канал до посредника шифруется отдельно от содержимого запроса |
| SOCKS4 | 198.18.7.22:1080 | нет | пары логина и пароля протокол не передаёт, работает при привязке адреса |
| SOCKS5 | 192.0.2.94:1080:g3117:Vt8xNw4c | да | пропускает произвольные порты, разрешение имён можно отдать посреднику |
Порядок частей в строке фиксированный. Две части читаются как хост и порт, четыре как хост, порт, логин и пароль. Три части клиент принимает и трактует третий фрагмент как логин с пустым паролем, что даёт профиль без доступа и ответ 407 при первом же запросе.
192.0.2.61:8080:g3117:Vt8xNw4c
192.0.2.94:1080:g3117:Vt8xNw4c
198.18.7.22:1080
Пароли с двоеточием внутри в такую запись не помещаются, потому что разбор строки идёт по этому же символу. Если пара доступа выдана с двоеточием, перевыпустите её в кабинете, там смена пары занимает секунды. Выгрузку я забираю сразу в формате IP:PORT:LOGIN:PASS, тогда каждая строка ложится в поле профиля без переделки, и это удобнее всего, когда решено взять адреса SOCKS5 под парк профилей с авторизацией парой.
Для SOCKS5 отдельно посмотрите переключатель разрешения имён во вкладке отпечатка. Когда имена разрешает посредник, запрос к сервису имён уходит по тому же каналу, и локальный сервер провайдера о походе на площадку ничего не узнаёт.
4. Список адресов и назначение его профилям
Раздел «Прокси» в левом меню хранит адреса отдельно от карточек. Поле добавления принимает многострочный текст, поэтому пачка строк из выгрузки заходит одним движением, по строке на запись. Каждой записи полагается имя группы и заметка, я кладу в заметку дату выгрузки и площадку, под которую строка отведена.
Назначение адресов профилям идёт из списка карточек. Отмечаете профили флажками, открываете «Изменить прокси» и выбираете, как раздать отмеченный набор строк.
| Режим раздачи | Что делает | Где я его беру |
|---|---|---|
| По порядку | первая строка первому профилю, дальше по списку | партия свежих карточек под одну площадку |
| По кругу | список короче выделения, строки повторяются с начала | 40 профилей на 12 адресов при лёгкой нагрузке |
| Случайно | строки раздаются вперемешку | фоновый обход страниц, где соседство карточек значения не имеет |
| Один адрес на всех | все отмеченные карточки получают одну строку | отладка новой сборки профиля перед раздачей |
Порядок в списке карточек перед раздачей я сортирую по группе. Тогда профили одной площадки получают соседние строки выгрузки, и маршрут у группы выходит похожим. Обратный порядок сортировки перемешает карточки разных площадок между собой, после чего разбирать, кто куда вышел, придётся глазами.
Замена выгрузки через неделю показывает разницу между двумя способами хранения. Строка, вписанная внутрь профиля, живёт только там, и обновление 70 карточек означает 70 открытий формы. Запись из раздела «Прокси» правится один раз, все привязанные к ней профили подхватывают новый хост при следующем запуске. Я держу в разделе только записи, а внутрь карточек строки вписываю на время отладки.
Раздел принимает выгрузку в том же виде, в каком её отдаёт кабинет сервиса: ссылкой на список либо скачанным файлом. Ссылку я открываю в браузере, выделяю содержимое и вставляю в поле добавления, файл открываю блокнотом и копирую нужный кусок. Порядок строк при вставке сохраняется, поэтому нумерация в кабинете и порядок записей в GenLogin совпадают, и сверять их потом легко по первым октетам. Когда парк живёт на паре доступа, удобнее сразу забрать список адресов SOCKS5 одной строкой в готовом формате, тогда каждая запись попадает в раздел без правки.
Старые записи из раздела я удаляю партиями раз в пару недель. Клиент не мешает хранить строки, которые давно никем не заняты, и через месяц раздел разрастается до нескольких сотен позиций, где актуальны едва треть. Фильтр по заметке с датой выгрузки отбирает устаревшее за секунду, дальше отметка флажками и удаление отмеченного. Профили, которые ссылались на удалённую запись, при следующем старте покажут пустое сетевое поле, поэтому удаление я ставлю первым шагом перед раздачей свежего набора.
5. Проверка адреса силами программы
Кнопка «Проверить прокси» отправляет одиночный запрос по указанному маршруту к внешнему сервису определения местоположения и рисует ответ прямо под строкой: адрес выхода, страну, провайдера и время отклика в миллисекундах. Отклик выше 1500 миллисекунд у меня служит поводом взять другую строку, даже когда проверка отметилась зелёным.
| Что кнопка показывает | Что остаётся за её пределами | Чем закрываю |
|---|---|---|
| адрес выхода и страну | утечка настоящего адреса через WebRTC | страница проверки WebRTC в запущенном профиле |
| факт приёма пары доступа | чей сервер отвечает на запрос имени | страница проверки разрешения имён |
| время отклика на один запрос | поведение канала под нагрузкой в течение часа | вкладка с автообновлением на 3 минуты |
| провайдера по базе сервиса | как целевая площадка отнесётся к адресу | пробный заход на саму площадку |
Показанный проверкой город приходит из базы того сервиса, который клиент опрашивает. Базы у разных сервисов расходятся, поэтому соседние города на одном адресе говорят про базу. Часовой пояс профиля при этом считается автоматикой браузера, и расхождение в один час между надписью в проверке и значением внутри профиля встречается регулярно.
Массовая проверка живёт в списке карточек: отмечаете профили флажками и жмёте проверку прокси в верхней панели. Клиент прогоняет строки по очереди и красит колонку статуса. Я запускаю такую проверку после каждой смены выгрузки и смотрю только на красные строки, их обычно 3-5 на сотню.
Скорость массовой проверки зависит от размера партии. Сотня карточек проходит примерно за 4 минуты, и всё это время клиент занят: интерфейс отвечает с задержкой, запуск профилей лучше отложить. Я ставлю проверку на партию перед перерывом и возвращаюсь к готовой колонке статусов. Отмечать разом весь парк смысла немного, потому что красные строки повторяются группами и первой же полусотни хватает, чтобы понять состояние выгрузки целиком.
6. Распределение профилей по адресам и подсетям
Сколько карточек вешать на адрес, определяет характер работы профиля. Дальше подсети: адреса из одной выгрузки нередко идут подряд и делят третий октет, а группа профилей, вышедшая с соседних адресов одной подсети, для площадки выглядит связанной.
| Характер работы профиля | Профилей на адрес | Профилей на подсеть /24 | Что учесть |
|---|---|---|---|
| Ручной заход раз в сутки | 1 | до 12 | нагрузки почти нет, проверка занимает минуту |
| Постоянные аккаунты одной площадки | 2-3 | до 6 | одинаковый часовой пояс у всей группы |
| Сбор данных в несколько потоков | 5-8 | до 4 | каждая вкладка забирает отдельное соединение |
| Фоновый обход страниц | 10 и выше | до 3 | разводите старты паузами, залп даёт всплеск соединений |
Считать подсети в выгрузке проще скриптом, глазами сотня строк не читается. Короткая команда собирает первые три октета и показывает, где строк больше всего:
Get-Content .\pool.txt | ForEach-Object { ($_ -split ':')[0] } |
ForEach-Object { ($_ -split '\.')[0..2] -join '.' } |
Group-Object | Sort-Object Count -Descending | Select-Object -First 8 Name, Count
Если верхняя строка вывода показывает 30 адресов в одной подсети, я эти строки развожу по разным группам профилей. Пула на 12 000 адресов хватает, чтобы набрать выборку с запасом и не сажать всю площадку на соседние хосты. Профилям, которым нужен минимум служебных заголовков на выходе, я отдаю анонимные адреса без лишних заголовков.
Потоки считаются отдельно от адресов. На обычных пакетах их 1000, на корпоративном до 3000, при двух привязках лимит расходится на них поровну, пакеты между собой по потокам не складываются. Одно окно GenLogin с лентой и подгрузкой картинок держит десятки соединений, поэтому арифметика становится ощутимой уже на третьем десятке карточек. Трафик безлимитный на всех пакетах, считать нужно только потоки. Парку, который работает каждый день, я беру месячный доступ к общему пулу: включение занимает около 5 минут, а перед новой раздачей я прогоняю формат строк на паре карточек бесплатным тестом до 2 часов.
7. Локальный интерфейс GenLogin и автоматизация запуска
Клиент поднимает HTTP-сервер на порту 55550 и отвечает на обычные GET-запросы. Через него профиль стартует, возвращает адрес отладочного порта и подхватывается драйвером.
API=http://localhost:55550/api/v1
curl -s "$API/profiles?offset=0&limit=50"
curl -s "$API/browser/start?id=6c9d13f5e2"
curl -s "$API/browser/stop?id=6c9d13f5e2"
Список профилей отдаёт идентификаторы, и остальные вызовы без них не работают: клиент опознаёт карточку по внутреннему идентификатору, имя профиля для интерфейса значения не имеет. Я выгружаю список после каждой партии новых карточек и складываю пары «имя и идентификатор» в файл рядом со скриптом.
Ответ на старт содержит wsEndpoint, remoteDebuggingAddress и путь к драйверу. Первое поле подставляется в подключение Playwright или Puppeteer напрямую:
import requests
from playwright.sync_api import sync_playwright
r = requests.get("http://localhost:55550/api/v1/browser/start",
params={"id": "6c9d13f5e2"}, timeout=60).json()
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(r["data"]["wsEndpoint"])
page = browser.contexts[0].pages[0]
page.goto("https://example.net/")
print(page.title())
Пауза между стартами в 1-2 секунды обязательна: клиент не успевает поднять окна залпом и отдаёт пустое тело, где адреса отладочного порта попросту нет. Я ставлю паузу в 2 секунды и запускаю партии по 10 профилей.
Строку подключения тоже меняет интерфейс, без открытия формы. Обновление профиля уходит методом POST с телом JSON:
{
"id": "6c9d13f5e2",
"proxy": {
"type": "socks5",
"raw": "192.0.2.94:1080:g3117:Vt8xNw4c"
}
}
Именно этим я перекладываю парк на свежую выгрузку: скрипт читает файл, сопоставляет строки с идентификаторами и рассылает обновления пачками по 15 карточек. Семь десятков профилей переезжают примерно за минуту, руками столько же заняло бы час.
Порт стоит проверить до первого запуска скрипта, иначе непонятно, молчит клиент или скрипт стучится не туда:
(Test-NetConnection 127.0.0.1 -Port 55550).TcpTestSucceeded
Ответ True означает, что клиент открыт и слушает. Ответ False встречается в двух случаях: программа свёрнута в трей после завершения сеанса либо порт занял сторонний процесс, и тогда его видно командой netstat -ano | findstr 55550.
Повторный вызов старта для уже открытого профиля возвращает тот же адрес отладочного порта, окно при этом не перезапускается. Свойство удобное: скрипт можно дёргать повторно после сетевого сбоя без опаски получить второе окно на ту же карточку. Остановка через интерфейс закрывает профиль корректно, с записью куки и локального хранилища на диск, чего снятие процесса из диспетчера задач не делает. Я закрываю окна только вызовом остановки, даже когда профиль завис на загрузке тяжёлой страницы.
8. Хранение учётных данных
Пара доступа к посреднику расходится по трём местам: строка внутри профиля, файл выгрузки и скрипт автоматизации. Каждому месту нужен свой порядок обращения.
Внутри профиля строка лежит в локальной базе клиента в каталоге пользователя и в интерфейсе показывается полностью, точками её GenLogin не закрывает. Это удобно при отладке и неприятно при демонстрации экрана, поэтому перед созвоном я закрываю вкладку «Прокси» открытого профиля. Файл выгрузки держу в отдельном каталоге вне рабочих папок с проектами: одной строки оттуда хватает, чтобы получить доступ к пулу.
В скриптах пару я передаю через файл окружения, в теле скрипта её нет:
GENLOGIN_PROXY_USER=g3117
GENLOGIN_PROXY_PASS=Vt8xNw4c
Файл .env попадает в .gitignore первой строкой, потому что утечка пары через историю репозитория ловится позже всего. Перевыпуск пары в кабинете обнуляет все прежние копии разом, и это самый быстрый способ закрыть засветившуюся выгрузку. Есть вторая дорога, где хранить попросту нечего: привязка внешнего адреса машины в кабинете переносит доступ на сам адрес. Привязок в пакете две, менять их можно без ограничений, поэтому офисный выход и домашний спокойно живут рядом. Обе дороги, вместе с выдачей списка ссылкой и файлом, разобраны на странице про адреса под антидетект-браузеры.
9. Проверка после настройки
Профиль стартует кнопкой запуска в строке карточки. Первая вкладка поднимается за 3-5 секунд, длинная пауза означает, что канал до посредника не встал и браузер досиживает таймаут.
1. Открыть сервис определения адреса и сверить последний октет со строкой профиля. 2. Открыть страницу проверки WebRTC, локальных адресов вида 10.* и 192.168.* в выдаче быть не должно. 3. Открыть страницу проверки разрешения имён и посмотреть, чей сервер отвечает на запрос. 4. Свести часовой пояс страницы с тем, что показывает сам браузер. 5. Оставить окно с активной страницей на 10 минут и вернуться, внутри сессии адрес держится прежним.
Четвёртый пункт удобно закрывать из консоли профиля, ответ приходит одной строкой:
Intl.DateTimeFormat().resolvedOptions().timeZone
Отдельно смотрю сетевой журнал в инструментах разработчика. Прямой выход мимо посредника выдаёт себя временем ответа, оно резко меньше соседних запросов. Такое приносят расширения со своими каналами связи, лечится отключением лишнего внутри профиля.
Ещё одна проверка занимает 10 секунд. Запустите два профиля одной группы рядом и сравните показанные адреса. Совпадение говорит, что при раздаче сработал режим «по кругу» на слишком коротком списке, и поправить это до начала работы гораздо приятнее.
Итог прогона я записываю в заметку карточки: дата и пометка о пройденных пунктах. Заметка выводится колонкой в списке профилей и фильтруется, поэтому после смены выгрузки сразу видно, какие карточки ещё никто не открывал.
10. Разбор ошибок
| Сообщение или симптом | Причина | Что делать |
|---|---|---|
| Проверка прокси отвечает «Failed» сразу | лишний фрагмент в строке или пробел внутри неё | перевставить строку из выгрузки целиком и повторить проверку |
ERR_PROXY_CONNECTION_FAILED при запуске профиля | хост из строки выпал из актуальной выгрузки | обновить запись в разделе «Прокси», профиль подхватит её при следующем старте |
407 Proxy Authentication Required | в строке три части, пароль ушёл пустым | привести строку к четырём частям либо включить привязку адреса в кабинете |
ERR_TUNNEL_CONNECTION_FAILED на отдельных сайтах | целевой порт закрыт на маршруте протокола HTTP | сменить тип на SOCKS5, он пропускает произвольные порты |
| Профиль открылся и показывает адрес самой машины | во вкладке «Прокси» остался тип «Без прокси» | вернуть SOCKS5 или HTTP и перезапустить окно |
| Строка принята, окно стартует минуту | залповый запуск партии профилей | развести старты паузами по 2 секунды |
| Часовой пояс страницы отличается от адреса выхода | автоматический режим во вкладке отпечатка выключен | включить определение по адресу выхода и перезапустить профиль |
| Массовая проверка красит половину строк красным | выгрузка устарела целиком | скачать список заново и переназначить его отмеченным профилям |
| Запрос к порту 55550 не проходит | клиент свёрнут после выхода из аккаунта либо порт занят | открыть клиент, при занятом порте посмотреть владельца через netstat |
| Старт из скрипта отдаёт пустое тело | пауза между вызовами меньше секунды | увеличить паузу до 2 секунд и повторить вызов |
| Два профиля вышли с одного адреса | раздача «по кругу» на списке короче выделения | добавить строк в список либо переключить режим на «по порядку» |
Пара слов про поведение адреса внутри сессии. Ротация в пуле автоматическая и работает в вашу пользу: набор адресов обновляется сам, перебирать строки руками не нужно. Внутри открытого окна связь держится ровно, а свежая выгрузка перед прогоном даёт актуальный набор. Я обновляю список раз в несколько суток и рассылаю его по парку скриптом через порт 55550, вся операция укладывается в минуту.
Соседние страницы справочника показывают ту же настройку в других антидетект-браузерах: подключение адресов в AdsPower, настройка прокси в BitBrowser и работа с прокси в Octo Browser, где карточки и адреса связаны по-своему. Когда через посредник нужно провести стороннюю программу на той же машине, смотрите страницу про маршрутизацию приложений в Proxifier.