<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel>
<title>kupit-proxy-ipv4.ru</title>
<link>https://kupit-proxy-ipv4.ru/</link>
<description>Справочник по прокси IPv4: выбор, покупка, протоколы, подключение и проверка</description>
<language>ru</language>
<item><title>Что такое прокси IPv4 и как он работает: адрес, маршрут и пул</title><link>https://kupit-proxy-ipv4.ru/osnovy/chto-takoe-proxy-ipv4/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/chto-takoe-proxy-ipv4/</guid><description>Прокси IPv4 это промежуточный сервер с собственным адресом четвёртой версии протокола, через который программа обращается к сайту. Площадка принимает…</description><content:encoded><![CDATA[
<p class="vvod">Прокси IPv4 это промежуточный сервер с собственным адресом четвёртой версии протокола, через который программа обращается к сайту. Площадка принимает соединение уже от адреса посредника и ему же отправляет ответ, поэтому исходный адрес пользователя до площадки не доходит.</p>
<p>Эта страница открывает раздел «Основы» и разбирает вопрос целиком: как записан адрес IPv4, что происходит с запросом на каждом шаге, почему свободных адресов в четвёртой версии не осталось, чем серверный адрес отличается от адреса домашнего провайдера, зачем такие адреса нужны в работе и что меняет пул из тысяч адресов при регулярной нагрузке. Дальше идёт разбор по разделам, от устройства записи до порядка подключения.</p>
<h2 id="kak-ustroen-adres-ipv4-32-bita-i-chetyre-chi">Как устроен адрес IPv4: 32 бита и четыре числа</h2>
<p>Адрес IPv4 занимает 32 бита. Читать двоичную строку неудобно, поэтому её делят на четыре части по 8 бит и записывают десятичными числами через точку: 203.0.113.24. Каждая часть называется октетом и принимает значения от 0 до 255. Всего комбинаций получается около 4,3 миллиарда, и это полный запас четвёртой версии протокола.</p>
<p>Одной записи для маршрутизации мало. Рядом с адресом всегда идёт маска подсети, она делит 32 бита на две зоны: старшие биты отвечают за номер сети, младшие за номер узла внутри этой сети. Запись 203.0.113.24/24 читается так: первые 24 бита это сеть, оставшиеся 8 бит различают узлы, и в блоке помещается 256 значений. Первое значение блока занимает адрес сети, последнее уходит под широковещательную рассылку, остальные 254 можно назначить оборудованию.</p>
<div class="tabl"><table><thead><tr><th>Элемент записи</th><th>Пример</th><th>Что описывает</th></tr></thead><tbody><tr><td>Октет</td><td>203</td><td>Одно из четырёх чисел, диапазон от 0 до 255</td></tr><tr><td>Полный адрес</td><td>203.0.113.24</td><td>Точка подключения конкретного узла</td></tr><tr><td>Маска</td><td>/24</td><td>Сколько старших бит отведено под номер сети</td></tr><tr><td>Адрес сети</td><td>203.0.113.0</td><td>Начало блока, оборудованию не назначается</td></tr><tr><td>Широковещательный адрес</td><td>203.0.113.255</td><td>Конец блока, служебное значение</td></tr><tr><td>Рабочие адреса</td><td>203.0.113.1 ... 203.0.113.254</td><td>254 значения под узлы</td></tr></tbody></table></div>
<p>Двоичная запись показывает логику деления нагляднее. Октет 203 в двоичном виде выглядит как 11001011, и таких групп ровно четыре, отсюда и берутся 32 бита. Маска /24 это 24 единицы подряд и 8 нулей в конце, в привычной записи она выглядит как 255.255.255.0. Маска /16 оставляет под узлы 16 бит и даёт блок на 65 536 значений, маска /8 отдаёт под узлы 24 бита. Чем меньше число после косой черты, тем крупнее блок и тем больше адресов внутри.</p>
<p>Часть запаса выведена из открытого обращения. Диапазоны 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16 работают внутри локальных сетей, 127.0.0.0/8 замкнут на сам узел, блок от 224.0.0.0 отдан групповой рассылке. Домашний роутер раздаёт устройствам именно такие внутренние значения, а наружу выпускает трафик под тем адресом, который выдал оператор связи. Отсюда простой вывод: адрес, который видно в настройках ноутбука, и адрес, который видит сайт, обычно разные.</p>
<h2 id="podset-diapazon-i-avtonomnaya-sistema">Подсеть, диапазон и автономная система</h2>
<p>Адреса раздаются блоками, поштучно их не распределяют. Минимальный блок, который принято анонсировать в глобальной таблице маршрутов, это /24 на 256 значений. У блока есть владелец, он записан в базе регионального регистратора, и любой желающий поднимет эту запись через whois за секунду. Там же видно название организации, страну регистрации и контакты для жалоб.</p>
<p>Блоки собираются в автономную систему. Автономная система это набор сетей под общим управлением с единой политикой маршрутизации, у неё свой номер вида AS64500. По номеру видно тип владельца: оператор связи с абонентами, хостинговая площадка с серверами или корпоративная сеть. Крупные площадки держат собственные списки автономных систем и раскладывают входящий трафик по ним ещё до того, как отработает бизнес-логика сайта.</p>
<p>Проверить принадлежность блока можно за пару команд, и это полезная привычка при разборе отказов. Запрос whois по адресу отдаёт владельца диапазона, границы блока и адрес для жалоб, а запрос к публичному сервису маршрутов покажет номер автономной системы и текущий анонс.</p>
<pre><code>whois 203.0.113.24 | grep -iE "netname|descr|country|origin"
dig +short AS64500.asn.cymru.com TXT</code></pre>
<p>Практический вывод для работы такой: сайт оценивает не только конкретный адрес, но и его соседей по блоку, владельца диапазона и номер автономной системы. Когда из одной подсети идёт поток однотипных запросов, счётчики срабатывают на весь диапазон целиком, и адреса рядом получают ту же оценку. Поэтому разнесение нагрузки по разным подсетям работает лучше, чем частая смена значений внутри одного блока. Это и отличает набор адресов из разных диапазонов от нескольких соседних значений, купленных подряд.</p>
<h2 id="chto-proishodit-s-zaprosom-razbor-po-shagam">Что происходит с запросом: разбор по шагам</h2>
<p>Читатель обычно формулирует вопрос коротко: «куда уходит мой запрос и что в итоге видит сайт». Разложим путь на шаги, он одинаков для браузера, парсера и любой программы с поддержкой посредника.</p>
<p>1. Программа читает настройки и видит адрес посредника, порт и способ авторизации. 2. Устанавливается TCP-соединение с посредником, например на порт 8080 для HTTP или 1080 для SOCKS. 3. Посредник проверяет право на доступ: сверяет адрес, с которого пришло подключение, либо принимает логин и пароль. 4. Программа сообщает, куда идти дальше. В HTTP это метод CONNECT с именем узла и портом, в SOCKS5 короткий обмен служебными пакетами с тем же смыслом. 5. Посредник открывает соединение с площадкой от своего адреса IPv4 и связывает два канала. 6. Ответ возвращается тем же путём, программа получает страницу, площадка записывает в логи адрес посредника.</p>
<pre><code># HTTP, авторизация логином
curl -x http://203.0.113.24:8080 -U login:pass https://example.com/catalog

# SOCKS5, имя узла разрешается на стороне посредника
curl --socks5-hostname 203.0.113.24:1080 -U login:pass https://example.com/catalog</code></pre>
<p>Шестой шаг упирается в имя узла. При работе через SOCKS5 с флагом socks5-hostname имя разрешается на стороне посредника, и запрос к службе имён уходит оттуда же, откуда идёт трафик. Такая схема держит картину соединения ровной. Отдельная тема это служебные заголовки: обычный HTTP-посредник умеет добавлять к запросу поля с исходным адресом, поэтому под рабочие задачи берут <a href="https://iprazon.com/proxy/anonimnye">прокси с высоким уровнем анонимности</a>, которые лишних полей не подставляют.</p>
<h2 id="pochemu-adresov-ipv4-ne-hvataet-i-otkuda-ber">Почему адресов IPv4 не хватает и откуда берутся новые</h2>
<p>Запас в 4,3 миллиарда значений выглядит большим только на бумаге. Служебные диапазоны съедают заметную долю, крупные блоки разошлись по организациям ещё на раннем этапе развития сети, а число устройств с выходом наружу давно перевалило за число доступных значений. Свободные блоки у региональных регистраторов закончились, и новые заявки обслуживаются из возвращённых адресов и по очереди ожидания.</p>
<p>Операторы связи выкрутились через трансляцию адресов. Внутри сети абонент получает внутреннее значение, наружу сотни абонентов выходят под одним общим адресом оператора. Схема с общей трансляцией экономит запас, но у неё есть побочный эффект: соседи по этому адресу влияют на репутацию всех, кто через него работает.</p>
<p>Новые адреса приходят на рынок тремя путями. Первый это возвраты в регистратор от организаций, которым блок стал не нужен. Второй это передача блоков между владельцами по официальной процедуре регистратора, с переоформлением записи и сменой владельца в базе. Третий это подъём уже выданных, но простаивавших диапазонов: их анонсируют заново и вводят в работу. Дата-центры участвуют во всех трёх процессах, поэтому именно у них скапливаются большие рабочие блоки, пригодные под нагрузку.</p>
<div class="tabl"><table><thead><tr><th>Источник адресов</th><th>Как поступает в оборот</th><th>Особенность блока</th></tr></thead><tbody><tr><td>Возврат в регистратор</td><td>Организация отдаёт неиспользуемый блок</td><td>История записи обнуляется, владелец меняется</td></tr><tr><td>Передача между владельцами</td><td>Официальное переоформление в базе регистратора</td><td>Блок сохраняет прежнюю историю анонсов</td></tr><tr><td>Ввод простаивавшего диапазона</td><td>Владелец начинает анонсировать блок заново</td><td>Диапазон долго отсутствовал в маршрутах</td></tr><tr><td>Трансляция у оператора связи</td><td>Один внешний адрес обслуживает сотни абонентов</td><td>Общая репутация на всех абонентов сразу</td></tr></tbody></table></div>
<h2 id="servernyy-adres-i-adres-domashnego-provayder">Серверный адрес и адрес домашнего провайдера: в чём разница</h2>
<p>Вопрос звучит примерно так: «почему мой домашний адрес плохо тянет 20 потоков». Ответ упирается в происхождение адреса и в канал, к которому он привязан на уровне сети.</p>
<p>Адрес домашнего подключения выдаёт оператор связи, живёт он на абонентском тарифе с узким исходящим каналом и часто меняется при переподключении. Значение может достаться из общей трансляции, тогда оно делится с соседями по району. Оборудование на той стороне рассчитано на просмотр видео и почту, поэтому десятки одновременных сессий упираются в возможности абонентского канала.</p>
<p>Серверный адрес живёт в дата-центре. За ним стоит стойка с оборудованием, широкий канал, резервное питание и прямой стык с магистральными операторами. Такой адрес держит сотни одновременных соединений, отдаёт стабильное время отклика и не пропадает при перезагрузке домашнего роутера. Именно поэтому под рабочие задачи берут <a href="https://iprazon.com/proxy/servernye">серверные адреса из дата-центров</a>, а под личный просмотр сайтов хватает обычного подключения.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Адрес домашнего подключения</th><th>Серверный адрес</th></tr></thead><tbody><tr><td>Кто владеет блоком</td><td>Оператор связи с абонентами</td><td>Дата-центр или хостинговая площадка</td></tr><tr><td>Канал</td><td>Абонентский, узкий на отдачу</td><td>Магистральный, широкий в обе стороны</td></tr><tr><td>Одновременные сессии</td><td>Десятки, дальше растёт время отклика</td><td>Сотни, поведение ровное</td></tr><tr><td>Стабильность записи</td><td>Меняется при переподключении</td><td>Держится за оборудованием площадки</td></tr><tr><td>Соседи по адресу</td><td>Абоненты района через общую трансляцию</td><td>Клиенты площадки в пределах блока</td></tr><tr><td>Доступ к нескольким адресам</td><td>Один адрес на подключение</td><td>Пул из тысяч значений по подписке</td></tr></tbody></table></div>
<h2 id="zachem-adresa-ipv4-nuzhny-v-rabochih-zadacha">Зачем адреса IPv4 нужны в рабочих задачах</h2>
<p>Сбор открытых данных стоит первым в списке. Каталог поставщика на 40 000 карточек снимается за несколько часов, и все запросы летят с одного адреса, если посредника нет. Площадка считает частоту обращений по адресу, ловит превышение и отдаёт заглушку с проверкой браузера. С пулом адресов те же 40 000 карточек расходятся по разным точкам выхода, частота на каждую точку падает до безопасной, а прогон доходит до конца.</p>
<p>Вторая задача это несколько рабочих кабинетов. Формулировка от читателя обычно такая: «я веду 8 кабинетов одного бренда и хочу, чтобы каждый жил своей жизнью». Сервис сопоставляет вход по адресу, отпечатку браузера и сессии, поэтому кабинеты разводят по разным адресам и разным профилям браузера. Для команды это ещё и вопрос порядка: у каждого сотрудника своя точка выхода и понятный след в логах.</p>
<p>Третья задача это проверка выдачи. Запрос в поддержку звучал так: «я снимаю позиции по 3000 ключей утром и вечером, к середине списка ответы начинают приходить пустыми». Поисковая система показывает подсказки и порядок сайтов с оглядкой на источник запроса, поэтому съём позиций с одного адреса быстро упирается в квоту сервиса. Разложенные по пулу 3000 ключей проходят целиком, потому что на каждую точку выхода приходится несколько десятков обращений за прогон. Ещё один пласт работ это проверка собственного продукта снаружи: как отвечает сайт для посетителя из другой сети, как отрабатывает баннер, доходит ли письмо. Под весь этот набор задач берут <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 под рабочие задачи</a> на срок работы проекта.</p>
<h2 id="pul-adresov-i-odinochnyy-adres-chto-menyaets">Пул адресов и одиночный адрес: что меняется в работе</h2>
<p>Разница видна на цифрах. Формулировка из переписки с поддержкой: «я держу 20 потоков и упираюсь в лимит площадки уже на третьей минуте». С одним адресом 20 потоков дают 20 одновременных обращений с одной точки, счётчик площадки видит всплеск и включает защиту. Те же 20 потоков через пул расходятся по разным адресам из разных подсетей, и на каждую точку выхода приходится частота, которая не выделяется на общем фоне.</p>
<p>Второй эффект касается устойчивости. Когда одна точка выхода перестаёт отвечать, работа продолжается через остальные, прогон не останавливается на полпути. Третий эффект это разделение задач: сбор данных, кабинеты и проверка выдачи идут через разные точки и не пересекаются между собой.</p>
<div class="tabl"><table><thead><tr><th>Сценарий</th><th>Один адрес</th><th>Пул адресов</th></tr></thead><tbody><tr><td>20 потоков на площадку</td><td>Вся частота на одну точку</td><td>Частота делится между точками выхода</td></tr><tr><td>Отказ точки выхода</td><td>Прогон останавливается</td><td>Работа идёт через остальные адреса</td></tr><tr><td>Несколько кабинетов</td><td>Общий след по адресу</td><td>Каждый кабинет со своей точкой</td></tr><tr><td>Съём позиций</td><td>Быстрое исчерпание квоты</td><td>Запросы распределены по адресам</td></tr><tr><td>Расширение объёма</td><td>Упор в возможности одного канала</td><td>Запас по потокам внутри пакета</td></tr></tbody></table></div>
<p>Потоки при этом планируются от задачи. Для съёма позиций хватает 20 или 40 одновременных запросов, крупный каталог на сотни тысяч карточек разгоняется до нескольких сотен потоков, а тяжёлые ночные прогоны упираются уже в лимит пакета. Ориентир простой: сначала считается нужная скорость обхода в запросах за минуту, затем к ней подбирается число потоков с запасом процентов на 20 сверху. Такой запас закрывает повторные попытки по медленным страницам.</p>
<p>Пул закрывает и вопрос доступа к оборудованию. Собственный парк адресов означает стойки, работу с регистратором и постоянное сопровождение, а <a href="https://iprazon.com/proxy/privatnye">приватный доступ к пулу адресов</a> снимает эту часть работы целиком: список готов к работе сразу после включения пакета.</p>
<h2 id="kak-ustroen-dostup-privyazka-adresa-ili-logi">Как устроен доступ: привязка адреса или логин</h2>
<p>Есть два способа пустить программу в пул, и оба настраиваются в личном кабинете. Первый это привязка собственного адреса. Клиент указывает адрес своей машины или сервера, посредник принимает подключения только с него, и никаких паролей в конфигурации не остаётся. В пакет входит одновременная привязка 2 адресов, менять их можно свободно прямо в настройках, поэтому запрос «у меня динамический адрес, как быть» закрывается сменой значения за минуту.</p>
<p>Второй способ это авторизация логином и паролем. Он удобен, когда рабочее место переезжает: ноутбук в поездке, сервер у подрядчика, запуск из контейнера. Просьба вида «мне удобнее логин и пароль, адрес плавает» решается выбором второго формата выдачи. Список адресов приходит в двух вариантах, ссылкой или файлом.</p>
<pre><code># формат под привязку адреса
203.0.113.24:8080
203.0.113.61:8080

# формат с авторизацией
203.0.113.24:8080:login:pass
203.0.113.61:1080:login:pass</code></pre>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Привязка своего адреса</th><th>Логин и пароль</th></tr></thead><tbody><tr><td>Что настраивается</td><td>Адрес машины в кабинете</td><td>Пара логин и пароль в программе</td></tr><tr><td>Формат списка</td><td>IP:PORT</td><td>IP:PORT:LOGIN:PASS</td></tr><tr><td>Где удобен</td><td>Постоянный сервер, офисная сеть</td><td>Переезды, контейнеры, подрядчики</td></tr><tr><td>Сколько адресов в пакете</td><td>2 привязки со свободной сменой</td><td>Одна учётная запись на пакет</td></tr><tr><td>Потоки</td><td>При двух привязках лимит делится пополам</td><td>Считается в пределах пакета</td></tr></tbody></table></div>
<p>Протоколы доступны на выбор: IPv4 с HTTP и HTTPS, а также SOCKS4 и SOCKS5. Под парсинг, почтовые клиенты и произвольные протоколы удобнее <a href="https://iprazon.com/products/kupit-proxy-socks5">работа по протоколу SOCKS5</a>, поскольку он передаёт трафик любого приложения и умеет разрешать имена на своей стороне. Потоков в обычных пакетах 1000, в корпоративном до 3000, при этом пакеты по потокам не складываются: лимит считается по конкретному пакету.</p>
<h2 id="skolko-adresov-v-pule-i-kak-rabotaet-avtomat">Сколько адресов в пуле и как работает автоматическая ротация</h2>
<p>Типичный вопрос перед покупкой: «сколько адресов я получу и как они меняются». В пуле около 12 000 активных адресов IPv4 и SOCKS5, онлайн в сутки держится примерно на этой же отметке, а список обновляется в режиме реального времени и открыт только клиентам сервиса. География это микс со всего мира, в списке представлены адреса из 200 с лишним стран, выборка по отдельной стране не делается.</p>
<p>Автоматическая ротация внутри пула работает так: очередное соединение уходит через очередной адрес из общего списка, порядок распределяет сама система. Программе достаточно одной строки подключения, ходить в кабинет за новыми значениями и перезапускать процесс не нужно. Для парсинга это даёт ровное распределение частоты по точкам выхода без единой строки кода на стороне клиента.</p>
<p>Отдельно спрашивают про порядок работы с самим списком: «мне выгружать список каждый раз заново или он живёт постоянно». Ссылка на выгрузку остаётся рабочей всё время действия пакета, файл можно скачать заново в любой момент, а изменения состава пула подтягиваются автоматически. Программе видна одна точка входа, вся механика распределения остаётся на стороне сервиса.</p>
<p>Трафик на всех пакетах безлимитный, платят за срок доступа к пулу и за число потоков. Срок выбирается под задачу: короткий прогон закрывается сутками, регулярная работа удобнее на длинном сроке. Пакет включается примерно за 5 минут после оплаты, перед покупкой доступен бесплатный тест до 2 часов под конкретный софт. Полный набор возможностей описан на странице, где можно оформить <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет доступа к пулу адресов IPv4</a> на нужный срок.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kak-ponyat-chto-proksi-podoydut-pod-moi-zada">Как понять, что прокси подойдут под мои задачи?</h3>
<p>Заранее предугадать каждую задачу нельзя, слишком много переменных на стороне софта и площадки. Поэтому перед покупкой доступен бесплатный тест до 2 часов под конкретный запрос: тип прокси выбирается под свою программу, дальше идёт регистрация в кабинете, запрос теста из меню и активация. Этого времени хватает, чтобы прогнать реальную задачу и посмотреть на результат.</p>
<h3 id="chto-delat-esli-moy-domashniy-adres-menyaets">Что делать, если мой домашний адрес меняется каждый день?</h3>
<p>Привязанный адрес меняется без ограничений прямо в настройках кабинета, число смен не лимитировано. Если адрес плавает каждый день, удобнее второй вариант доступа: список в формате IP:PORT:LOGIN:PASS работает с любой точки подключения и правок при переезде не требует.</p>
<h3 id="mne-nuzhen-dostup-s-dvuh-mashin-eto-vozmozhn">Мне нужен доступ с двух машин, это возможно?</h3>
<p>Да, в стоимость пакета входит одновременная привязка 2 адресов. Учтите распределение потоков: при двух привязанных адресах общий лимит пакета делится пополам, по 500 потоков на каждый при пакете на 1000. Пакеты по потокам между собой не складываются, поэтому под тяжёлые прогоны берут корпоративный вариант с лимитом до 3000 потоков.</p>
<h3 id="chem-proverit-chto-adresa-rabotayut">Чем проверить, что адреса работают?</h3>
<p>Для быстрой проверки подходит чекер от Zennolab, у него есть демонстрационная версия. Список загружается в чекер целиком, дальше видно отклик и доступность по каждой строке. Для проверки в браузере достаточно открыть любой сервис определения адреса и сверить показанное значение со строкой из списка.</p>
<p>Дальше по разделу «Основы» логично разобрать <a href="/osnovy/privatnyy-i-obshchiy/">разницу между приватным доступом и общим пулом</a>, затем посмотреть, <a href="/osnovy/podset-i-diapazon/">как площадки смотрят на подсеть и диапазон</a>, и закрыть тему протоколов через <a href="/osnovy/http-https-socks/">разбор HTTP, HTTPS и SOCKS</a>. Когда теория уложилась, переходите к практике: страница про <a href="/pokupka/besplatnyy-test/">бесплатный тест до 2 часов</a> показывает, что успеть проверить за отведённое время и на какие цифры смотреть в отчёте.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/chto-takoe-proxy-ipv4/">https://kupit-proxy-ipv4.ru/osnovy/chto-takoe-proxy-ipv4/</a></p>]]></content:encoded></item>
<item><title>Приватные прокси IPv4 и общий пул: в чём разница для работы</title><link>https://kupit-proxy-ipv4.ru/osnovy/privatnyy-i-obshchiy/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/privatnyy-i-obshchiy/</guid><description>Приватный доступ у серверных прокси означает закрытый вход: список адресов отдаётся только клиенту внутри кабинета, а соединение принимается после проверки…</description><content:encoded><![CDATA[
<p class="vvod">Приватный доступ у серверных прокси означает закрытый вход: список адресов отдаётся только клиенту внутри кабинета, а соединение принимается после проверки привязанного адреса либо пары логина и пароля. Общий пул описывает другую сторону той же услуги: примерно 12 000 серверных адресов, между которыми система сама распределяет соединения, и попасть внутрь со стороны нельзя.</p>
<p>Слова «приватный» и «общий» звучат как противоположности, поэтому их постоянно смешивают в одном вопросе. Ниже разбор по частям: что именно закрывает приватность, как собран пул, чем автоматическая ротация отличается от свободного доступа к порту, кто оказывается соседом по адресу, как привязка и логин отсекают посторонних, что происходит с репутацией адреса в каждом режиме и какой режим брать под парсинг, кабинеты и почту.</p>
<h2 id="privatnyy-dostup-tri-tochki-gde-stoit-prover">Приватный доступ: три точки, где стоит проверка</h2>
<p>Приватность у серверных прокси держится на контроле входа. Первая точка это выдача списка. Строки с адресами живут в личном кабинете, доступ к разделу выдачи открывается вместе с включённым пакетом, и наружу список не публикуется. Ни поиском, ни по прямой ссылке без учётной записи такой перечень не поднимается.</p>
<p>Вторая точка это сам порт. Мы принимаем соединение только после проверки: либо запрос пришёл с адреса, который клиент вписал в настройках, либо в строке подключения передана верная пара логина и пароля. Всё остальное отбивается на входе. Программа, которая наугад постучалась в порт 8000 на нашем адресе, получает отказ авторизации и никакого трафика через посредник не проводит.</p>
<p>Третья точка это учётная запись. Пакет привязан к аккаунту, лимит потоков считается по аккаунту, активность видна в статистике. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, и это часть той же приватности: пул держится в рабочем состоянии для всех, кто в нём работает.</p>
<div class="tabl"><table><thead><tr><th>Точка контроля</th><th>Что проверяется</th><th>Что видит посторонний</th></tr></thead><tbody><tr><td>Раздел выдачи в кабинете</td><td>Активный пакет на учётной записи</td><td>Ничего, список наружу не выходит</td></tr><tr><td>Порт прокси-сервера</td><td>Привязанный адрес либо логин и пароль</td><td>Отказ авторизации на первом же запросе</td></tr><tr><td>Учётная запись</td><td>Лимит потоков и характер нагрузки</td><td>Ничего, статистика внутри аккаунта</td></tr></tbody></table></div>
<p>Отсюда простой вывод: слово «приватный» описывает право на вход, и к тому, сколько адресов лежит за этим входом, оно отношения не имеет. Именно так устроен <a href="https://iprazon.com/proxy/privatnye">приватный доступ к серверному пулу адресов</a>, где закрыт периметр, а ширина выхода остаётся общей на всех клиентов сервиса.</p>
<h2 id="obschiy-pul-okolo-12-000-adresov-i-kak-oni-r">Общий пул: около 12 000 адресов и как они распределяются</h2>
<p>Пул это рабочий набор адресов, который сервис держит в онлайне. У нас в нём порядка 12 000 активных IPv4 и SOCKS5, суточный онлайн держится примерно на той же отметке, состав обновляется в режиме реального времени. География: микс со всего мира, в списке представлены адреса более чем из 200 стран, выборка по отдельной стране не делается.</p>
<p>Список забирается в двух форматах. Первый подходит тем, кто вписал адрес своей машины в настройках, второй несёт авторизацию прямо в строке.</p>
<pre><code># формат под привязанный адрес
198.51.100.42:8000
198.51.100.77:8000

# формат с логином и паролем
198.51.100.42:8000:u82140:k3vqz9
198.51.100.77:8000:u82140:k3vqz9</code></pre>
<p>Забрать перечень можно ссылкой или файлом. Ссылку удобно отдать программе, которая умеет подтягивать список сама, файл проще занести руками в антидетект-браузер или в чекер. Поскольку состав пула обновляется постоянно, сохранённый на диск файл со временем расходится с реальностью, и перед крупным прогоном перечень стоит перечитать.</p>
<p>Распределение соединений мы держим на своей стороне. Программе достаточно одной точки входа, дальше очередное соединение уходит через очередной адрес из общего набора, и порядок задаёт сама система. На стороне клиента для этого не пишется ни строки кода. Разнообразие подсетей внутри такого набора даёт то, ради чего пул и берут: частота обращений к целевой площадке размазывается по множеству точек выхода вместо одной.</p>
<div class="tabl"><table><thead><tr><th>Характеристика пула</th><th>Значение</th><th>Что это даёт в прогоне</th></tr></thead><tbody><tr><td>Активных адресов</td><td>Около 12 000</td><td>Широкий разброс точек выхода</td></tr><tr><td>Обновление состава</td><td>В режиме реального времени</td><td>Неотвечающие строки уходят сами</td></tr><tr><td>География</td><td>Микс со всего мира, 200+ стран</td><td>Разные подсети и разные владельцы блоков</td></tr><tr><td>Протоколы</td><td>IPv4, HTTP, HTTPS, SOCKS4, SOCKS5</td><td>Подходит браузерам, парсерам и почтовым клиентам</td></tr><tr><td>Трафик</td><td>Безлимитный на всех пакетах</td><td>Объём выкачки на выбор пакета не влияет</td></tr><tr><td>Потоки</td><td>1000 на стандартных, до 3000 на корпоративном</td><td>Верхняя граница одновременных соединений</td></tr></tbody></table></div>
<h2 id="rotaciya-vnutri-pula-i-otkrytyy-dostup-k-adr">Ротация внутри пула и открытый доступ к адресу: почему это разные вещи</h2>
<p>Здесь сидит главная путаница. Ротация означает, что ваши соединения последовательно уходят через разные адреса набора. Открытый доступ означал бы, что в тот же порт с тем же адресом свободно стучится кто угодно снаружи. Первое мы делаем автоматически, второе закрыто проверкой авторизации.</p>
<p>Разберём на числах. Программа держит 200 потоков и обходит каталог. При ротации эти 200 соединений расходятся по нескольким сотням адресов набора, площадка видит по несколько запросов с каждой точки, счётчики частоты не срабатывают. Ни один посторонний при этом в наш порт не заходит: у него нет ни привязанного адреса, ни пары логина с паролем, и первый же его запрос обрывается на этапе проверки.</p>
<p>Обратная ситуация выглядит так, как выглядят публичные перечни: адрес и порт лежат в открытом виде, авторизации нет, и через одну точку одновременно идёт трафик неизвестного числа людей с неизвестными задачами. Ротация к этому отношения не имеет совсем, режимы стоят на разных осях.</p>
<div class="tabl"><table><thead><tr><th>Что сравниваем</th><th>Автоматическая ротация в закрытом пуле</th><th>Свободный доступ к порту</th></tr></thead><tbody><tr><td>Кто открывает соединение</td><td>Клиент с активным пакетом</td><td>Любой, кто нашёл строку</td></tr><tr><td>Смена точки выхода</td><td>Система переключает адреса сама</td><td>Точка одна и постоянная</td></tr><tr><td>Проверка на входе</td><td>Привязанный адрес либо логин и пароль</td><td>Проверки нет</td></tr><tr><td>Число одновременных пользователей</td><td>Считается лимитом потоков по пакетам</td><td>Неизвестно</td></tr><tr><td>Состав набора</td><td>Обновляется в реальном времени</td><td>Перечень стареет за часы</td></tr></tbody></table></div>
<h2 id="kto-esche-mozhet-hodit-cherez-tot-zhe-adres">Кто ещё может ходить через тот же адрес</h2>
<p>Вопрос задают почти в каждой переписке перед покупкой, и он справедливый. Ответ такой: через тот же адрес в закрытом пуле ходят другие клиенты сервиса, у каждого из которых оплачен пакет и посчитан лимит потоков. Круг замкнутый и обозримый.</p>
<p>Величины тут понятные. Стандартный пакет даёт до 1000 потоков, корпоративный до 3000, пакеты по потокам между собой не складываются. Значит суммарная нагрузка на пул складывается из известных слагаемых, и когда одна учётная запись начинает выбиваться из общей картины, она ставится на паузу до выяснения. Мы смотрим на это как на гигиену набора: адреса остаются работоспособными, потому что нагрузку на них никто не разгоняет бесконтрольно.</p>
<p>В открытом перечне соседей посчитать нельзя вообще. Одну и ту же строку скачивают тысячи раз, дальше через порт идут прогоны, которые ставят площадку в неудобное положение, и адрес уходит в отказы за считанные часы. Сам порт при этом может отвечать, поэтому проверка на доступность показывает зелёный статус, а целевой сайт возвращает заглушку.</p>
<p>Отдельная деталь касается соседства по подсети. Площадка нередко считает частоту сразу по всему блоку, поэтому важно, чем занят диапазон целиком. В закрытом наборе диапазоны обслуживают клиентов сервиса с посчитанными лимитами, и нагрузка на блок остаётся предсказуемой. Подробный разбор того, как площадки смотрят на соседей по блоку, вынесен в материал про <a href="/osnovy/podset-i-diapazon/">подсеть и диапазон адресов</a>.</p>
<p>Ещё один вопрос из той же серии звучит так: сколько клиентов одновременно работают через одну строку списка. Точной цифры на конкретную минуту не назовёт никто, распределение соединений динамическое и зависит от того, кто сейчас в прогоне. Порядок величины задаётся другим. Набор из 12 000 адресов принимает нагрузку клиентов с потолком в 1000 потоков на стандартном пакете, и система разносит соединения по всему набору сразу, поэтому плотность на отдельную строку получается низкой. Именно это отличает работу через набор такого размера от работы через десяток адресов, купленных отдельным списком.</p>
<h2 id="privyazka-adresa-i-para-logina-s-parolem-kak">Привязка адреса и пара логина с паролем: как отсекаются чужие</h2>
<p>Технически приватность включается одним из двух способов, оба доступны в пакете и переключаются в любой момент.</p>
<p>Первый способ это привязка адреса. В настройках кабинета указывается адрес машины, с которой пойдут запросы, и порт начинает принимать подключения только оттуда. Паролей в конфигурации софта при этом не остаётся совсем: строка подключения короткая, и утечь из неё нечему. В пакет входит одновременная привязка 2 адресов, менять их разрешено свободно прямо в настройках, поэтому переезд на другую машину закрывается правкой одного поля.</p>
<p>Второй способ это логин и пароль в строке. Он удобен там, где адрес рабочего места плавает: ноутбук в дороге, сервер у подрядчика, запуск из контейнера. Программа передаёт пару при каждом соединении, привязка при этом не требуется вовсе.</p>
<pre><code># доступ по привязанному адресу
curl -x http://198.51.100.42:8000 https://ifconfig.me

# доступ по логину и паролю
curl -x http://u82140:k3vqz9@198.51.100.42:8000 https://ifconfig.me

# то же самое по SOCKS5, имя узла разрешается на стороне посредника
curl --socks5-hostname u82140:k3vqz9@198.51.100.42:1080 https://ifconfig.me</code></pre>
<p>Одна цифра влияет на планирование нагрузки. При двух привязанных адресах общий лимит потоков делится между ними пополам: пакет на 1000 даёт по 500 на каждую машину. Когда основной прогон идёт с одного сервера, вторую привязку разумнее держать свободной до момента, когда она понадобится по делу. Порядок смены привязанного адреса и переезд рабочего места разобраны отдельно, на странице про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса в кабинете</a>.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Привязка адреса</th><th>Логин и пароль</th></tr></thead><tbody><tr><td>Что настраивается</td><td>Адрес машины в кабинете</td><td>Пара в строке подключения</td></tr><tr><td>Формат списка</td><td><code>IP:PORT</code></td><td><code>IP:PORT:LOGIN:PASS</code></td></tr><tr><td>Где удобнее</td><td>Постоянный сервер, офисная сеть</td><td>Переезды, контейнеры, облачные сборщики</td></tr><tr><td>Что хранится в софте</td><td>Только адрес и порт</td><td>Адрес, порт, логин, пароль</td></tr><tr><td>Ограничение</td><td>2 привязки, лимит потоков делится пополам</td><td>Пара работает с любой точки подключения</td></tr></tbody></table></div>
<h2 id="otkrytye-perechni-iz-poiska-chem-oni-otlicha">Открытые перечни из поиска: чем они отличаются от закрытого набора</h2>
<p>Сравнение напрашивается само, поэтому разберём его без обиняков. Открытый перечень собирается сканированием сети: программа проходит диапазоны, находит порты, которые отвечают без авторизации, и складывает найденное в таблицу. Никакого владельца у такого набора нет, никто за его состояние не отвечает, обновляется он ровно тогда, когда сканер прошёл в следующий раз.</p>
<p>Практическая картина знакома каждому, кто такой перечень хоть раз запускал в работу. Из тысячи строк отвечает малая часть. Из ответивших половина отдаёт время отклика в секунды. Из оставшихся часть подставляет в запрос служебные поля с исходным адресом, поэтому площадка видит связку и посредника, и клиента. Проверка заголовков, которые уходят через посредник, разобрана в материале про <a href="https://iprazon.com/proxy/anonimnye">прокси с высоким уровнем анонимности</a>.</p>
<p>Закрытый набор устроен ровно наоборот. Оборудование принадлежит сервису, состав обновляется в реальном времени, вход защищён авторизацией, лимиты посчитаны. Отсюда и разница в поведении под нагрузкой: прогон на 40 000 карточек доходит до конца, потому что точки выхода не отваливаются посреди работы.</p>
<div class="tabl"><table><thead><tr><th>Что смотрим</th><th>Открытый перечень из поиска</th><th>Закрытый пул сервиса</th></tr></thead><tbody><tr><td>Происхождение адресов</td><td>Сканирование чужих сетей</td><td>Собственное оборудование сервиса</td></tr><tr><td>Авторизация</td><td>Отсутствует</td><td>Привязка адреса либо логин и пароль</td></tr><tr><td>Доля отвечающих строк</td><td>Малая часть перечня</td><td>Набор держится в онлайне постоянно</td></tr><tr><td>Время отклика</td><td>Разброс от долей секунды до таймаута</td><td>Ровное, серверные каналы</td></tr><tr><td>Служебные заголовки</td><td>Встречаются перечни с подстановкой полей</td><td>Лишние поля к запросу не добавляются</td></tr><tr><td>Кто рядом на адресе</td><td>Неизвестное число посторонних</td><td>Клиенты сервиса с посчитанными лимитами</td></tr></tbody></table></div>
<h2 id="reputaciya-adresa-kak-ona-skladyvaetsya-v-ka">Репутация адреса: как она складывается в каждом режиме</h2>
<p>Репутация адреса это оценка, которую целевая площадка выставляет источнику запросов. Складывается она из нескольких величин: частота обращений с адреса и с его подсети, доля отказов и подозрительных ответов, поведение сессий, принадлежность блока по базам маршрутов. Величины считаются накопительно, поэтому история имеет вес.</p>
<p>В открытом режиме историю адресу пишет неизвестное число людей. Один прогоняет каталог в тысячу потоков, другой перебирает формы, третий держит постоянную нагрузку сутками. Оценка складывается из суммы всего этого, и повлиять на неё со стороны никак нельзя.</p>
<p>В закрытом режиме картина складывается из нагрузки клиентов сервиса, у каждого из которых потоки ограничены пакетом. Мы держим набор в рабочем состоянии постоянным обновлением состава: строки, которые перестали отвечать или начали получать отказы, уходят из выдачи, на их место приходят рабочие. Обновление в реальном времени работает именно на это.</p>
<p>Что здесь зависит от пользователя, стоит перечислить прямо, потому что половина обращений в поддержку закрывается настройками софта. Частота запросов к одному домену, число потоков, паузы между обращениями, заголовки браузера, работа с сессиями и куками. Ровный прогон на 200 потоков с паузами живёт долго. Тот же прогон на 1000 потоков без пауз получит защитную заглушку на любом наборе адресов. Под нагрузочные сценарии сбора данных мы отдельно описали, как настраивают <a href="https://iprazon.com/proxy/dlya-parsinga">прокси под задачи парсинга и обхода каталогов</a>.</p>
<h2 id="kak-vybrat-rezhim-dostupa-pod-parsing-kabine">Как выбрать режим доступа под парсинг, кабинеты и почту</h2>
<p>Три типовые задачи требуют разной настройки, при этом набор адресов остаётся общим. Различие сидит в способе авторизации, протоколе и числе потоков.</p>
<p>Парсинг. Здесь важнее всего разброс точек выхода и запас по потокам. Ставим привязку адреса на рабочий сервер, берём формат <code>IP:PORT</code>, включаем автоматическую ротацию внутри набора и планируем потоки от требуемой скорости обхода. Для программ, которые ходят по произвольным портам и умеют разрешать имена на стороне посредника, берём SOCKS5.</p>
<p>Рабочие кабинеты. Тут нужна ровная сессия и отсутствие лишних следов в заголовках. Потоков требуется немного, десятки. Профили разводятся по антидетект-браузеру, каждый профиль ходит через свою точку выхода, куки и отпечатки хранятся отдельно. Формат с логином и паролем удобнее, потому что профили нередко запускаются с разных машин.</p>
<p>Почта. Клиенты SMTP, IMAP и POP3 работают по TCP на портах 465, 587, 993 и 995, и через HTTP-посредник такой трафик не проходит. Берём SOCKS5, вписываем пару логина и пароля в настройках почтового клиента, потоков держим единицы. Про сокетный вариант подробно написано там, где мы разбираем <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и почтовых клиентов</a>.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Способ доступа</th><th>Протокол</th><th>Ориентир по потокам</th></tr></thead><tbody><tr><td>Обход каталога поставщика</td><td>Привязка адреса сервера</td><td>HTTP, HTTPS или SOCKS5</td><td>От 200 до 1000</td></tr><tr><td>Съём позиций по семантике</td><td>Привязка адреса</td><td>HTTP и HTTPS</td><td>От 20 до 200</td></tr><tr><td>Несколько рабочих кабинетов</td><td>Логин и пароль</td><td>HTTP и HTTPS</td><td>Десятки</td></tr><tr><td>Отправка и приём почты</td><td>Логин и пароль</td><td>SOCKS5</td><td>Единицы</td></tr><tr><td>Проверка своего сайта снаружи</td><td>Любой из двух</td><td>HTTP и HTTPS</td><td>Единицы</td></tr><tr><td>Прогон с нескольких серверов сразу</td><td>Две привязки</td><td>SOCKS5</td><td>До 3000 на корпоративном</td></tr></tbody></table></div>
<p>Отдельно про запуск. Перед покупкой доступен бесплатный тест до 2 часов под конкретный запрос: выбирается тип прокси под свой софт, идёт регистрация в кабинете, запрос теста из меню, указание своего адреса в настройках и активация. После оплаты пакет включается примерно за 5 минут. Полный состав пакета с потоками, привязками и безлимитным трафиком описан там, где оформляется <a href="https://iprazon.com/proxy/privatnye">доступ к приватному пулу IPv4 и SOCKS5</a>, а список сроков и вариантов входа собран на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 под свою задачу</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chto-vhodit-v-proksi-pul-i-komu-otkryt-dostu">Что входит в прокси-пул и кому открыт доступ?</h3>
<p>В пуле около 12 000 активных IPv4 и SOCKS5. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, пакеты по потокам между собой не складываются. Доступ к выдаче открыт только клиентам сервиса: список живёт в кабинете и появляется там вместе с включённым пакетом.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость входит одновременная привязка 2 адресов. Менять привязку разрешено без ограничений прямо в настройках кабинета, поэтому провайдер с меняющимся адресом работе не мешает. Помните про распределение нагрузки: при двух привязанных адресах общее число потоков делится пополам.</p>
<h3 id="proksi-kakih-stran-v-spiske">Прокси каких стран в списке?</h3>
<p>Пул собран как микс со всего мира, адреса приходят из множества стран, счёт идёт на две сотни с лишним. Выборка по отдельной стране не делается. Для сбора открытых данных, работы с кабинетами и проверки собственных сайтов такая схема даёт разброс подсетей без ручной настройки.</p>
<h3 id="kak-ponyat-chto-rezhim-dostupa-podobran-vern">Как понять, что режим доступа подобран верно?</h3>
<p>Заранее предугадать поведение каждой программы и каждой площадки нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. За это время прогоняется реальная задача на своём софте: проверяется авторизация, время отклика, поведение целевого сайта при росте частоты и число потоков, которое софт держит ровно.</p>
<p>Дальше по разделу «Основы» логично разобрать <a href="/osnovy/urovni-anonimnosti/">уровни анонимности прокси</a> и понять, что уходит в заголовках, затем посмотреть <a href="/osnovy/avtorizaciya/">два способа доступа к пулу</a> с разбором привязки и логина, после чего прикинуть, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a> при выбранном числе потоков. Когда режим доступа выбран, переходите к выбору поставщика: страница про то, <a href="/pokupka/gde-pokupat/">где покупать прокси и на что смотреть</a>, собирает признаки, по которым сравнивают сервисы.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/privatnyy-i-obshchiy/">https://kupit-proxy-ipv4.ru/osnovy/privatnyy-i-obshchiy/</a></p>]]></content:encoded></item>
<item><title>Серверные прокси IPv4: откуда берутся адреса дата-центров</title><link>https://kupit-proxy-ipv4.ru/osnovy/servernye-adresa/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/servernye-adresa/</guid><description>Серверный адрес это адрес IPv4, который анонсирует в глобальную таблицу маршрутов дата-центр или хостинговая площадка, а физически он живёт на оборудовании в…</description><content:encoded><![CDATA[
<p class="vvod">Серверный адрес это адрес IPv4, который анонсирует в глобальную таблицу маршрутов дата-центр или хостинговая площадка, а физически он живёт на оборудовании в стойке с широким каналом и резервным питанием. Приходит такой адрес из блока, который площадка получила у регионального регистратора и завела в свою автономную систему, поэтому владелец, границы блока и номер автономной системы читаются публично за одну команду.</p>
<p>Ниже полная цепочка: как блок IPv4 попадает от регистратора в стойку, что такое автономная система и номер AS, по каким записям площадка опознаёт принадлежность адреса, почему серверные адреса отвечают быстро и ровно, как серверный адрес выглядит в логах разных служб и под какие задачи такой набор подходит лучше всего.</p>
<h2 id="chto-stoit-za-servernym-adresom-na-urovne-zh">Что стоит за серверным адресом на уровне железа</h2>
<p>Начнём с материальной части, потому что от неё идут все остальные свойства. За серверным адресом стоит машина в дата-центре: стойка, питание с резервированием, охлаждение, коммутатор доступа и стык с магистральными операторами. Канал до узла считается гигабитами в обе стороны, и отдача по ширине равна приёму.</p>
<p>Дата-центр включён в обмен трафиком сразу с нескольких сторон. Обычная схема выглядит так: два или три транзитных оператора плюс присутствие в точке обмена трафиком, где площадка обменивается маршрутами напрямую с сотнями других сетей. Отсюда короткий путь до популярных площадок и небольшое число переходов на трассировке.</p>
<p>Адрес при этом закреплён за оборудованием площадки постоянно. Он не меняется от перезагрузки, не зависит от абонентского оборудования и не уходит в общую трансляцию вместе с сотнями соседей. Мы держим свой парк именно в таком виде, поэтому <a href="https://iprazon.com/proxy/servernye">серверные прокси IPv4 на собственном оборудовании</a> работают ровно под нагрузкой в сотни одновременных соединений.</p>
<div class="tabl"><table><thead><tr><th>Элемент инфраструктуры</th><th>Что даёт адресу</th></tr></thead><tbody><tr><td>Стойка в дата-центре</td><td>Постоянное присутствие узла в сети</td></tr><tr><td>Транзитные операторы, два и более</td><td>Запасной маршрут при отказе одного стыка</td></tr><tr><td>Порт в точке обмена трафиком</td><td>Короткий путь до крупных сетей</td></tr><tr><td>Канал в гигабитах</td><td>Сотни параллельных сессий без просадки</td></tr><tr><td>Резервное питание и охлаждение</td><td>Отсутствие внезапных пауз в обслуживании</td></tr><tr><td>Собственная автономная система</td><td>Прямое управление анонсом блока</td></tr></tbody></table></div>
<h2 id="put-bloka-ipv4-ot-registratora-do-porta-v-st">Путь блока IPv4: от регистратора до порта в стойке</h2>
<p>Адреса раздаются иерархией из трёх уровней. Наверху стоит IANA, она распределяет крупные блоки между пятью региональными регистраторами. Регистраторы известны по названиям: RIPE NCC обслуживает Европу и Ближний Восток, ARIN Северную Америку, APNIC Азию и Тихоокеанский регион, LACNIC Латинскую Америку, AFRINIC Африку.</p>
<p>Второй уровень это участники регистратора, к ним относятся операторы связи, хостинговые площадки и крупные организации со своей сетью. Участник получает блок и вносит его в базу регистратора. Минимальный блок, который принято анонсировать наружу, это /24 на 256 адресов: маршруты мельче большинство сетей в глобальную таблицу не принимает.</p>
<p>Третий уровень это назначение внутри блока. Площадка делит полученный диапазон на части и расписывает их по своим задачам и клиентам, отмечая назначение отдельными записями. В базе такая запись отличается статусом: у выданного регистратором блока стоит <code>ALLOCATED PA</code>, у назначенного внутри него участка <code>ASSIGNED PA</code>.</p>
<p>Свободных блоков у регистраторов давно нет, поэтому новые адреса приходят на рынок тремя путями. Первый это возврат неиспользуемого блока обратно в регистратор с последующей выдачей по очереди ожидания. Второй это передача блока между участниками с переоформлением записи в базе. Третий это ввод в работу диапазона, который числился за владельцем, но долго не анонсировался. Дата-центры участвуют во всех трёх процессах, отсюда у них и скапливаются крупные рабочие диапазоны.</p>
<div class="tabl"><table><thead><tr><th>Уровень</th><th>Кто действует</th><th>Что появляется в базе</th></tr></thead><tbody><tr><td>Глобальный</td><td>IANA</td><td>Крупный блок закреплён за регистратором</td></tr><tr><td>Региональный</td><td>RIPE NCC, ARIN, APNIC, LACNIC, AFRINIC</td><td>Запись о выдаче блока участнику</td></tr><tr><td>Участник регистратора</td><td>Дата-центр, хостинг, оператор связи</td><td>Границы диапазона, название сети, контакты</td></tr><tr><td>Внутри диапазона</td><td>Тот же участник</td><td>Назначение участка под конкретную задачу</td></tr></tbody></table></div>
<p>Для набора адресов, который мы держим в работе, эта цепочка означает вполне практические вещи. Мы смотрим на происхождение диапазона, на его границы и на то, чем занят блок целиком, потому что от соседей по блоку зависит поведение целевых площадок. Наш пул собран из множества диапазонов разных владельцев, и география получается как микс со всего мира с адресами более чем из 200 стран. Разброс по автономным системам и по диапазонам мы считаем рабочим свойством набора: обращения расходятся по независимым блокам, и частота на каждый отдельный диапазон остаётся фоновой.</p>
<h2 id="avtonomnaya-sistema-i-nomer-as-kak-blok-popa">Автономная система и номер AS: как блок попадает в маршруты</h2>
<p>Одной записи в базе для работы мало, блок нужно анонсировать. Здесь появляется автономная система: набор сетей под единым управлением с общей политикой маршрутизации. У каждой такой системы есть номер вида AS64512, выдаёт его тот же региональный регистратор.</p>
<p>Анонс идёт по протоколу BGP. Площадка сообщает соседним сетям: диапазон 192.0.2.0/24 доступен через AS64512. Соседи передают маршрут дальше, и через несколько минут запись расходится по глобальной таблице. Обратный трафик к любому адресу из этого диапазона начинает приходить на оборудование площадки.</p>
<p>Рядом с анонсом живут две проверочные записи. Объект route в базе регистратора связывает диапазон с номером автономной системы. Подпись ROA в системе RPKI закрепляет эту же связку криптографически, и крупные операторы отбрасывают анонсы, которые с подписью расходятся. Обе записи публичны, поэтому пара <code>диапазон плюс номер AS</code> проверяется кем угодно за пару секунд.</p>
<p>Номер автономной системы говорит и о характере владельца. Сети операторов связи с абонентами, транзитные магистральные сети и хостинговые площадки различаются по количеству анонсируемых диапазонов, по составу соседей и по типу трафика. Серверные адреса живут в автономных системах хостингового профиля, и это открытая величина, которая читается по публичным базам.</p>
<h2 id="kak-ploschadka-opredelyaet-prinadlezhnost-ad">Как площадка определяет принадлежность адреса</h2>
<p>Проверка занимает несколько команд, и полезно уметь делать её самому: половина вопросов по поведению целевого сайта закрывается ровно здесь. Мы проверяем адреса теми же инструментами, что доступны любому пользователю.</p>
<pre><code># кто владеет диапазоном и где его границы
whois 192.0.2.55 | grep -iE "inetnum|netname|descr|country|org|status|mnt-by"

# номер автономной системы для адреса
whois -h whois.cymru.com " -v 192.0.2.55"

# то же самое через DNS, без установки клиента whois
dig +short 55.2.0.192.origin.asn.cymru.com TXT

# обратная запись имени
dig +short -x 192.0.2.55</code></pre>
<p>Ответ whois разбирается по полям. <code>inetnum</code> показывает границы диапазона, <code>netname</code> короткое имя сети, <code>descr</code> описание владельца, <code>country</code> страну регистрации записи, <code>org</code> организацию, <code>status</code> тип выдачи, <code>mnt-by</code> того, кто ведёт запись. Крупные площадки берут отсюда владельца и сопоставляют его со своими списками.</p>
<p>Второй источник это базы соответствия адресов и номеров автономных систем. Они собираются из таблицы маршрутов и обновляются постоянно, поэтому по любому адресу за миллисекунды отдаётся номер AS, размер диапазона и название владельца. Именно такая база стоит в основе того, как сайт классифицирует источник запроса ещё до того, как отработает его собственная логика.</p>
<p>Третий источник это обратная запись DNS. У хостинговых диапазонов имя обычно собрано по шаблону с номером узла и доменом площадки. Запись косвенная, её вес меньше, но в связке с остальным она добавляет картине определённости.</p>
<div class="tabl"><table><thead><tr><th>Источник</th><th>Что отдаёт</th><th>Как быстро обновляется</th></tr></thead><tbody><tr><td>whois регистратора</td><td>Границы блока, владельца, статус выдачи</td><td>При правке записи владельцем</td></tr><tr><td>Объект route и подпись ROA</td><td>Связку диапазона с номером AS</td><td>При изменении анонса</td></tr><tr><td>База соответствия адресов и AS</td><td>Номер AS, размер блока, имя сети</td><td>Постоянно, из таблицы маршрутов</td></tr><tr><td>Обратная запись DNS</td><td>Имя узла по шаблону площадки</td><td>При настройке зоны площадкой</td></tr><tr><td>Собственная статистика сайта</td><td>Историю обращений с блока</td><td>В реальном времени</td></tr></tbody></table></div>
<p>Здесь же становится понятно, почему счётчики частоты нередко работают по целому блоку. Границы диапазона известны публично, поэтому площадке ничего не стоит агрегировать обращения по всему <code>/24</code> сразу. Разбор этой механики вынесен в отдельный материал про <a href="/osnovy/podset-i-diapazon/">подсеть и диапазон адресов</a>.</p>
<h2 id="pochemu-servernye-adresa-otvechayut-bystro-i">Почему серверные адреса отвечают быстро и ровно</h2>
<p>Скорость складывается из трёх величин: длины маршрута, ширины канала и загруженности оборудования на пути. У серверного адреса все три работают в плюс.</p>
<p>Маршрут короткий, потому что дата-центр стыкуется с магистральными операторами напрямую и присутствует в точках обмена трафиком. Трассировка до крупной площадки укладывается в 8 или 12 переходов. Канал широкий и симметричный: отдача равна приёму, поэтому сотня параллельных запросов не упирается в узкое горлышко на исходящем направлении.</p>
<p>Ровность важнее пиковой скорости, и это стоит проговорить отдельно. Прогону нужен предсказуемый отклик от запроса к запросу, потому что программа планирует потоки по среднему времени ответа. Разброс времени отклика, который в сетях называют джиттером, на серверном канале держится в единицах миллисекунд, и таймауты в настройках софта выставляются без запаса на случайные провалы.</p>
<pre><code># замер по фазам соединения через посредник
curl -o /dev/null -s -w "dns:%{time_namelookup} connect:%{time_connect} ttfb:%{time_starttransfer} total:%{time_total}\n" \
  -x http://192.0.2.55:8000 https://example.com/catalog</code></pre>
<p>Смотрим на две величины из вывода, они разделяют ответственность между сетью и целевым сайтом. Поле <code>time_connect</code> показывает установку соединения и отражает сетевую задержку до посредника. Поле <code>time_starttransfer</code> показывает время до первого байта ответа и включает работу целевого сайта. Когда первое стабильно, а второе гуляет, дело в целевой площадке, и настройки посредника тут ни при чём. Порядок правильного замера с прогревом соединений разобран в материале про <a href="/proverka/skorost-i-otklik/">скорость и время отклика</a>.</p>
<div class="tabl"><table><thead><tr><th>Величина</th><th>Что показывает</th><th>Ориентир на серверном канале</th></tr></thead><tbody><tr><td>Число переходов до площадки</td><td>Длину маршрута</td><td>Обычно от 8 до 12</td></tr><tr><td>Время установки соединения</td><td>Сетевую задержку до посредника</td><td>Десятки миллисекунд</td></tr><tr><td>Разброс отклика между запросами</td><td>Стабильность канала</td><td>Единицы миллисекунд</td></tr><tr><td>Параллельные сессии на узел</td><td>Запас по одновременным соединениям</td><td>Сотни без просадки</td></tr><tr><td>Доступность узла</td><td>Присутствие адреса в сети</td><td>Круглосуточное</td></tr></tbody></table></div>
<h2 id="gde-servernyy-adres-vidno-v-logah">Где серверный адрес видно в логах</h2>
<p>Полезно понимать, какую именно строку увидит принимающая сторона, потому что от этого зависит разбор любой нештатной ситуации.</p>
<p>В журнале веб-сервера адрес стоит первым полем строки доступа. Формат <code>combined</code> у nginx и Apache пишет туда переменную remote_addr, дальше идут время, метод, путь, код ответа и заголовок <code>User-Agent</code>. Когда запрос прошёл через посредник, сюда попадает адрес посредника, и исходный адрес клиента до сервера не доходит.</p>
<pre><code>192.0.2.55 - - [12/Feb:04:18:31 +0000] "GET /catalog/page/7 HTTP/1.1" 200 18422 "-" "Mozilla/5.0"</code></pre>
<p>В почтовом обмене адрес попадает в служебные заголовки письма. Принимающий сервер добавляет строку <code>Received</code> с адресом того, кто установил соединение, и эта строка остаётся в письме навсегда. Отсюда практический момент для тех, кто настраивает отправку через посредник: адрес в первой строке <code>Received</code> берётся именно с точки выхода.</p>
<pre><code>Received: from mail.example.net (unknown [192.0.2.55])
        by mx.example.org with ESMTPS id 4a91c2b0</code></pre>
<p>Отдельная тема это заголовки, которые добавляет сам посредник. Простые HTTP-посредники умеют вписывать поля <code>X-Forwarded-For</code> и <code>Via</code> с исходным адресом клиента, и тогда принимающая сторона видит обе точки сразу. Мы лишних полей к запросу не добавляем, что легко проверить запросом к сервису эхо-заголовков.</p>
<pre><code>curl -s -x http://192.0.2.55:8000 https://httpbin.org/headers</code></pre>
<div class="tabl"><table><thead><tr><th>Служба</th><th>Где видно адрес</th><th>Что записывается</th></tr></thead><tbody><tr><td>Веб-сервер</td><td>Первое поле строки доступа</td><td>Адрес точки выхода</td></tr><tr><td>Почтовый сервер</td><td>Заголовок <code>Received</code> в письме</td><td>Адрес установившего соединение</td></tr><tr><td>Прикладной сервер API</td><td>Поле в журнале запросов</td><td>Адрес точки выхода</td></tr><tr><td>Служебные поля HTTP</td><td><code>X-Forwarded-For</code>, <code>Via</code></td><td>Добавляются простыми посредниками</td></tr><tr><td>Журнал SSH и прочих служб</td><td>Строка подключения</td><td>Адрес источника соединения</td></tr></tbody></table></div>
<h2 id="kak-ploschadki-otnosyatsya-k-servernym-diapa">Как площадки относятся к серверным диапазонам</h2>
<p>Принадлежность адреса к хостинговой автономной системе площадка определяет за миллисекунды, это открытая величина. Дальше в дело идёт поведение, и оно весит больше происхождения.</p>
<p>Что реально смотрит принимающая сторона: частоту обращений с адреса и с его диапазона, полноту и согласованность заголовков браузера, работу с куками и сессией, порядок обхода страниц, скорость перехода между разделами. Ровный прогон с человекоподобным темпом и корректным набором заголовков проходит спокойно. Прогон в тысячу потоков без пауз и с пустым <code>User-Agent</code> заметен на любом источнике.</p>
<p>Отсюда рабочая настройка складывается из трёх частей. Первая это разброс: наш набор из 12 000 адресов даёт множество точек выхода, и частота на каждую падает до фоновой. Вторая это темп: паузы между запросами и разумное число потоков под конкретный домен. Третья это оформление запроса: полный набор заголовков, поддержка сжатия, корректная работа с редиректами и куками.</p>
<p>Со своей стороны мы держим набор в рабочем состоянии постоянным обновлением состава. Список идёт в реальном времени, строки с ухудшившимся откликом уходят из выдачи, на их место встают рабочие. Пользователю остаётся вторая половина картины: темп обращений, потоки и оформление запроса. Ровный прогон на 200 потоков с паузами по домену живёт долго на любом наборе адресов, и мы советуем начинать именно с такой настройки, а цифры подбирать по итогам тестового прогона на своих целевых доменах.</p>
<div class="tabl"><table><thead><tr><th>Что оценивает площадка</th><th>На что смотрит</th><th>Чем управляет пользователь</th></tr></thead><tbody><tr><td>Происхождение адреса</td><td>Номер AS и запись whois</td><td>Выбором типа прокси</td></tr><tr><td>Частота с адреса</td><td>Число запросов в единицу времени</td><td>Числом потоков и паузами</td></tr><tr><td>Частота с диапазона</td><td>Суммарные обращения по блоку</td><td>Разбросом нагрузки по набору</td></tr><tr><td>Заголовки запроса</td><td>Полноту и согласованность полей</td><td>Настройками софта и профиля</td></tr><tr><td>Сессия</td><td>Куки, порядок переходов, редиректы</td><td>Логикой обхода</td></tr></tbody></table></div>
<p>Под нагрузочные сценарии сбора данных мы собрали отдельную страницу, где описаны потоки, темп и формат выдачи: там разобрано, как берут <a href="https://iprazon.com/proxy/dlya-parsinga">прокси под парсинг каталогов и выдачи</a> и на какие цифры ориентируются при планировании прогона.</p>
<h2 id="pod-kakie-zadachi-servernyy-nabor-podhodit-l">Под какие задачи серверный набор подходит лучше всего</h2>
<p>Сильные стороны серверного адреса это ширина канала, стабильность отклика и круглосуточная доступность. Задачи, где эти три свойства важны, закрываются им лучше всего.</p>
<p>Массовый сбор открытых данных стоит первым. Каталог поставщика на 40 000 карточек, прайсы, остатки, характеристики: тут нужны сотни параллельных соединений и ровный отклик на протяжении многих часов. Трафик на всех пакетах безлимитный, поэтому объём выкачки на планирование не влияет и считать гигабайты незачем. Тем, у кого прогоны идут круглосуточно, подходят <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a>.</p>
<p>Съём позиций и проверка выдачи вторая задача. Здесь объём меньше, зато важна равномерность: 3000 ключей проходят целиком, когда обращения расходятся по множеству точек выхода. Третья задача это работа с несколькими рабочими кабинетами, где каждому профилю нужна своя точка и ровная сессия.</p>
<p>Четвёртая задача это почта и произвольные протоколы. Клиенты SMTP, IMAP и POP3 ходят по TCP на портах 465, 587, 993 и 995, поэтому здесь берут сокетный вариант: <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для почты и произвольных портов</a> проводят трафик любого приложения и умеют разрешать имена на своей стороне.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Что берём от серверного адреса</th><th>Ориентир по потокам</th></tr></thead><tbody><tr><td>Обход каталога поставщика</td><td>Канал и ровный отклик под нагрузкой</td><td>От 200 до 1000</td></tr><tr><td>Съём позиций по семантике</td><td>Разброс точек выхода</td><td>От 20 до 200</td></tr><tr><td>Мониторинг остатков и прайсов</td><td>Круглосуточную доступность</td><td>От 50 до 300</td></tr><tr><td>Несколько рабочих кабинетов</td><td>Стабильность адреса в сессии</td><td>Десятки</td></tr><tr><td>Отправка и приём почты</td><td>Поддержку произвольных портов</td><td>Единицы</td></tr><tr><td>Прогон с нескольких серверов</td><td>Запас по потокам на корпоративном пакете</td><td>До 3000</td></tr></tbody></table></div>
<p>Практический порядок запуска короткий. Перед покупкой доступен бесплатный тест до 2 часов под конкретный запрос: выбирается тип прокси под свой софт, дальше регистрация в кабинете, запрос теста из меню, указание своего адреса в настройках и активация. После оплаты пакет включается примерно за 5 минут, список забирается ссылкой или файлом в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Состав набора, сроки доступа и лимиты потоков собраны там, где оформляется <a href="https://iprazon.com/proxy/servernye">серверный пул IPv4 и SOCKS5</a>, а разбор пакетов по срокам лежит на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 на нужный срок</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-adresov-derzhitsya-v-servernom-pule">Сколько адресов держится в серверном пуле?</h3>
<p>В пуле около 12 000 активных IPv4 и SOCKS5, суточный онлайн держится примерно на этой же отметке. Список обновляется в режиме реального времени, поэтому строки, которые перестали отвечать, уходят из выдачи сами. Доступ к перечню открыт только клиентам сервиса.</p>
<h3 id="proksi-kakih-stran-est-v-spiske">Прокси каких стран есть в списке?</h3>
<p>Набор собран как микс со всего мира, адреса приходят более чем из 200 стран, выборка по отдельной стране не делается. Для сбора открытых данных, проверки выдачи и работы с кабинетами такая схема даёт разброс автономных систем и диапазонов без ручной настройки.</p>
<h3 id="kakoy-protokol-vybrat-dlya-servernogo-adresa">Какой протокол выбрать для серверного адреса?</h3>
<p>В пакете доступны IPv4 с HTTP и HTTPS, а также SOCKS4 и SOCKS5. Мы рекомендуем SOCKS5: он проводит трафик любого приложения, работает с произвольными портами и разрешает имена узлов на стороне посредника. Адреса при этом одни и те же, меняется только строка подключения.</p>
<h3 id="chem-proverit-adresa-iz-spiska">Чем проверить адреса из списка?</h3>
<p>Для массовой проверки подходит чекер от Zennolab, у него есть демонстрационная версия. Список загружается целиком, дальше видно отвечающие строки, время отклика и тип прокси. Для точечной проверки хватает запроса через <code>curl</code> на сервис определения адреса и сверки значения со строкой из выдачи.</p>
<p>Дальше по разделу «Основы» стоит посмотреть базовый разбор того, <a href="/osnovy/chto-takoe-proxy-ipv4/">что такое прокси IPv4 и как он работает</a>, затем понять разницу между <a href="/osnovy/privatnyy-i-obshchiy/">приватным доступом и общим пулом</a>, и отдельно изучить, <a href="/osnovy/chto-vidit-sayt/">что сайт видит о вас при работе через прокси</a>. Когда с теорией закончено, переходите к настройке: страница про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a> показывает, куда вписывать адрес и порт в конкретном софте.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/servernye-adresa/">https://kupit-proxy-ipv4.ru/osnovy/servernye-adresa/</a></p>]]></content:encoded></item>
<item><title>Подсеть и диапазон IPv4: как читать запись 203.0.113.0/24 и почему площадка смотрит на соседей</title><link>https://kupit-proxy-ipv4.ru/osnovy/podset-i-diapazon/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/podset-i-diapazon/</guid><description>Подсеть это группа идущих подряд IPv4-адресов с общим началом, диапазон это её границы от первого адреса до последнего. Запись 203.0.113.0/24 описывает такую…</description><content:encoded><![CDATA[
<p class="vvod">Подсеть это группа идущих подряд IPv4-адресов с общим началом, диапазон это её границы от первого адреса до последнего. Запись <code>203.0.113.0/24</code> описывает такую группу целиком: слева базовый адрес, справа длина префикса, и вместе они означают, что у всех адресов внутри группы совпадают первые 24 бита.</p>
<p>Сайт, который принимает запрос, читает адрес именно в таком виде. За одной строкой из четырёх чисел площадка видит целый блок и помнит, как вёл себя этот блок в предыдущие часы. Отсюда простое следствие: приём запроса зависит от поведения соседей по диапазону, и работа с прокси начинается с умения прочитать префикс.</p>
<p>Ниже мы разбираем арифметику масок, счёт адресов в /24, /22 и /19, логику антифрода вокруг подсетей, проверку принадлежности адреса блоку через whois и практику раскладки нагрузки по диапазонам на крупном прогоне. Тему берём с азов, поэтому предварительных знаний о маршрутизации не потребуется.</p>
<h2 id="zapis-203-0-113-0-24-bazovyy-adres-i-dlina-p">Запись 203.0.113.0/24: базовый адрес и длина префикса</h2>
<p>IPv4-адрес это 32 бита, записанные четырьмя октетами по 8 бит: <code>203.0.113.45</code>. Каждый октет принимает значения от 0 до 255, поэтому старший октет <code>203</code> занимает биты с первого по восьмой, следующий <code>0</code> с девятого по шестнадцатый и так далее. Косая черта с числом после адреса называется префиксной записью CIDR.</p>
<p>Число после косой черты говорит, сколько старших бит закреплено за сетью. В <code>203.0.113.0/24</code> закреплены первые 24 бита, то есть три октета <code>203.0.113</code>. Свободными остаются последние 8 бит, и меняться может только последний октет. Получается ровно 256 комбинаций: от <code>203.0.113.0</code> до <code>203.0.113.255</code>.</p>
<p>Первый адрес блока называется адресом сети, последний широковещательным. В маршрутизируемых блоках провайдера эти два обычно заняты под служебные задачи, поэтому под рабочие узлы остаётся 254 позиции. Для чтения списков прокси эта деталь второстепенна, при разборе конфигурации маршрутизатора она становится обязательной.</p>
<p>Базовый адрес всегда кратен размеру блока. Запись <code>203.0.113.7/24</code> встречается в конфигурациях интерфейсов и читается как «адрес <code>203.0.113.7</code> внутри блока <code>203.0.113.0/24</code>». В таблицах маршрутов и в ответах whois вы увидите ровный вариант с нулём в конце.</p>
<pre><code># три способа записать одно и то же
203.0.113.0/24
203.0.113.0 255.255.255.0
203.0.113.0 - 203.0.113.255</code></pre>
<h2 id="maska-podseti-kak-iz-prefiksa-poluchaetsya-c">Маска подсети: как из префикса получается число адресов</h2>
<p>Маска это тот же префикс, записанный четырьмя октетами. Единицы слева отмечают биты сети, нули справа биты узла. Префикс /24 превращается в <code>255.255.255.0</code>, префикс /22 в <code>255.255.252.0</code>, префикс /19 в <code>255.255.224.0</code>. Третий октет маски в этих примерах меняется потому, что граница сети проходит внутри него.</p>
<p>Счёт адресов держится на одной формуле: свободных бит остаётся <code>32 минус префикс</code>, а число адресов равно двойке в этой степени. Для /24 свободны 8 бит и получается 256 адресов. Для /22 свободны 10 бит и получается 1024 адреса. Для /19 свободны 13 бит и получается 8192 адреса. Чем меньше число после косой черты, тем крупнее блок.</p>
<div class="tabl"><table><thead><tr><th>Префикс</th><th>Маска</th><th>Адресов в блоке</th><th>Пример диапазона</th></tr></thead><tbody><tr><td>/28</td><td>255.255.255.240</td><td>16</td><td>203.0.113.16 - 203.0.113.31</td></tr><tr><td>/26</td><td>255.255.255.192</td><td>64</td><td>203.0.113.64 - 203.0.113.127</td></tr><tr><td>/24</td><td>255.255.255.0</td><td>256</td><td>203.0.113.0 - 203.0.113.255</td></tr><tr><td>/23</td><td>255.255.254.0</td><td>512</td><td>203.0.112.0 - 203.0.113.255</td></tr><tr><td>/22</td><td>255.255.252.0</td><td>1024</td><td>203.0.112.0 - 203.0.115.255</td></tr><tr><td>/20</td><td>255.255.240.0</td><td>4096</td><td>203.0.112.0 - 203.0.127.255</td></tr><tr><td>/19</td><td>255.255.224.0</td><td>8192</td><td>203.0.96.0 - 203.0.127.255</td></tr></tbody></table></div>
<p>Обратите внимание на границы в правой колонке. Блок <code>/22</code> начинается с <code>203.0.112.0</code> потому, что третий октет должен делиться на 4: подходят 112, 116, 120, 124. Блок <code>/19</code> начинается с <code>203.0.96.0</code>, третий октет кратен 32. Правило кратности объясняет, почему провайдер выдаёт диапазоны кусками фиксированного размера и не режет их произвольно.</p>
<p>Ещё одна практическая деталь: /22 это ровно четыре соседних /24, а /19 это тридцать два /24. Держим это соответствие в голове, и любой ответ whois читается за секунду. Крупный блок распадается на мелкие по степеням двойки, обратное тоже верно.</p>
<p>Пересчёт в обе стороны пригодится при разборе списка прокси. Мы смотрим на третий октет и сразу понимаем, сколько независимых счётчиков стоит за нашей выборкой. Двести строк с двадцатью разными значениями третьего октета это двадцать блоков по десять адресов, и картина по нагрузке считается в уме.</p>
<h2 id="chto-ploschadka-nazyvaet-podsetyu">Что площадка называет подсетью</h2>
<p>Технически подсетью считается любой блок с любым префиксом. Практически системы приёма трафика работают с несколькими устоявшимися уровнями, и знать их полезно каждому, кто настраивает прогон.</p>
<p>Первый уровень это /24. Он выступает единицей учёта у большинства антифрод-систем: счётчики запросов, репутационные отметки и временные ограничения чаще всего вешаются именно на третий октет. Второй уровень это блок из whois, то есть тот диапазон, который зарегистрирован за конкретным владельцем. Он бывает шире /24: /22, /21, /19 и крупнее. Третий уровень это автономная система, ASN: номер, под которым сеть объявляет свои маршруты соседям.</p>
<div class="tabl"><table><thead><tr><th>Уровень</th><th>Что это</th><th>Где виден</th><th>Как используется площадкой</th></tr></thead><tbody><tr><td>/24</td><td>Блок из 256 адресов</td><td>Третий октет адреса</td><td>Счётчики частоты, групповые ограничения</td></tr><tr><td>Блок whois</td><td>Диапазон владельца</td><td>Поля inetnum и NetRange</td><td>Отметка о происхождении сети</td></tr><tr><td>Маршрут BGP</td><td>Анонсируемый префикс</td><td>Поле route и route6</td><td>Определение оператора связи</td></tr><tr><td>ASN</td><td>Номер автономной системы</td><td>Поле origin и OriginAS</td><td>Категория сети целиком</td></tr></tbody></table></div>
<p>Мы держим все три уровня в поле зрения, когда собираем пул: адреса приходят от разных операторов, из разных блоков whois и под разными номерами автономных систем. Такая раскладка даёт запас там, где счётчики площадки работают на уровне /24, и там, где они поднимаются до уровня оператора.</p>
<h2 id="pochemu-povedenie-sosedey-vliyaet-na-priem-z">Почему поведение соседей влияет на приём запросов</h2>
<p>Логика фильтра простая. Считать статистику по каждому отдельному адресу дорого и бессмысленно: адресов миллиарды, а поведение меняется каждый час. Считать по блокам дёшево и информативно, потому что блок принадлежит одному владельцу и внутри него активность обычно однородная.</p>
<p>Отсюда механика ограничений. Площадка складывает запросы всех адресов одного /24 в общий счётчик. Пока сумма держится в норме, ответы идут обычные. Как только счётчик переваливает порог, включаются меры: сначала замедление, потом проверка человеком в виде интерактивной страницы, потом код 429 с заголовком <code>Retry-After</code>, а при устойчивом превышении код 403 на весь блок.</p>
<p>Практический вывод отсюда следующий: сорок адресов из одного /24, которые молотят один целевой домен параллельно, для площадки выглядят как один источник с сорокакратной нагрузкой. Двадцать адресов из двадцати разных /24 при том же суммарном темпе распределяются по двадцати независимым счётчикам, и каждый остаётся глубоко внутри нормы.</p>
<pre><code>HTTP/1.1 429 Too Many Requests
Retry-After: 120
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0</code></pre>
<p>Второй механизм это репутация. Крупные сети ведут списки блоков с историей нежелательной активности. Отметка ставится на диапазон, поэтому адрес, поднятый в блоке с плохой историей, получает повышенное внимание с первого же запроса. Разбор кодов ответа и порядок действий при отказе описаны отдельно, в материале про <a href="/osnovy/chto-vidit-sayt/">что сайт видит о посетителе</a>.</p>
<p>Третий механизм это привязка сессии. Если авторизованная сессия открылась с адреса <code>198.51.100.20</code>, а следующий запрос той же сессии пришёл с <code>203.0.113.90</code>, площадка видит смену подсети посреди работы и обычно требует повторного подтверждения. Внутри одного /24 такой переход проходит спокойнее, потому что блок остаётся прежним.</p>
<h2 id="kak-proverit-prinadlezhnost-adresa-bloku-che">Как проверить принадлежность адреса блоку через whois</h2>
<p>Проверка занимает несколько секунд и отвечает сразу на три вопроса: какому диапазону принадлежит адрес, кто владелец блока и под каким номером автономной системы этот блок объявлен. Утилита <code>whois</code> есть в любом дистрибутиве Linux, в macOS она встроена, в Windows её заменяет одноимённая программа из набора Sysinternals.</p>
<pre><code># базовый запрос
whois 203.0.113.45

# только нужные поля, RIPE и APNIC
whois 203.0.113.45 | grep -iE "inetnum|netname|route|origin|country|descr"

# то же через публичный сервис whois по HTTP
curl -s https://rdap.db.ripe.net/ip/203.0.113.45 | head -40</code></pre>
<p>В ответе RIPE и APNIC диапазон лежит в поле <code>inetnum</code>, у ARIN то же самое называется <code>NetRange</code> и <code>CIDR</code>. Поле <code>netname</code> даёт короткое имя блока, <code>descr</code> описание владельца, <code>origin</code> номер автономной системы. Ответ приходит в виде набора строк, и читать его удобнее через фильтр, показанный выше.</p>
<div class="tabl"><table><thead><tr><th>Поле ответа</th><th>Реестр</th><th>Что показывает</th></tr></thead><tbody><tr><td><code>inetnum</code></td><td>RIPE, APNIC, AFRINIC</td><td>Границы диапазона от и до</td></tr><tr><td><code>NetRange</code> и <code>CIDR</code></td><td>ARIN</td><td>То же самое в двух формах записи</td></tr><tr><td><code>netname</code></td><td>Все реестры</td><td>Короткое имя блока</td></tr><tr><td><code>descr</code> и <code>OrgName</code></td><td>RIPE и ARIN</td><td>Владелец диапазона</td></tr><tr><td><code>origin</code> и <code>OriginAS</code></td><td>Все реестры</td><td>Номер автономной системы</td></tr><tr><td><code>route</code></td><td>RIPE</td><td>Префикс, объявленный в маршрутизации</td></tr></tbody></table></div>
<p>Дальше сравниваем два адреса из своего списка. Совпали <code>inetnum</code> и <code>origin</code>, значит адреса живут в одном блоке и для площадки они соседи. Разошёлся третий октет при совпадающем <code>inetnum</code>, значит блоки /24 разные, а владелец общий: часть счётчиков разведена, часть остаётся общей. Разошёлся <code>origin</code>, значит перед нами полностью независимые сети.</p>
<p>Мы проверяем адреса из своей выдачи тем же порядком, когда клиент просит подтвердить разброс блоков. Массовую проверку удобно делать циклом по файлу со списком. Тридцати строк хватает, чтобы увидеть картину по всему пулу, и повторять её каждый раз не нужно: пул обновляется, состав меняется, и пропорция разных блоков остаётся близкой.</p>
<pre><code># сколько разных /24 в первых 200 строках списка
cut -d: -f1 proxy.txt | head -200 | cut -d. -f1-3 | sort -u | wc -l

# сколько разных автономных систем
for ip in $(cut -d: -f1 proxy.txt | head -30); do
  whois "$ip" | grep -im1 -E "^origin" 
done | sort | uniq -c | sort -rn</code></pre>
<h2 id="zachem-v-rabote-nuzhny-adresa-iz-raznyh-pods">Зачем в работе нужны адреса из разных подсетей</h2>
<p>Разнообразие диапазонов даёт три вещи: устойчивость темпа, независимость параллельных задач и предсказуемое поведение при росте нагрузки. Разберём каждую.</p>
<p>Устойчивость темпа. Счётчики частоты живут на уровне блока, поэтому суммарная скорость прогона делится между блоками. На тридцати разных /24 общий темп держится в тридцать раз выше того, что выдержит один блок, при том же безопасном темпе на каждый счётчик. Мы собираем пул именно с таким расчётом, и на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 из широкого набора подсетей</a>, состав пула описан по пунктам.</p>
<p>Независимость задач. Когда две задачи идут параллельно, разведение по блокам избавляет от взаимного влияния. Сбор карточек товаров и съём выдачи из одного /24 складываются в общий счётчик целевого домена, и медленная задача начинает страдать от быстрой. Разные блоки ставят между ними стену.</p>
<p>Предсказуемость при росте. Нагрузка редко растёт равномерно: обычно она прыгает вместе с сезоном или с расширением списка целей. Пул из множества диапазонов масштабируется линейно, потому что новые потоки просто раскладываются по свободным блокам. Пул из одного диапазона упирается в потолок площадки и дальше не растёт.</p>
<p>Для сбора открытых данных этот эффект заметнее всего, поэтому пакеты <a href="https://iprazon.com/proxy/dlya-parsinga">прокси для парсинга и массовых прогонов</a> строятся вокруг широкого набора блоков. Серверная природа адресов при этом даёт стабильный отклик: узлы стоят в машинных залах на собственном оборудовании с широким каналом, и подробности мы собрали на странице про <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a>.</p>
<p>Есть и четвёртый эффект, менее очевидный. Разные блоки почти всегда означают разных операторов связи, а значит разные маршруты до целевого сервера. Один маршрут просел по задержке, остальные продолжают работать в прежнем темпе, и общая картина прогона остаётся ровной. Мы наблюдаем это на длинных ночных выгрузках: провал по одному оператору забирает несколько процентов скорости вместо остановки всей задачи.</p>
<h2 id="kak-raspredelyat-nagruzku-po-diapazonam-pri-">Как распределять нагрузку по диапазонам при крупном прогоне</h2>
<p>Практика сводится к четырём приёмам, и все они настраиваются внутри софта, без правки чего-либо на стороне сервиса.</p>
<p>Первый приём: группировка списка по третьему октету. Список из кабинета приходит плоским, и один проход через <code>sort</code> превращает его в набор групп. Дальше программа берёт по одному адресу из каждой группы по кругу, и подряд идущие запросы уходят из разных блоков.</p>
<pre><code># раскладка списка по группам /24
awk -F: '{split($1,a,"."); print a[1]"."a[2]"."a[3]"\t"$0}' proxy.txt \
  | sort -k1,1 | cut -f2 &gt; proxy-by-subnet.txt</code></pre>
<p>Второй приём: потолок потоков на блок. Правило простое: держим не больше 3-5 одновременных соединений с одного /24 к одному домену. Общий лимит пакета при этом остаётся прежним, просто он раскладывается шире. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, и при двух привязанных адресах общий лимит делится между ними пополам.</p>
<p>Третий приём: разведение доменов по группам блоков. Если целей несколько, закрепите за каждой свою треть списка. Тогда история запросов по домену остаётся компактной и площадка видит ровный поток с ограниченного набора диапазонов.</p>
<p>Четвёртый приём: пауза по блоку, не по адресу. Получили 429 с одного адреса, отправляйте следующий запрос из другой группы, а исходную группу выведите из работы на время из заголовка <code>Retry-After</code>. Многие программы умеют это из коробки: в ZennoPoster логика собирается кубиками в проекте, а в A-Parser поведение задаётся в настройках потоков и повторов. Готовые связки для сборщика мы описали на странице про <a href="https://iprazon.com/instrumenty/a-parser">настройку A-Parser под работу с пулом</a>.</p>
<div class="tabl"><table><thead><tr><th>Ситуация в прогоне</th><th>Что делаем с диапазонами</th><th>Что получаем</th></tr></thead><tbody><tr><td>Один домен, высокий темп</td><td>Ротация по кругу между всеми /24</td><td>Счётчики площадки растут медленно</td></tr><tr><td>Несколько доменов</td><td>Каждому домену своя группа блоков</td><td>История по домену остаётся ровной</td></tr><tr><td>Пришёл код 429</td><td>Пауза на весь блок по <code>Retry-After</code></td><td>Остальные группы продолжают работу</td></tr><tr><td>Пришёл код 403</td><td>Блок выводится из списка на прогон</td><td>Прогон идёт дальше без остановки</td></tr><tr><td>Авторизованная сессия</td><td>Сессия закрепляется за одним блоком</td><td>Повторных подтверждений меньше</td></tr><tr><td>Ночное окно и низкий темп</td><td>Ограничение по блокам снимается</td><td>Полная скорость на всех потоках</td></tr></tbody></table></div>
<p>Трафик в пакете безлимитный, поэтому раскладка по блокам никак не бьёт по объёму выкачки: считать гигабайты не нужно, планируется только частота обращений. Команды с круглосуточными прогонами берут <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a> именно ради этой свободы в планировании.</p>
<h2 id="chto-pokazyvaet-raznoobrazie-podsetey-v-pule">Что показывает разнообразие подсетей в пуле</h2>
<p>Оценить пул по разнообразию блоков можно за пять минут и цифры получаются говорящие. Берём первые 500 строк списка, срезаем последний октет, считаем уникальные значения. Отношение числа уникальных /24 к числу адресов даёт коэффициент разброса.</p>
<p>Пул на 12 000 активных адресов при широком наборе блоков даёт сотни разных /24 и десятки разных автономных систем. География охватывает 200+ стран, пул собран как микс со всего мира, и уже поэтому адреса физически расходятся по множеству независимых сетей. Ротация внутри пула автоматическая, состав обновляется в реальном времени, поэтому одна и та же выборка через час покажет частично другие блоки.</p>
<div class="tabl"><table><thead><tr><th>Что считаем</th><th>Как считаем</th><th>О чём говорит цифра</th></tr></thead><tbody><tr><td>Уникальных /24</td><td>Срезать последний октет, <code>sort -u</code></td><td>Ширина раскладки по счётчикам</td></tr><tr><td>Адресов на один /24</td><td>Всего адресов делим на число блоков</td><td>Плотность внутри блока</td></tr><tr><td>Уникальных ASN</td><td>Поле <code>origin</code> из whois по выборке</td><td>Число независимых операторов</td></tr><tr><td>Доля крупнейшего блока</td><td>Самая частая группа делим на выборку</td><td>Риск сосредоточения нагрузки</td></tr><tr><td>Обновление состава</td><td>Повтор замера через час</td><td>Скорость ротации внутри пула</td></tr></tbody></table></div>
<p>Плотность внутри блока полезнее абсолютных чисел. Десять адресов на один /24 означают, что при полной параллельной работе всех десяти счётчик площадки увидит десятикратную нагрузку от одного источника. Два адреса на блок дают вдвое более спокойную картину при том же общем размере пула, поэтому мы смотрим именно на плотность, когда планируем крупный прогон.</p>
<p>Проверить разброс своими руками проще всего в тестовом окне. Бесплатный тест длится до 2 часов, список выдаётся в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code> ссылкой или файлом, и этого достаточно, чтобы снять статистику по блокам на реальной выборке. Полный состав пакета с потоками и привязками разобран там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="mozhno-li-poluchit-nabor-adresov-iz-odnogo-d">Можно ли получить набор адресов из одного диапазона?</h3>
<p>Пул устроен как микс со всего мира, ротация внутри пула автоматическая, состав обновляется в реальном времени. Группировку по блокам вы собираете на своей стороне: список приходит плоским, один проход сортировки по третьему октету раскладывает его по группам /24, и дальше софт работает с этими группами как ему удобно.</p>
<h3 id="chto-vhodit-v-proksi-pul">Что входит в прокси-пул?</h3>
<p>В пуле около 12 000 активных адресов IPv4 и SOCKS5, онлайн держится в районе этой цифры в сутки. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, пакеты по потокам между собой не складываются. Доступ к списку открыт клиентам сервиса.</p>
<h3 id="kak-chasto-obnovlyaetsya-spisok-adresov">Как часто обновляется список адресов?</h3>
<p>Список обновляется в режиме реального времени, поэтому перед крупным прогоном его стоит перечитать заново. Сохранённый на диск файл со временем расходится с текущим составом пула, и часть строк в нём перестаёт отвечать. Ссылку на выдачу удобно отдать планировщику, тогда программа тянет актуальные строки перед каждым запуском.</p>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu">Подойдут ли прокси под мою задачу?</h3>
<p>Заранее предугадать поведение каждого целевого сайта нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. За это время снимается статистика по блокам, проверяется отклик и подбирается рабочее число потоков на диапазон. Пакет после оплаты включается примерно за 5 минут.</p>
<p>Соседние разборы основ дополняют картину: <a href="/osnovy/chto-takoe-proxy-ipv4/">что такое прокси IPv4</a> и как проходит запрос через посредника, <a href="/osnovy/servernye-adresa/">откуда берутся серверные адреса</a> и кому принадлежат их блоки, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a> при разной частоте обращений. Когда площадка ответила отказом на весь диапазон, порядок действий описан в материале про <a href="/proverka/oshibka-403/">ошибку 403 при работе через прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/podset-i-diapazon/">https://kupit-proxy-ipv4.ru/osnovy/podset-i-diapazon/</a></p>]]></content:encoded></item>
<item><title>Уровни анонимности прокси: прозрачный, анонимный и элитный по заголовкам запроса</title><link>https://kupit-proxy-ipv4.ru/osnovy/urovni-anonimnosti/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/urovni-anonimnosti/</guid><description>Уровней анонимности три: прозрачный передаёт сайту ваш исходный адрес открытым текстом, анонимный сообщает только сам факт работы через посредника, элитный…</description><content:encoded><![CDATA[
<p class="vvod">Уровней анонимности три: прозрачный передаёт сайту ваш исходный адрес открытым текстом, анонимный сообщает только сам факт работы через посредника, элитный не добавляет к запросу ни одного служебного заголовка. Различие целиком сидит в наборе полей, которые прокси дописывает к HTTP-запросу перед отправкой на целевой сервер.</p>
<p>Проверить уровень можно своими руками за минуту: один запрос через <code>curl</code> на страницу-эхо, которая возвращает полученные заголовки, и всё становится видно. Ниже мы разбираем каждый уровень по составу полей, показываем команды проверки, объясняем, почему у SOCKS5 понятия заголовков нет вовсе, и перечисляем признаки посредника, которые живут за пределами HTTP.</p>
<h2 id="otkuda-berutsya-sluzhebnye-zagolovki">Откуда берутся служебные заголовки</h2>
<p>HTTP-запрос это стартовая строка и набор пар «имя: значение». Браузер отправляет <code>Host</code>, <code>User-Agent</code>, <code>Accept</code>, <code>Accept-Language</code>, <code>Cookie</code> и ещё десяток полей. Прокси получает этот набор, при необходимости дописывает свои поля и отправляет дальше.</p>
<p>Дописывать поля прокси начал по причинам эксплуатации. Корпоративные шлюзы и кэширующие серверы ставили <code>X-Forwarded-For</code>, чтобы веб-сервер за ними видел настоящего клиента в логах. Балансировщики нагрузки делают то же самое до сих пор, и в их случае это работает на пользу владельцу сайта. Поле прижилось, вошло в привычку администраторов и потом получило стандартизованного наследника <code>Forwarded</code>.</p>
<p>Целевой сервер никак не отличает заголовок от балансировщика внутри своей же инфраструктуры от заголовка внешнего посредника. Он видит поле, читает значение и делает вывод о цепочке. Отсюда и берётся вся классификация уровней: набор дописанных полей определяет, что именно сайт узнает о маршруте запроса.</p>
<p>Единого стандарта на уровни при этом нет. Деление на прозрачный, анонимный и элитный пришло из практики администрирования и закрепилось в чекерах, поэтому разные проверялки иногда расходятся в оценке одного узла на полшага. Мы ориентируемся на состав полей в сыром запросе: он однозначен и проверяется в любую минуту. Название уровня вторично, набор заголовков первичен, и разговор о настройках всегда стоит вести именно в терминах полей.</p>
<p>Ещё одна деталь касается регистра и порядка полей. Имена заголовков нечувствительны к регистру, поэтому <code>X-Forwarded-For</code> и <code>x-forwarded-for</code> для сервера одно и то же. Порядок полей при этом значение имеет: он входит в отпечаток клиента, и посредник, который переставляет заголовки местами, оставляет след даже без добавления новых.</p>
<div class="tabl"><table><thead><tr><th>Заголовок</th><th>Что несёт</th><th>Кто обычно ставит</th></tr></thead><tbody><tr><td><code>Via</code></td><td>Список пройденных посредников с версией протокола</td><td>Кэширующие и корпоративные прокси</td></tr><tr><td><code>X-Forwarded-For</code></td><td>Исходный адрес клиента, иногда цепочка через запятую</td><td>Балансировщики, шлюзы, прозрачные прокси</td></tr><tr><td><code>Forwarded</code></td><td>То же самое в стандартизованном виде с полями <code>for</code>, <code>by</code>, <code>proto</code></td><td>Современные обратные прокси</td></tr><tr><td><code>X-Real-IP</code></td><td>Один исходный адрес без цепочки</td><td>nginx в роли обратного прокси</td></tr><tr><td><code>Proxy-Connection</code></td><td>Управление соединением между клиентом и прокси</td><td>Старые браузеры и HTTP-клиенты</td></tr><tr><td><code>X-Proxy-ID</code> и <code>X-Cache</code></td><td>Идентификатор узла и статус кэша</td><td>Кэширующие серверы вроде Squid</td></tr></tbody></table></div>
<h2 id="prozrachnyy-uroven-adres-klienta-uhodit-otkr">Прозрачный уровень: адрес клиента уходит открытым текстом</h2>
<p>Прозрачный прокси передаёт запрос дальше и добавляет к нему исходный адрес. Целевой сервер получает и адрес выходного узла в поле соединения, и адрес клиента в заголовке. Скрытия здесь нет никакого, задача такого узла состоит в кэшировании и учёте.</p>
<pre><code>GET /page HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Via: 1.1 squid-gw (squid/5.7)
X-Forwarded-For: 198.51.100.20
X-Real-IP: 198.51.100.20
Proxy-Connection: keep-alive</code></pre>
<p>Здесь <code>198.51.100.20</code> это адрес машины, с которой пошёл запрос. Сервер видит его прямо в теле запроса, пишет в логи и использует в своих правилах. Поле <code>Via</code> дополнительно сообщает имя и версию программы посредника, что делает картину совсем подробной.</p>
<p>Такие узлы стоят внутри офисных сетей и у части операторов связи, где трафик заворачивается на кэш без ведома пользователя. Для рабочих задач вроде сбора данных или разведения кабинетов уровень не подходит по очевидной причине: адрес клиента виден целевой площадке в первом же запросе.</p>
<h2 id="anonimnyy-uroven-posrednik-viden-klient-net">Анонимный уровень: посредник виден, клиент нет</h2>
<p>Анонимный прокси убирает исходный адрес из заголовков и оставляет признак своего присутствия. В типичном виде остаётся <code>Via</code>, иногда <code>X-Forwarded-For</code> со значением <code>unknown</code> либо с адресом самого выходного узла. Клиента за такой цепочкой не видно.</p>
<pre><code>GET /page HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Via: 1.1 proxy
X-Forwarded-For: unknown</code></pre>
<p>Для большинства задач этого достаточно. Целевой сервер знает, что запрос пришёл через посредника, и на этом его знание заканчивается: исходный адрес не восстанавливается ни из одного поля. Логи площадки покажут адрес выходного узла, и он же попадёт во все счётчики и ограничения.</p>
<p>Тонкость в том, что часть площадок относится к запросам с признаком посредника строже. Правила бывают простые: увидели <code>Via</code>, подняли порог проверки, показали интерактивную страницу подтверждения. Поэтому для работы с чувствительными к этому сайтами берут следующий уровень.</p>
<p>Встречается и промежуточный вариант, который иногда называют искажающим. Такой узел подставляет в <code>X-Forwarded-For</code> произвольный адрес, не имеющий отношения к клиенту. С точки зрения сервера картина выглядит как обычная цепочка посредников, и подставленное значение уходит в логи. На практике пользы от подмены немного: сам факт присутствия поля уже говорит о посреднике, а его содержимое серьёзные фильтры перепроверяют по другим признакам.</p>
<p>Отличить анонимный узел от искажающего просто. Отправляем запрос со своей машины, смотрим значение в <code>X-Forwarded-For</code> и сравниваем его с собственным адресом. Совпало, узел прозрачный. Стоит <code>unknown</code> или адрес самого узла, уровень анонимный. Стоит произвольный посторонний адрес, перед вами искажающий вариант.</p>
<h2 id="elitnyy-uroven-zapros-vyglyadit-obychnym">Элитный уровень: запрос выглядит обычным</h2>
<p>Элитный прокси передаёт запрос без единого добавленного поля. Набор заголовков остаётся тем, который сформировал ваш клиент: <code>Host</code>, <code>User-Agent</code>, <code>Accept</code>, <code>Accept-Encoding</code>, <code>Accept-Language</code>, <code>Connection</code>. Целевой сервер видит соединение с адреса выходного узла и обычный набор полей браузера.</p>
<pre><code>GET /page HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive</code></pre>
<p>Мы держим выходные узлы именно в таком режиме: серверная площадка отдаёт запрос дальше в том виде, в котором получила, и служебные поля к нему не подмешиваются. Разбор режима и состав пакета собраны на странице, где описаны <a href="https://iprazon.com/proxy/anonimnye">анонимные прокси без служебных заголовков</a>.</p>
<div class="tabl"><table><thead><tr><th>Уровень</th><th><code>Via</code></th><th><code>X-Forwarded-For</code></th><th><code>X-Real-IP</code></th><th>Что узнаёт сервер</th></tr></thead><tbody><tr><td>Прозрачный</td><td>Есть</td><td>Адрес клиента</td><td>Адрес клиента</td><td>Адрес узла и адрес клиента</td></tr><tr><td>Анонимный</td><td>Есть</td><td><code>unknown</code> или адрес узла</td><td>Обычно нет</td><td>Адрес узла и факт посредника</td></tr><tr><td>Элитный</td><td>Нет</td><td>Нет</td><td>Нет</td><td>Только адрес узла</td></tr></tbody></table></div>
<h2 id="proverka-urovnya-cherez-curl">Проверка уровня через curl</h2>
<p>Самая быстрая проверка занимает одну команду. Берём публичный сервис, который возвращает полученные заголовки в виде JSON, и отправляем запрос через свой прокси. Всё, что окажется в ответе сверх обычного набора браузера, дописал посредник.</p>
<pre><code># запрос через прокси с привязкой своего адреса
curl -x http://185.24.87.14:8000 https://httpbin.org/headers

# запрос через прокси с логином и паролем
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://httpbin.org/headers

# только адрес на выходе
curl -x http://185.24.87.14:8000 https://ifconfig.me

# полный протокол обмена вместе с заголовками запроса
curl -v -x http://185.24.87.14:8000 https://example.com -o /dev/null</code></pre>
<p>Ответ разбирается по одному правилу: сравниваем полученный набор с тем, что отправляли. Проще всего сделать это в два прохода, сначала без прокси, потом через прокси, и посмотреть разницу.</p>
<pre><code>curl -s https://httpbin.org/headers &gt; direct.json
curl -s -x http://185.24.87.14:8000 https://httpbin.org/headers &gt; proxied.json
diff direct.json proxied.json</code></pre>
<p>Пустая разница по служебным полям означает элитный уровень. Появились <code>Via</code> и <code>X-Forwarded-For</code> со значением вашего адреса, перед вами прозрачный узел. Появился только <code>Via</code> либо <code>X-Forwarded-For: unknown</code>, уровень анонимный. Дополнительно смотрим на адрес в поле <code>origin</code> ответа: он должен совпадать с адресом выходного узла.</p>
<div class="tabl"><table><thead><tr><th>Что видим в ответе</th><th>Уровень</th><th>Действие</th></tr></thead><tbody><tr><td>Ни одного лишнего поля, <code>origin</code> равен адресу узла</td><td>Элитный</td><td>Работаем без правок</td></tr><tr><td><code>Via</code> есть, адрес клиента отсутствует</td><td>Анонимный</td><td>Годится для большинства задач</td></tr><tr><td><code>X-Forwarded-For</code> содержит ваш адрес</td><td>Прозрачный</td><td>Узел из работы выводится</td></tr><tr><td><code>origin</code> равен адресу вашей машины</td><td>Прокси обошли</td><td>Проверяем настройки клиента</td></tr><tr><td>Ответ вернулся с кодом 407</td><td>Авторизация не прошла</td><td>Сверяем логин, пароль и привязку</td></tr></tbody></table></div>
<h2 id="stranica-eho-svoya-proverka-bez-vneshnih-ser">Страница-эхо: своя проверка без внешних сервисов</h2>
<p>Публичные сервисы удобны, но они видят весь ваш трафик проверки и иногда меняют формат ответа. Своя страница-эхо снимает эти неудобства и разворачивается за пару минут на любом сервере с PHP либо с Node.</p>
<pre><code>&lt;?php
// echo.php: возвращает все полученные заголовки и адрес соединения
header('Content-Type: application/json; charset=utf-8');
$out = ['remote_addr' =&gt; $_SERVER['REMOTE_ADDR'], 'headers' =&gt; []];
foreach ($_SERVER as $k =&gt; $v) {
    if (strpos($k, 'HTTP_') === 0) {
        $out['headers'][str_replace('_', '-', substr($k, 5))] = $v;
    }
}
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);</code></pre>
<p>Тот же смысл на Node без внешних пакетов:</p>
<pre><code>const http = require('http');
http.createServer((req, res) =&gt; {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    remote: req.socket.remoteAddress,
    headers: req.headers
  }, null, 2));
}).listen(8080);</code></pre>
<p>Поле <code>remote_addr</code> показывает адрес, с которого пришло соединение: там окажется выходной узел прокси. Блок <code>headers</code> показывает всё, что дошло до сервера. Мы проверяем свои узлы именно так, потому что страница на собственном сервере отдаёт сырую картину без чужой обработки.</p>
<p>Полезно повесить такую страницу на домен с сертификатом и проверять оба варианта, по HTTP и по HTTPS. Разница между ними существенная: при HTTPS прокси открывает туннель методом <code>CONNECT</code> и внутрь шифрованного потока не заглядывает, поэтому дописать что-либо в заголовки он физически не может. Именно по этой причине проверку уровня всегда делают по HTTP, иначе любой узел покажется элитным.</p>
<p>Из этого следует практический порядок замера. Сначала берём HTTP и снимаем сырой набор полей, затем повторяем по HTTPS и сверяем адрес соединения. Если по HTTP пришли лишние служебные поля, а по HTTPS картина ровная, узел работает в прозрачном либо анонимном режиме и просто не может вмешаться в шифрованный поток. Мы проводим оба замера подряд, когда разбираем чужую настройку по обращению клиента. Устройство самого туннеля и порядок работы метода <code>CONNECT</code> подробно описаны там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-http">подключение по протоколу HTTP и HTTPS</a>.</p>
<p>Держать страницу-эхо стоит на отдельном домене без лишней логики. Она не должна ставить cookie, подключать сторонние скрипты и отдавать редиректы: любая из этих вещей меняет набор полей в следующем запросе и путает картину. Двадцать строк кода и статичный ответ дают ровно то, что нужно для замера.</p>
<h2 id="pochemu-u-socks5-ponyatiya-zagolovkov-net">Почему у SOCKS5 понятия заголовков нет</h2>
<p>SOCKS работает на другом слое. Протокол занимается установкой соединения: клиент сообщает узлу адрес и порт назначения, узел открывает канал и дальше просто перекладывает байты в обе стороны. Содержимое потока для SOCKS-узла безразлично, разбирать HTTP он не умеет и не пытается.</p>
<p>Отсюда прямое следствие: дописать <code>Via</code> или <code>X-Forwarded-For</code> через SOCKS5 некому. Всё, что отправит ваша программа, дойдёт до сервера ровно в том виде, в котором вышло. Поэтому вопрос об уровне анонимности к SOCKS5 неприменим: заголовков на уровне протокола там попросту нет.</p>
<pre><code># обмен при установке соединения SOCKS5
клиент -&gt; узел : 05 01 00                  выбор метода авторизации
узел -&gt; клиент : 05 00                     метод принят
клиент -&gt; узел : 05 01 00 03 0b example.com 01 bb   подключить к example.com:443
узел -&gt; клиент : 05 00 00 01 ...           канал открыт
дальше идёт сырой поток байт</code></pre>
<p>Второе преимущество сокетного варианта касается имён. В режиме <code>socks5h</code> разбор доменного имени передаётся на сторону узла, и запрос к DNS уходит оттуда же, откуда потом пойдёт соединение. Разбор запросов к службе имён вынесен в отдельный материал про <a href="/proverka/utechka-dns/">утечку запросов к DNS</a>, там показаны настройки для браузеров и парсеров.</p>
<pre><code># отличие двух схем в curl
curl -x socks5://185.24.87.14:1080  https://example.com   # имя разбирает клиент
curl -x socks5h://185.24.87.14:1080 https://example.com   # имя разбирает узел</code></pre>
<p>В пакете доступны SOCKS4 и SOCKS5 на выбор, рекомендуем SOCKS5: он умеет авторизацию по логину, принимает доменные имена и работает с UDP. Строки подключения и порядок настройки собраны там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-socks5">покупка прокси SOCKS5 для программ</a>.</p>
<h2 id="chto-esche-vydaet-rabotu-cherez-posrednika">Что ещё выдаёт работу через посредника</h2>
<p>Заголовки закрывают первый слой картины, ниже лежат ещё четыре. Проверять их стоит вместе, потому что элитный уровень по заголовкам легко теряет смысл при промахе на любом из следующих пунктов.</p>
<p>Первое это запросы к службе имён. Программа резолвит домен через свой сервер, соединение идёт через прокси, и на стороне службы имён остаётся след вашей сети. Лечится переходом на <code>socks5h</code> либо настройкой резолвинга внутри браузера.</p>
<p>Второе это WebRTC в браузере. Механизм собирает адреса сетевых интерфейсов для прямого соединения между участниками и отдаёт их странице через JavaScript. Отключается флагом в настройках браузера или профилем антидетект-браузера, где нужные переключатели вынесены в интерфейс.</p>
<p>Третье это отпечаток клиента. Порядок заголовков, набор поддерживаемых наборов шифров при рукопожатии TLS, версия протокола, размер окна: всё это складывается в устойчивую подпись. <code>curl</code> и <code>python-requests</code> дают подпись, заметно отличающуюся от браузерной, поэтому для задач с браузерными сценариями берут настоящий браузер.</p>
<p>Четвёртое это поведение. Ровный интервал между запросами до сотой доли секунды, одинаковый путь обхода страниц, обращения без загрузки картинок и стилей: набор признаков читается площадкой не хуже заголовков.</p>
<div class="tabl"><table><thead><tr><th>Слой проверки</th><th>Чем смотреть</th><th>Что чинить при промахе</th></tr></thead><tbody><tr><td>Заголовки HTTP</td><td><code>curl</code> на страницу-эхо</td><td>Уровень узла и настройки клиента</td></tr><tr><td>Служба имён</td><td>Лог запросов на своём сервере</td><td>Схема <code>socks5h</code>, настройка браузера</td></tr><tr><td>WebRTC</td><td>Страница проверки в браузере</td><td>Флаг браузера, профиль антидетекта</td></tr><tr><td>Отпечаток TLS</td><td>Сервис разбора рукопожатия</td><td>Переход на браузерный клиент</td></tr><tr><td>Поведение</td><td>Свои логи прогона</td><td>Разброс пауз, порядок обхода</td></tr></tbody></table></div>
<p>Пятый пункт стоит особняком: время ответа. Соединение через посредника добавляет к отклику несколько десятков миллисекунд, и по разнице между заявленным местом и задержкой иногда делают выводы. Серверные узлы с широким каналом держат эту прибавку небольшой, а разбор устройства таких узлов лежит на странице про <a href="https://iprazon.com/proxy/servernye">серверные прокси на собственных мощностях</a>.</p>
<h2 id="kakoy-uroven-nuzhen-pod-kakuyu-zadachu">Какой уровень нужен под какую задачу</h2>
<p>Правило короткое: прозрачный уровень для рабочих задач не берут вовсе, анонимного хватает для внутренних проверок и мягких площадок, элитный берут для всего остального. Ниже раскладка по типовым сценариям.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Достаточный уровень</th><th>Почему так</th></tr></thead><tbody><tr><td>Проверка своего сайта из другой сети</td><td>Анонимный</td><td>Площадка своя, скрывать маршрут не требуется</td></tr><tr><td>Сбор открытых данных и прайсов</td><td>Элитный</td><td>Счётчики площадки строже к признакам посредника</td></tr><tr><td>Съём позиций в поисковой выдаче</td><td>Элитный</td><td>Выдача чувствительна к признакам автоматизации</td></tr><tr><td>Работа с несколькими кабинетами</td><td>Элитный плюс антидетект</td><td>Отпечаток браузера важнее заголовков</td></tr><tr><td>Отправка почты по SMTP</td><td>SOCKS5</td><td>Заголовков на уровне протокола нет</td></tr><tr><td>Мониторинг доступности сервисов</td><td>Анонимный</td><td>Важен факт ответа и время отклика</td></tr><tr><td>Проверка рекламной выдачи</td><td>Элитный</td><td>Признаки посредника меняют показ</td></tr></tbody></table></div>
<p>Отдельно про сочетание с браузером. Элитный узел закрывает слой заголовков полностью, слой отпечатка при этом остаётся за клиентом. Профиль в Dolphin или другом антидетект-браузере подменяет параметры окна, шрифты и параметры графики, а прокси даёт адрес и маршрут. Работают эти два инструмента вместе, и подбирать их нужно парой. Порядок связывания профиля с адресом из пула мы разобрали на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<p>Ещё один сценарий про почту. Почтовые протоколы SMTP, IMAP и POP3 идут поверх обычного TCP-соединения без единого HTTP-заголовка, поэтому классификация уровней к ним неприменима целиком. Здесь работает сокетный вариант: клиент открывает канал через узел и обменивается командами протокола напрямую. Служебные поля в письме при этом формирует почтовый сервер, и смотреть нужно уже на них.</p>
<p>Отдельного внимания заслуживают внутренние проверки инфраструктуры. Когда команда мониторит доступность своих же сервисов из разных сетей, признак посредника ничему не мешает: важны код ответа и время отклика. Такие задачи спокойно закрываются анонимным уровнем, и переусложнять настройку смысла нет.</p>
<p>Наш пул состоит примерно из 12 000 активных адресов, ротация внутри пула автоматическая, список обновляется в реальном времени. Трафик безлимитный, потоки до 1000 на стандартных пакетах и до 3000 на корпоративном, включение пакета занимает примерно 5 минут. Мы выдаём список в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, ссылкой либо файлом, и режим передачи заголовков одинаков для всех адресов пула. Подробности собраны там, где можно <a href="https://iprazon.com/proxy/anonimnye">взять анонимные прокси под свою задачу</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chem-proveryat-proksi-krome-curl">Чем проверять прокси кроме curl?</h3>
<p>Для массовой проверки списка рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой, показывает отвечающие строки, время отклика и тип прокси. Точечную проверку заголовков удобнее делать через <code>curl</code> на свою страницу-эхо, потому что там видно сырой набор полей без чужой обработки.</p>
<h3 id="kakoy-tip-proksi-vy-daete">Какой тип прокси вы даёте?</h3>
<p>В пакете доступны IPv4 и SOCKS5, внутри сокетного варианта можно выбрать SOCKS-4 или SOCKS-5, рекомендуем SOCKS-5. Протоколы HTTP и HTTPS работают на тех же адресах, менять пакет для перехода между ними не требуется: меняется только строка подключения в настройках программы.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> для работы с привязкой своего адреса и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину и паролю. Забрать список можно ссылкой или файлом, оба варианта лежат в кабинете. В пакет входит одновременная привязка 2 адресов, менять её разрешено свободно в настройках.</p>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu">Подойдут ли прокси под мою задачу?</h3>
<p>Заранее предугадать поведение каждой целевой площадки нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. За это время проверяются заголовки на своей странице-эхо, снимается время отклика и подбирается рабочее число потоков. Тест проходит на вашем софте и ваших доменах.</p>
<p>Тему продолжают соседние разборы основ: <a href="/osnovy/chto-takoe-proxy-ipv4/">что такое прокси IPv4</a> и как устроен путь запроса, <a href="/osnovy/chto-vidit-sayt/">что сайт видит о вас при работе через прокси</a> помимо адреса и заголовков, <a href="/osnovy/avtorizaciya/">два способа доступа к прокси</a> через логин и через привязку адреса. Пошаговый порядок замера с командами и разбором ответа описан в материале про <a href="/proverka/proverka-anonimnosti/">проверку анонимности прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/urovni-anonimnosti/">https://kupit-proxy-ipv4.ru/osnovy/urovni-anonimnosti/</a></p>]]></content:encoded></item>
<item><title>Что сайт видит о посетителе при работе через прокси</title><link>https://kupit-proxy-ipv4.ru/osnovy/chto-vidit-sayt/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/chto-vidit-sayt/</guid><description>Сайт видит адрес того соединения, которое до него дошло: при работе через прокси это адрес посредника из пула, адрес рабочей машины до площадки не…</description><content:encoded><![CDATA[
<p class="vvod">Сайт видит адрес того соединения, которое до него дошло: при работе через прокси это адрес посредника из пула, адрес рабочей машины до площадки не добирается. Всё остальное площадка собирает у браузера напрямую: строку User-Agent, набор и порядок заголовков запроса, отпечаток TLS-рукопожатия, язык интерфейса, часовой пояс, разрешение экрана, список шрифтов, cookies и ритм действий за страницей.</p>
<p>Отсюда рабочее правило, вокруг которого построена вся статья: посредник закрывает сетевой слой, признаки прикладного слоя остаются на стороне браузера и настраиваются отдельно. Ниже разобран каждый признак по порядку: кто его отдаёт, что по нему определяется на стороне площадки и чем он закрывается. В конце собрана сводная таблица по всем признакам сразу.</p>
<h2 id="adres-soedineniya-chto-chitaetsya-po-odnoy-s">Адрес соединения: что читается по одной строке в логе</h2>
<p>Первое, что попадает в журнал веб-сервера, это адрес источника TCP-соединения. Через посредника туда пишется адрес выходного узла. Мы держим пул около 12 000 активных адресов, ротация внутри него автоматическая, поэтому два соседних запроса штатно уходят с разных выходов и в логе площадки выглядят как обращения разных клиентов.</p>
<p>Сам адрес это только начало. За секунду по нему поднимается целый пласт сведений, и делает это любой желающий парой запросов из командной строки.</p>
<pre><code>whois 203.0.113.24 | grep -iE "netname|descr|origin|country"
dig +short 24.113.0.203.origin.asn.cymru.com TXT</code></pre>
<p>Первая команда отдаёт владельца диапазона, границы блока и контакты. Вторая показывает номер автономной системы, внутри которой этот блок анонсируется. Крупные площадки хранят собственные списки автономных систем и раскладывают входящий трафик по ним ещё до того, как отработает страница. Соседи по подсети тоже учитываются: когда из блока /24 идёт однородный поток запросов, счётчики срабатывают на весь диапазон.</p>
<div class="tabl"><table><thead><tr><th>Что берётся из адреса</th><th>Источник сведений</th><th>Насколько точно</th></tr></thead><tbody><tr><td>Владелец диапазона</td><td>База регионального регистратора, whois</td><td>Точно, запись публичная</td></tr><tr><td>Номер автономной системы</td><td>Таблица маршрутов, публичные сервисы</td><td>Точно</td></tr><tr><td>Тип сети</td><td>Классификация автономной системы</td><td>Достоверно на уровне категории</td></tr><tr><td>Приблизительная география</td><td>Коммерческие базы геолокации</td><td>С расхождениями, базы отстают</td></tr><tr><td>Соседи по подсети</td><td>Границы блока из whois</td><td>Точно</td></tr><tr><td>История обращений</td><td>Внутренние счётчики самой площадки</td><td>Зависит от площадки</td></tr></tbody></table></div>
<p>Про принадлежность блоков и поведение соседей по диапазону у нас есть отдельный разбор в материале про <a href="/osnovy/podset-i-diapazon/">подсеть и диапазон</a>. Здесь важен один вывод: адрес отдаёт сеть, и через посредника площадка читает сеть посредника. Наши выходные узлы стоят на собственном оборудовании, как устроены такие <a href="https://iprazon.com/proxy/servernye">серверные адреса на своём железе</a>, расписано на отдельной странице.</p>
<h2 id="stroka-user-agent-i-zagolovki-client-hints">Строка User-Agent и заголовки Client Hints</h2>
<p>User-Agent это текстовая строка, которую браузер добавляет к каждому запросу. Она сообщает семейство браузера, версию движка, платформу и разрядность системы. Посредник её не трогает и не переписывает: строка формируется программой на стороне пользователя.</p>
<pre><code>User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
            (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36</code></pre>
<p>Современные браузеры на движке Chromium дополняют картину заголовками Client Hints. Часть из них уходит с каждым запросом сама, часть подтягивается по запросу площадки через заголовок Accept-CH. Смысл тот же, форма аккуратнее: значения разложены по отдельным полям и читаются машиной без разбора длинной строки.</p>
<pre><code>Sec-CH-UA: "Chromium";v="126", "Google Chrome";v="126", "Not.A/Brand";v="24"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Platform-Version: "15.0.0"
Sec-CH-UA-Arch: "x86"
Sec-CH-UA-Bitness: "64"
Sec-CH-UA-Full-Version-List: "Chromium";v="126.0.6478.127"</code></pre>
<p>Здесь появляется первый источник расхождений. Пользователь подменил User-Agent расширением, площадка запросила Client Hints, и в ответ пришла платформа, которая с подменённой строкой не сходится. Мы видим этот сценарий регулярно в обращениях: адрес из пула отрабатывает штатно, площадка отдаёт проверку, а причина сидит в двух полях, которые рассказывают о системе разные вещи. Подмена работает только тогда, когда её делает сам браузер на уровне движка, и ровно для этого существуют <a href="https://iprazon.com/instrumenty/antidetekt">антидетект-браузеры с подменой отпечатка</a>.</p>
<h2 id="nabor-i-poryadok-zagolovkov-zaprosa">Набор и порядок заголовков запроса</h2>
<p>Заголовки различаются двумя вещами: составом и последовательностью. Состав отвечает на вопрос, какие поля вообще есть в запросе. Последовательность это порядок их следования, и он у каждой программы свой, устойчивый от запуска к запуску.</p>
<p>Браузер на Chromium отправляет поля примерно в таком порядке.</p>
<pre><code>:method: GET
:authority: example.com
:scheme: https
:path: /catalog
sec-ch-ua: ...
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 ...
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif
sec-fetch-site: none
sec-fetch-mode: navigate
sec-fetch-user: ?1
sec-fetch-dest: document
accept-encoding: gzip, deflate, br, zstd
accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7</code></pre>
<p>Скрипт на requests отправляет четыре поля в другом порядке и без единого заголовка группы Sec-Fetch. Библиотека честно сообщает о себе строкой <code>python-requests/2.31</code>, и площадке этого достаточно для однозначной классификации. Подстановка браузерного User-Agent поверх такого запроса картину не выравнивает: порядок полей и отсутствие группы Sec-Fetch остаются на месте.</p>
<div class="tabl"><table><thead><tr><th>Поле</th><th>Что сообщает площадке</th><th>Кто его формирует</th></tr></thead><tbody><tr><td><code>Accept</code></td><td>Какие типы содержимого принимает клиент</td><td>Программа</td></tr><tr><td><code>Accept-Language</code></td><td>Языки интерфейса и их приоритет</td><td>Настройки браузера</td></tr><tr><td><code>Accept-Encoding</code></td><td>Поддерживаемые способы сжатия</td><td>Программа</td></tr><tr><td><code>Sec-Fetch-Site</code></td><td>Откуда инициирован переход</td><td>Браузер, скриптом не подделывается</td></tr><tr><td><code>Sec-Fetch-Dest</code></td><td>Что запрашивается: документ, картинка, шрифт</td><td>Браузер</td></tr><tr><td><code>Referer</code></td><td>Предыдущая страница в цепочке</td><td>Браузер либо код запроса</td></tr><tr><td><code>Via</code>, <code>X-Forwarded-For</code></td><td>Факт прохождения через посредника</td><td>Посредник</td></tr></tbody></table></div>
<p>Последняя строка таблицы касается уже самого посредника. Обычный прозрачный шлюз дописывает к запросу служебные поля с адресом исходного клиента, и тогда вся конструкция теряет смысл: площадка читает исходный адрес прямо из заголовка. Мы такие поля к запросу не добавляем: выход отдаёт площадке только свой адрес. Про ступени подмены подробно написано в разборе <a href="https://iprazon.com/proxy/anonimnye">анонимных прокси без служебных заголовков</a>, там же собран список заголовков для первой проверки.</p>
<p>Проверяется состав заголовков одной командой к эхо-сервису. Ответ приходит списком полей ровно в том виде, в каком их получил удалённый сервер, поэтому лишнее поле видно сразу и без разбора трафика.</p>
<pre><code>curl -s -x http://203.0.113.24:8000 https://httpbin.org/headers | jq .headers</code></pre>
<p>Отдельного внимания требует группа Sec-Fetch. Браузер заполняет её сам на уровне движка, скриптом эти поля не переопределяются, и по ним площадка отличает переход по ссылке от прямого обращения к адресу страницы. Запрос от библиотеки приходит без всей группы целиком, и это самый дешёвый способ классификации из всех, которые площадка может себе позволить.</p>
<h2 id="otpechatok-tls-rukopozhatie-do-pervogo-bayta">Отпечаток TLS: рукопожатие до первого байта HTTP</h2>
<p>Прежде чем уйдёт первый заголовок HTTP, клиент и сервер обмениваются пакетами TLS. Первый пакет клиента, ClientHello, содержит версию протокола, список поддерживаемых шифров, набор расширений, эллиптические кривые, алгоритмы подписи и список протоколов ALPN. Всё это идёт в определённом порядке, и порядок задаётся библиотекой шифрования, которую использует программа.</p>
<p>Из этого набора считается короткая подпись. Схема JA3 сворачивает поля ClientHello в хеш, более свежая JA4 разбивает подпись на читаемые части и устойчивее к перестановке расширений. Площадке достаточно посчитать подпись на границе сети и сравнить со списком известных значений.</p>
<pre><code># сравнение отпечатков двух клиентов через публичный сервис
curl --socks5-hostname 203.0.113.24:1080 https://tls.peet.ws/api/all | jq .tls.ja3_hash</code></pre>
<p>Расхождение выглядит так. В заголовке заявлен Chrome под Windows, а рукопожатие приходит от OpenSSL со списком шифров, которого у Chrome никогда не было. Площадка сопоставляет два признака за один шаг. Мы разбирали такие обращения десятки раз: адреса пула отвечают ровно, отклик стабильный, отказ приходит из-за библиотеки, которая ходит своим рукопожатием.</p>
<p>Отпечаток TLS формируется клиентской программой целиком. Посредник переносит байты рукопожатия дальше без изменений, потому что содержимое туннеля ему недоступно. Выравнивается признак заменой транспорта: браузер вместо библиотеки либо библиотека с имитацией браузерного ClientHello, такие сборки существуют для Go, Python и Node.</p>
<h2 id="chto-otdaet-sam-brauzer-yazyk-poyas-ekran-i-">Что отдаёт сам браузер: язык, пояс, экран и шрифты</h2>
<p>Следующая группа признаков рождается внутри браузера и до сети вообще не относится. Скрипт на странице читает их обычными вызовами, без разрешений и без диалоговых окон. Посредник тут ничего изменить не может: он переносит уже готовые байты.</p>
<h3 id="yazyk-chasovoy-poyas-i-lokal">Язык, часовой пояс и локаль</h3>
<p>Язык уходит двумя путями сразу. Первый это заголовок <code>Accept-Language</code>, он приходит с каждым запросом. Второй это свойства объекта navigator, которые читает любой скрипт на странице. Часовой пояс скрипт получает через штатный интерфейс интернационализации.</p>
<pre><code>navigator.language            // "ru-RU"
navigator.languages           // ["ru-RU", "ru", "en-US", "en"]
Intl.DateTimeFormat().resolvedOptions().timeZone   // "Europe/Moscow"
new Date().getTimezoneOffset()                     // -180</code></pre>
<p>Дальше площадка сравнивает три величины: приблизительную географию адреса, часовой пояс браузера и языковой список. Совпадение всех трёх выглядит естественно. Расхождение между поясом и адресом само по себе встречается у миллионов обычных пользователей в поездках, поэтому один такой признак ничего не решает, вес он набирает в сочетании с остальными.</p>
<p>Наш пул это микс со всего мира, адреса приходят из множества стран, выборка по отдельной стране не делается. Практический вывод простой: языковой список и пояс настраиваются в профиле браузера один раз под ту картину, которая нужна для работы, и дальше остаются постоянными от сессии к сессии. Постоянство здесь весит больше, чем конкретное значение.</p>
<h3 id="ekran-grafika-i-nabor-shriftov">Экран, графика и набор шрифтов</h3>
<p>Скрипт на странице читает геометрию окна и параметры экрана без всяких разрешений. Доступны ширина и высота, рабочая область без панелей, глубина цвета, плотность пикселей.</p>
<pre><code>screen.width + "x" + screen.height        // 1920x1080
screen.availHeight                        // 1032
window.devicePixelRatio                   // 1.25</code></pre>
<p>Отдельная группа признаков идёт от подсистемы графики. Отрисовка текста и фигур в элемент canvas даёт слегка разный результат на разных связках драйвера, шрифтового движка и видеокарты, и хеш от полученной картинки работает как метка. Через WebGL читается строка производителя и модели видеоадаптера. Через звуковой контекст снимается похожая подпись на уровне обработки сигнала.</p>
<p>Шрифты перебираются проверкой ширины тестовой строки: скрипт рисует одну и ту же надпись сотней шрифтов и смотрит, где ширина изменилась. Набор установленных шрифтов сильно различается между машинами, поэтому список даёт заметный вклад в общий отпечаток.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Как снимается</th><th>Что различает</th></tr></thead><tbody><tr><td>Разрешение экрана</td><td>Свойства объекта screen</td><td>Модель монитора и настройки системы</td></tr><tr><td>Плотность пикселей</td><td><code>devicePixelRatio</code></td><td>Масштабирование интерфейса</td></tr><tr><td>Canvas</td><td>Хеш отрисованной картинки</td><td>Связку драйвера и шрифтового движка</td></tr><tr><td>WebGL</td><td>Строка производителя и модели адаптера</td><td>Видеокарту</td></tr><tr><td>AudioContext</td><td>Подпись обработанного сигнала</td><td>Звуковой стек системы</td></tr><tr><td>Шрифты</td><td>Перебор по ширине тестовой строки</td><td>Состав установленных шрифтов</td></tr><tr><td>WebRTC</td><td>Служебный обмен кандидатами соединения</td><td>Внутренние адреса сетевых интерфейсов</td></tr></tbody></table></div>
<p>Последняя строка требует внимания отдельно: механизм голосовой связи в браузере умеет сообщать адреса сетевых интерфейсов мимо посредника. Проверяется и отключается он в пару шагов, порядок описан в материале про <a href="/proverka/webrtc/">проверку и отключение WebRTC</a>.</p>
<h2 id="cookies-hranilische-i-kesh">Cookies, хранилище и кеш</h2>
<p>Cookies это самая старая и самая надёжная метка, которую площадка ставит сама. Она пережила все поколения приватных режимов просто потому, что её выдаёт сервер и хранит браузер. Посредник к содержимому хранилища отношения не имеет: файлы лежат в профиле на диске рабочей машины.</p>
<p>Кроме cookies браузер держит localStorage, sessionStorage, базы IndexedDB, кеш сервис-воркеров и кеш HTTP. Последний тоже работает меткой: сервер отдаёт картинку с уникальным значением ETag, браузер при следующем визите присылает это значение обратно в заголовке <code>If-None-Match</code>, и площадка узнаёт посетителя без единой cookie.</p>
<p>Отсюда самое частое расхождение ожиданий. Человек берёт адрес из пула, открывает ту же вкладку того же браузера и обнаруживает прежнюю сессию. Причина лежит в профиле: адрес сменился, хранилище осталось прежним. Мы советуем разводить задачи по отдельным профилям браузера, чтобы каждому набору задач соответствовало своё хранилище и свой набор меток.</p>
<h2 id="povedenie-mysh-klaviatura-i-ritm-zaprosov">Поведение: мышь, клавиатура и ритм запросов</h2>
<p>Последняя группа признаков снимается уже во время работы со страницей. Скрипты собирают траекторию курсора, паузы между нажатиями клавиш, скорость прокрутки, время до первого клика, порядок обхода полей формы. Живая работа даёт неровные интервалы: человек задумывается, возвращается, промахивается мимо кнопки.</p>
<p>Автоматический обход выглядит иначе. Курсор перемещается по прямой либо не перемещается вовсе, текст в поле появляется целиком за один тик, интервал между запросами держится ровным до миллисекунды. Ровный интервал вообще самый заметный из поведенческих признаков, потому что для его подсчёта скрипты не нужны: достаточно журнала обращений на стороне сервера.</p>
<div class="tabl"><table><thead><tr><th>Поведенческий признак</th><th>Что выдаёт автоматику</th><th>Как выравнивается</th></tr></thead><tbody><tr><td>Траектория курсора</td><td>Прямая линия либо полное отсутствие движения</td><td>Эмуляция движений в софте</td></tr><tr><td>Скорость ввода</td><td>Мгновенная вставка целой строки</td><td>Посимвольный ввод с разбросом пауз</td></tr><tr><td>Интервал между запросами</td><td>Одинаковые промежутки в журнале сервера</td><td>Случайная задержка в заданных границах</td></tr><tr><td>Глубина просмотра</td><td>Один запрос на страницу, ноль прокрутки</td><td>Догрузка сопутствующих файлов</td></tr><tr><td>Параллельность</td><td>Десятки одновременных обращений с одного выхода</td><td>Распределение по адресам пула</td></tr></tbody></table></div>
<p>Последний пункт напрямую связан с числом доступных выходов. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, при двух привязанных адресах общий лимит делится пополам. Ротация внутри пула автоматическая, поэтому параллельная нагрузка расходится по разным адресам сама, без ручного распределения на стороне софта. Как это устроено со стороны пакета, описано на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к пулу</a>.</p>
<h2 id="svodnaya-tablica-priznak-kto-ego-otdaet-chem">Сводная таблица: признак, кто его отдаёт, чем закрывается</h2>
<p>Ниже собрано всё разобранное выше в одном месте. Колонка «кто отдаёт» отвечает на вопрос, где физически рождается признак. Колонка «чем закрывается» показывает, какой инструмент за него отвечает.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Кто его отдаёт</th><th>Чем закрывается</th></tr></thead><tbody><tr><td>Адрес соединения</td><td>Сетевой стек, узел на маршруте</td><td>Прокси, адрес берётся из пула</td></tr><tr><td>Владелец диапазона и номер AS</td><td>Публичные базы по адресу выхода</td><td>Прокси, характеристика выходного узла</td></tr><tr><td>Служебные заголовки посредника</td><td>Сам посредник</td><td>Прокси без подстановки служебных полей</td></tr><tr><td>Запрос к службе имён</td><td>Сетевые настройки программы</td><td>SOCKS5 с разрешением имён на стороне выхода</td></tr><tr><td>WebRTC</td><td>Браузер, обмен кандидатами соединения</td><td>Настройка браузера, отключение механизма</td></tr><tr><td>User-Agent</td><td>Браузер либо программа</td><td>Профиль антидетект-браузера</td></tr><tr><td>Client Hints</td><td>Браузер на движке Chromium</td><td>Профиль антидетект-браузера</td></tr><tr><td>Состав и порядок заголовков</td><td>Программа, которая шлёт запрос</td><td>Выбор клиента, браузерная сборка библиотеки</td></tr><tr><td>Отпечаток TLS</td><td>Библиотека шифрования клиента</td><td>Браузер либо сборка с браузерным ClientHello</td></tr><tr><td>Язык и часовой пояс</td><td>Настройки браузера и системы</td><td>Профиль браузера, постоянные значения</td></tr><tr><td>Экран и плотность пикселей</td><td>Браузер, свойства объекта screen</td><td>Профиль браузера</td></tr><tr><td>Canvas, WebGL, AudioContext</td><td>Графический и звуковой стек машины</td><td>Профиль антидетект-браузера с подменой</td></tr><tr><td>Набор шрифтов</td><td>Система</td><td>Профиль антидетект-браузера</td></tr><tr><td>Cookies и хранилище</td><td>Браузер, файлы профиля на диске</td><td>Отдельный профиль под каждую задачу</td></tr><tr><td>Поведение и ритм запросов</td><td>Действия пользователя либо софта</td><td>Настройки пауз и параллельности в софте</td></tr></tbody></table></div>
<p>Читается таблица сверху вниз как порядок работ. Первые четыре строки закрывает пакет прокси. Строка про WebRTC требует одной галочки в настройках браузера. Всё, что ниже, живёт в профиле браузера и в настройках рабочей программы.</p>
<p>Полезно смотреть на вес строк. Адрес соединения и служебные заголовки посредника весят больше всего, потому что они попадают в журнал сервера при каждом обращении и разбираются без единой строки скрипта. Отпечаток TLS идёт следом: подпись считается на границе сети, до разбора запроса. Графические подписи и набор шрифтов набирают вес медленнее и работают в связке с остальными признаками. Поведенческая группа замыкает список, зато именно она чаще всего срабатывает на длинных прогонах, когда транспорт и профиль давно настроены и повторяется один и тот же ритм обращений.</p>
<p>Ещё один вывод касается порядка исправлений. Признаки сетевого слоя закрываются один раз выбором пакета и настройкой доступа. Это самая быстрая часть работы: наши пакеты с высокой ступенью подмены дают выход без служебных полей, и дальше к нему уже не возвращаются. Признаки браузера требуют настройки профиля, а поведение настраивается в самом софте, и обе эти части живут своей жизнью от задачи к задаче.</p>
<h2 id="kak-sobrat-priznaki-v-soglasovannyy-nabor">Как собрать признаки в согласованный набор</h2>
<p>Сначала фиксируется транспорт. Для браузерных задач берём HTTP и HTTPS, для программ с произвольными портами и скриптов удобнее <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a>: имя домена разрешается на стороне выходного узла, и запросы к службе имён не уходят мимо туннеля. Про эту утечку и её проверку есть отдельный разбор в материале про <a href="/proverka/utechka-dns/">запросы к DNS</a>. В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, адреса при этом одни и те же, меняется только строка подключения, поэтому переход с одного протокола на другой ничего не стоит по времени.</p>
<p>Дальше собирается профиль браузера. Один профиль это одна задача: своя строка User-Agent, свой язык, свой часовой пояс, своё хранилище, свой набор графических подписей. Профиль запоминается целиком и переиспользуется, потому что постоянство признаков от сессии к сессии выглядит естественнее, чем свежий набор при каждом запуске.</p>
<p>Третий шаг это проверка. Сверяем адрес на выходе, состав заголовков, отпечаток TLS и утечку через WebRTC. Проверка занимает несколько минут и снимает большую часть будущих вопросов, а подробный порядок с командами разобран на странице про <a href="/proverka/proverka-anonimnosti/">проверку анонимности</a>.</p>
<pre><code># что видит площадка: адрес, заголовки и отпечаток рукопожатия
curl -x http://203.0.113.24:8000 https://ifconfig.me
curl -x http://203.0.113.24:8000 https://httpbin.org/headers
curl -x http://203.0.113.24:8000 https://tls.peet.ws/api/all</code></pre>
<p>Четвёртый шаг это нагрузка. Интервалы между запросами задаются с разбросом, параллельность держится в пределах лимита пакета, тяжёлые прогоны разносятся по времени. Пул около 12 000 адресов и автоматическая ротация дают разнообразие выходов, дальше картину формирует сам софт своими настройками. Совокупность из ровного транспорта, постоянного профиля и разумного ритма работает заметно лучше, чем любой из трёх пунктов по отдельности, и именно в таком составе мы рекомендуем её собирать.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="zakryvaet-li-proksi-otpechatok-brauzera">Закрывает ли прокси отпечаток браузера?</h3>
<p>Прокси закрывает сетевой слой: площадка принимает соединение от выходного узла и записывает в журнал его адрес. Строка User-Agent, заголовки Client Hints, отпечаток TLS, шрифты, экран и графические подписи рождаются на стороне клиентской программы, поэтому за них отвечают настройки браузера и профиль антидетекта. Оба слоя нужны вместе, и таблица выше показывает, какой инструмент закрывает какую строку. Сетевую часть целиком берут на себя <a href="https://iprazon.com/proxy/anonimnye">прокси с высокой ступенью анонимности</a>, которые отдают площадке только адрес выходного узла.</p>
<h3 id="kak-proverit-kakoy-adres-vidit-ploschadka">Как проверить, какой адрес видит площадка?</h3>
<p>Один запрос через <code>curl</code> на сервис, который возвращает адрес обращения, показывает выходной узел за секунду. Для массовой проверки списка подойдёт чекер от Zennolab, у него есть демонстрационная версия: он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Перед покупкой доступен бесплатный тест до 2 часов, и проверку удобно провести именно в нём, на своём софте и своих целевых доменах.</p>
<h3 id="pochemu-adres-v-dvuh-zaprosah-podryad-raznyy">Почему адрес в двух запросах подряд разный?</h3>
<p>Ротация внутри пула автоматическая, список из примерно 12 000 адресов обновляется в режиме реального времени. Соседние запросы штатно уходят с разных выходов, и это признак исправной работы пула. Если задача требует держать серию обращений с одного выхода, порядок настраивается на стороне софта через параметры сессии и длину пачки запросов.</p>
<h3 id="mozhno-li-poluchit-adresa-opredelennoy-stran">Можно ли получить адреса определённой страны?</h3>
<p>Нет, наш пул это микс со всего мира, выборка по отдельной стране не делается. Адреса приходят из множества стран, всего в списке представлено 200+ стран, и такая схема даёт разнообразие подсетей без ручной настройки. Для сбора открытых данных, проверки выдачи и работы с несколькими кабинетами разнообразие подсетей весит больше, чем конкретная точка на карте.</p>
<p>Продолжение темы в соседних материалах раздела: <a href="/osnovy/urovni-anonimnosti/">уровни анонимности прокси</a> с разбором служебных заголовков по ступеням, <a href="/osnovy/chto-takoe-proxy-ipv4/">что такое прокси IPv4</a> с полным путём запроса по шагам, <a href="/osnovy/servernye-adresa/">серверные адреса</a> и их происхождение. Практическую часть закрывает статья про <a href="/proverka/kak-proverit/">проверку работы прокси</a> с командами и разбором кодов ответа.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/chto-vidit-sayt/">https://kupit-proxy-ipv4.ru/osnovy/chto-vidit-sayt/</a></p>]]></content:encoded></item>
<item><title>Авторизация прокси: привязка своего адреса и доступ по логину с паролем</title><link>https://kupit-proxy-ipv4.ru/osnovy/avtorizaciya/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/avtorizaciya/</guid><description>Доступ к пулу открывается одним из двух способов: привязкой адреса рабочей машины в кабинете либо парой логина и пароля внутри строки подключения. При…</description><content:encoded><![CDATA[
<p class="vvod">Доступ к пулу открывается одним из двух способов: привязкой адреса рабочей машины в кабинете либо парой логина и пароля внутри строки подключения. При привязке список выдаётся в формате <code>IP:PORT</code> и никаких учётных данных вводить не нужно, при доступе по логину список приходит в формате <code>IP:PORT:LOGIN:PASS</code>, и эта пара подставляется в настройки программы.</p>
<p>Оба способа входят в пакет, переключаться между ними можно в любой момент и без доплаты. Ниже разобрано, как устроен каждый, где именно вводится строка в браузере, в curl и в прикладных программах, что делать при меняющемся адресе провайдера, почему привязок в пакете две и как при двух привязках делится лимит потоков. Отдельным разделом идут коды ошибок, по которым способ доступа опознаётся с первого запроса.</p>
<h2 id="dva-sposoba-dostupa-gde-zhivet-proverka-prav">Два способа доступа: где живёт проверка права</h2>
<p>Разница между способами сводится к одному вопросу: по какому признаку выходной узел узнаёт своего клиента. Мы держим на узлах обе проверки одновременно, поэтому клиент сам выбирает удобный ему порядок.</p>
<p>При привязке узел смотрит на адрес источника входящего соединения и сверяет его со списком, который клиент завёл в кабинете. Совпало, соединение принято. Не совпало, соединение закрывается ещё до обмена по протоколу HTTP. Такой список принято называть whitelist по IP, и вся проверка укладывается в одно сравнение.</p>
<p>При доступе по логину узел ждёт учётные данные внутри протокола. В HTTP они приезжают заголовком <code>Proxy-Authorization</code>, в SOCKS5 отдельным шагом рукопожатия. Пока пары нет, узел отвечает кодом 407 и держит соединение открытым, ожидая повтора запроса уже с данными.</p>
<div class="tabl"><table><thead><tr><th>Сравнение</th><th>Привязка адреса</th><th>Логин и пароль</th></tr></thead><tbody><tr><td>Что проверяется</td><td>Адрес источника соединения</td><td>Пара внутри протокола</td></tr><tr><td>Формат списка</td><td><code>IP:PORT</code></td><td><code>IP:PORT:LOGIN:PASS</code></td></tr><tr><td>Где хранится доступ</td><td>Настройки кабинета</td><td>Настройки программы</td></tr><tr><td>Работа с нескольких машин</td><td>В пределах привязок пакета</td><td>С любого числа машин</td></tr><tr><td>Меняющийся адрес провайдера</td><td>Требует правки в кабинете</td><td>Работает без правок</td></tr><tr><td>Отказ при ошибке настройки</td><td>Соединение закрывается</td><td>Ответ с кодом 407</td></tr><tr><td>Куда подходит лучше</td><td>Сервер и стационарная рабочая станция</td><td>Ноутбук, облачный сборщик, чужая площадка</td></tr></tbody></table></div>
<p>Мы выдаём оба формата в одном разделе кабинета, поэтому смена способа доступа сводится к переключателю в настройках. Многие наши клиенты держат оба варианта сразу: сервер работает по привязке, ноутбук ходит по логину. Ограничений на такое сочетание нет, доплаты за второй формат тоже.</p>
<h2 id="privyazka-svoego-adresa-kak-ona-ustroena-izn">Привязка своего адреса: как она устроена изнутри</h2>
<p>Привязка это запись в списке доступа на стороне выходного узла. В кабинете открывается раздел настроек, туда вписывается внешний адрес машины, с которой пойдут запросы, и через минуту список доступа обновляется. Дальше программа обращается к паре <code>IP:PORT</code> без каких-либо учётных данных.</p>
<p>Первый шаг всегда одинаковый: узнать свой настоящий внешний адрес. Тот адрес, который видно в настройках сетевой карты, обычно внутренний, наружу трафик выходит под адресом, который выдал оператор связи.</p>
<pre><code># внешний адрес рабочей машины
curl -s https://ifconfig.me
curl -s https://api.ipify.org</code></pre>
<pre><code># то же самое из PowerShell на Windows
(Invoke-RestMethod https://api.ipify.org)</code></pre>
<p>Полученную строку вписываем в кабинет. Работать привязка начинает почти сразу, поэтому проверять доступ можно тем же запросом, только уже через выходной узел. Про сам порядок настройки в кабинете есть отдельный подробный разбор в материале про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса</a>.</p>
<p>Удобство привязки в том, что учётные данные вообще нигде не хранятся. Строка подключения короткая, её видно целиком в любом поле настроек, случайно испортить нечего. Программы, которые плохо переваривают пару логина и пароля в строке, работают с таким форматом без единой правки: конфигурация сводится к адресу и порту. Именно поэтому серверные скрипты, планировщики и системные утилиты обычно ставят на привязку.</p>
<p>Второе удобство касается журналов. При привязке в конфигурационных файлах и в командах истории оболочки не остаётся ничего, кроме адреса и порта. Администратор копирует команду коллеге, выкладывает фрагмент конфигурации в задачу трекера и ничего при этом не раскрывает.</p>
<p>Есть у привязки и естественная граница применения. Проверка держится на адресе источника, поэтому запросы должны уходить с той машины, которая записана в кабинете. Мы смотрим на это так: привязка отлично закрывает стационарную инфраструктуру, где адрес известен заранее и держится месяцами, а вся подвижная часть парка переводится на второй способ. Наши пакеты дают оба варианта сразу, и распределять машины между ними можно как угодно.</p>
<h2 id="dostup-po-loginu-i-parolyu-kak-on-ustroen">Доступ по логину и паролю: как он устроен</h2>
<p>Логин и пароль приходят вместе со списком в формате <code>IP:PORT:LOGIN:PASS</code>. Пара одна на пакет, она подставляется ко всем адресам списка сразу, и это упрощает работу: сменился набор выходных узлов, учётные данные остались прежними.</p>
<p>В HTTP обмен выглядит так. Программа отправляет запрос, узел отвечает <code>407 Proxy Authentication Required</code> и заголовком <code>Proxy-Authenticate: Basic</code>, программа повторяет запрос уже с заголовком <code>Proxy-Authorization: Basic &lt;base64 логина и пароля&gt;</code>. Дальше туннель поднимается методом CONNECT, и весь дальнейший обмен идёт внутри него.</p>
<pre><code>&gt; CONNECT example.com:443 HTTP/1.1
&gt; Host: example.com:443
&gt; Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk
&lt; HTTP/1.1 200 Connection established</code></pre>
<p>В SOCKS5 порядок другой и короче. Клиент присылает список поддерживаемых методов аутентификации, узел выбирает метод с номером 02, клиент отправляет логин и пароль отдельным пакетом, узел подтверждает и переходит к передаче данных. Никаких заголовков, весь обмен идёт на уровне самого протокола. Подробности сокетного варианта разобраны на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-socks5">подключить прокси SOCKS5 к программам</a>.</p>
<p>Главное практическое достоинство этого способа: машина может быть любой. Ноутбук в дороге, виртуальный сервер у стороннего хостинга, облачный сборщик, чужой компьютер на проекте у заказчика. Адрес источника при этом никого не интересует, потому что право на доступ приезжает вместе с запросом.</p>
<h2 id="formaty-ip-port-i-ip-port-login-pass-v-realn">Форматы <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code> в реальном списке</h2>
<p>Список забирается в кабинете двумя путями: ссылкой либо файлом. Формат выбирается там же. Ссылка удобна там, где софт умеет подтягивать список сам, файл проще для ручного импорта и раздачи коллегам.</p>
<pre><code># формат под привязанный адрес
185.24.87.14:8000
185.24.87.15:8000
185.24.87.16:1080

# формат с учётными данными
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd
185.24.87.16:1080:user5521:pf39kd</code></pre>
<p>Порт в обоих форматах один и тот же, различие сидит только в наличии пары после порта. Отсюда типовая ошибка импорта: программа ждёт две колонки, получает четыре и разбирает строку неверно. Некоторые парсеры при этом молча берут первые два поля и продолжают работу, а некоторые отказываются читать файл целиком.</p>
<div class="tabl"><table><thead><tr><th>Формат</th><th>Когда берём</th><th>Куда подходит</th></tr></thead><tbody><tr><td><code>IP:PORT</code>, ссылка</td><td>Софт обновляет список сам</td><td>A-Parser, ZennoPoster, планировщики задач</td></tr><tr><td><code>IP:PORT</code>, файл</td><td>Разовый импорт руками</td><td>Проверочные чекеры, ручные прогоны</td></tr><tr><td><code>IP:PORT:LOGIN:PASS</code>, ссылка</td><td>Список тянет облачный сборщик</td><td>Сервисы без стабильного адреса выхода</td></tr><tr><td><code>IP:PORT:LOGIN:PASS</code>, файл</td><td>Раздача внутри команды</td><td>Антидетект-браузеры, профили сотрудников</td></tr></tbody></table></div>
<p>Список адресов обновляется в режиме реального времени, пул держится в районе 12 000 активных адресов. Практический вывод такой: перед крупным прогоном список перечитывается заново. Способ доступа при этом не меняется, меняется только набор строк. Разбор строки подключения по полям, вместе с портами и протоколами, вынесен в отдельный материал про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения</a>.</p>
<h2 id="gde-vvoditsya-kazhdyy-variant-brauzer-curl-p">Где вводится каждый вариант: браузер, curl, программы</h2>
<p>Здесь способы расходятся сильнее всего, потому что интерфейсы у программ разные, а логика одна: адрес и порт вводятся всегда, пара логина и пароля вводится только при втором способе.</p>
<h3 id="brauzer">Браузер</h3>
<p>Firefox держит настройки посредника внутри себя: раздел параметров сети, ручная настройка, поля адреса и порта отдельно для HTTP и для SOCKS. При доступе по логину окно с запросом учётных данных появляется при первом же обращении, и браузер предлагает их запомнить. Chrome и браузеры на Chromium берут системные настройки, поэтому пара вводится в системном окне.</p>
<pre><code># запуск Chromium с явным указанием посредника
chrome.exe --proxy-server="http://185.24.87.14:8000"
chrome.exe --proxy-server="socks5://185.24.87.16:1080"</code></pre>
<p>Ключ командной строки принимает адрес и порт, учётные данные через него не передаются, поэтому запуск с ключом удобнее сочетать с привязкой. Когда рабочих профилей несколько и каждому нужен свой выход, вопрос закрывают браузерные профили с полями логина и пароля прямо в карточке профиля, как это устроено в <a href="https://iprazon.com/instrumenty/dolphin">браузере Dolphin Anty</a>.</p>
<h3 id="curl-i-komandnaya-stroka">curl и командная строка</h3>
<p>В curl оба варианта пишутся одной строкой. Ключ <code>-x</code> задаёт посредника целиком, ключ <code>-U</code> выносит пару отдельно, что удобнее для скриптов с переменными.</p>
<pre><code># доступ по привязанному адресу
curl -x http://185.24.87.14:8000 https://ifconfig.me

# доступ по логину, учётные данные внутри ключа -x
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# то же самое, пара вынесена отдельно
curl -x http://185.24.87.14:8000 -U user5521:pf39kd https://ifconfig.me

# SOCKS5 с разрешением имён на стороне выхода
curl --socks5-hostname 185.24.87.16:1080 -U user5521:pf39kd https://ifconfig.me</code></pre>
<p>Переменные окружения работают в том же ключе и подхватываются большинством консольных утилит, включая wget, git и пакетные менеджеры.</p>
<pre><code>export http_proxy="http://user5521:pf39kd@185.24.87.14:8000"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1"</code></pre>
<h3 id="prikladnye-programmy-i-kod">Прикладные программы и код</h3>
<p>Парсеры и сборщики обычно принимают строку целиком в поле настроек. A-Parser и ZennoPoster читают файл со списком и понимают оба формата, антидетект-браузеры просят разложить строку по четырём полям. В коде картина такая же.</p>
<pre><code>import requests

proxies = {
    "http":  "http://user5521:pf39kd@185.24.87.14:8000",
    "https": "http://user5521:pf39kd@185.24.87.14:8000",
}
r = requests.get("https://ifconfig.me", proxies=proxies, timeout=15)
print(r.status_code, r.text)</code></pre>
<p>Мы обычно советуем начинать с привязки на сервере и переходить на логин там, где адрес источника непостоянен. Полный набор портов и протоколов, который принимает пакет, описан на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-http">купить прокси HTTP для браузера и софта</a>.</p>
<h2 id="menyayuschiysya-adres-provaydera-poryadok-de">Меняющийся адрес провайдера: порядок действий</h2>
<p>Домашние и офисные подключения часто получают новый внешний адрес после перезагрузки роутера либо по расписанию оператора. Для привязки это означает ровно одно: старая запись перестала совпадать с источником, и соединения закрываются.</p>
<p>Вариантов действий два, и оба рабочие.</p>
<p>Первый: менять привязанный адрес прямо в настройках кабинета. Ограничений на число смен нет, правка занимает секунды и вступает в силу почти сразу. Тем, у кого адрес меняется раз в сутки, этого достаточно. Тема переезда на другую машину и смены записи разобрана отдельно в материале про <a href="/podklyuchenie/smena-privyazki/">смену привязанного адреса</a>.</p>
<p>Второй: перейти на формат с логином и паролем. Тогда адрес источника перестаёт участвовать в проверке совсем, и работа продолжается при любых перестановках у оператора связи. Список в нужном формате берётся в том же разделе кабинета.</p>
<div class="tabl"><table><thead><tr><th>Ситуация с адресом</th><th>Что выбрать</th><th>Что делать при смене</th></tr></thead><tbody><tr><td>Статический адрес на сервере</td><td>Привязка</td><td>Ничего, запись живёт постоянно</td></tr><tr><td>Адрес меняется раз в сутки</td><td>Привязка</td><td>Поправить запись в кабинете</td></tr><tr><td>Адрес меняется по нескольку раз в день</td><td>Логин и пароль</td><td>Ничего, проверка от адреса не зависит</td></tr><tr><td>Работа с двух площадок сразу</td><td>Две привязки либо логин</td><td>Заполнить обе записи в кабинете</td></tr><tr><td>Работа с ноутбука в разъездах</td><td>Логин и пароль</td><td>Ничего</td></tr><tr><td>Облачный сборщик со сменным выходом</td><td>Логин и пароль</td><td>Ничего</td></tr></tbody></table></div>
<h2 id="dve-privyazki-v-pakete-i-delenie-limita-poto">Две привязки в пакете и деление лимита потоков</h2>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Типовой сценарий она закрывает целиком: рабочая станция и сервер, офис и домашний кабинет сотрудника, основная машина и резервная. Менять записи разрешено свободно, без ограничений по числу правок.</p>
<p>Одна деталь напрямую влияет на расчёт нагрузки, и её стоит держать в голове с самого начала. При двух привязанных адресах общий лимит потоков делится между ними пополам. Пакет на 1000 потоков при двух заполненных записях даёт по 500 потоков на каждый адрес.</p>
<div class="tabl"><table><thead><tr><th>Заполнено привязок</th><th>Лимит пакета</th><th>Доступно на адрес</th></tr></thead><tbody><tr><td>Одна</td><td>1000</td><td>1000 на единственный адрес</td></tr><tr><td>Две</td><td>1000</td><td>по 500 на каждый</td></tr><tr><td>Одна, корпоративный пакет</td><td>3000</td><td>3000 на единственный адрес</td></tr><tr><td>Две, корпоративный пакет</td><td>3000</td><td>по 1500 на каждый</td></tr></tbody></table></div>
<p>Отсюда практическая рекомендация. Когда основной прогон идёт с одной машины, вторую запись разумно держать пустой до того момента, когда она реально понадобится. Мы регулярно разбираем обращения, где софт упирается в потолок соединений при формально свободном лимите, и причина сидит именно во второй заполненной записи, про которую давно забыли.</p>
<p>Складывать пакеты по потокам нельзя: два пакета на одном аккаунте работают каждый со своим лимитом. Ограничений на число пакетов у аккаунта при этом нет, поэтому команды с независимыми проектами обычно берут отдельный пакет под каждый и разводят их по разным привязкам. Как устроен такой формат работы для группы, описано на странице про <a href="https://iprazon.com/proxy/privatnye">приватный доступ к пулу адресов</a>.</p>
<h2 id="oshibki-nevernogo-sposoba-dostupa-407-i-otka">Ошибки неверного способа доступа: 407 и отказ соединения</h2>
<p>По ответу узла способ доступа опознаётся с первой попытки, потому что ошибки у двух вариантов принципиально разные.</p>
<p>Код 407 приходит тогда, когда узел ждёт пару логина и пароля. Соединение при этом установлено, обмен по протоколу начался, узел прямо сообщает, чего ему недостаёт. Частые причины: список взят в коротком формате, пара потеряна при копировании, программа разложила строку по полям неверно, пароль содержит символ, который требует кодирования в адресной строке.</p>
<pre><code># так выглядит 407 в подробном выводе curl
curl -v -x http://185.24.87.14:8000 https://example.com
&lt; HTTP/1.1 407 Proxy Authentication Required
&lt; Proxy-Authenticate: Basic realm="proxy"</code></pre>
<p>Отказ соединения выглядит иначе. Ответа нет вовсе, curl завершается с ненулевым кодом за доли секунды. Это признак того, что узел ждал привязанный адрес и не нашёл источник в списке доступа. Вторая возможная причина: запрос ушёл с той машины, которую в кабинет вписать забыли.</p>
<pre><code>curl -x http://185.24.87.14:8000 https://example.com
# curl: (56) Recv failure: Connection reset by peer
echo $?   # 56</code></pre>
<div class="tabl"><table><thead><tr><th>Что видно</th><th>Код</th><th>Причина</th><th>Что делать</th></tr></thead><tbody><tr><td><code>407 Proxy Authentication Required</code></td><td>407</td><td>Узел ждёт логин и пароль</td><td>Взять список в формате с учётными данными</td></tr><tr><td>Ответ 407 при верной паре</td><td>407</td><td>Спецсимвол пароля в адресной строке</td><td>Вынести пару в ключ <code>-U</code> либо закодировать</td></tr><tr><td><code>Connection reset by peer</code></td><td>56</td><td>Источник вне списка доступа</td><td>Вписать текущий адрес машины в кабинет</td></tr><tr><td><code>Connection refused</code></td><td>7</td><td>Порт закрыт на стороне сети клиента</td><td>Проверить исходящие правила и порт</td></tr><tr><td><code>Operation timed out</code></td><td>28</td><td>Обращение не дошло до узла</td><td>Проверить маршрут и адрес из списка</td></tr><tr><td>Ответ 200 с прежним адресом на выходе</td><td>200</td><td>Программа обошла настройки посредника</td><td>Проверить переменные окружения и настройки софта</td></tr></tbody></table></div>
<p>Подробный разбор именно кода 407, со всеми частными случаями программ и форматов, вынесен в отдельную статью про <a href="/proverka/oshibka-407/">ошибку 407</a>. Здесь достаточно запомнить простое правило: 407 говорит про недостающую пару, мгновенный обрыв говорит про адрес вне списка.</p>
<p>Отдельная история это пароль со спецсимволами. Знак решётки, косая черта, вопросительный знак и амперсанд внутри адресной строки разбираются как служебные, и программа обрезает пару в неожиданном месте. Мы разбираем такие обращения постоянно, лечится это двумя путями: пара выносится в отдельные поля программы либо символы кодируются процентной записью. В curl проще всего использовать ключ <code>-U</code>, там строка читается целиком и никакого разбора адреса не происходит.</p>
<p>Ещё один случай выглядит совсем безобидно: запрос проходит, код 200 приходит, а на выходе виден прежний адрес машины. Значит, программа обошла настройки посредника стороной. Мы проверяем это первым делом при разборе жалоб на неработающий доступ: сравниваем адрес прямого запроса и адрес запроса через выход. Полный список портов и протоколов, которые принимают наши узлы, собран там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>, а разбор форматов авторизации для браузерного трафика лежит на странице про <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP с авторизацией по паре логина и пароля</a>.</p>
<h2 id="smena-privyazki-v-kabinete-i-pereklyuchenie-">Смена привязки в кабинете и переключение между способами</h2>
<p>Все правки делаются в одном разделе кабинета. Открывается список пакетов, выбирается нужный, внутри лежат поля привязанных адресов и переключатель формата выдачи. Порядок действий короткий.</p>
<p>1. Узнать текущий внешний адрес машины запросом к сервису эха. 2. Открыть настройки пакета в кабинете. 3. Вписать адрес в свободное поле привязки либо заменить прежнее значение. 4. Сохранить и подождать применения, обычно это меньше минуты. 5. Проверить доступ запросом через любой адрес из списка.</p>
<p>Переключение на логин и пароль делается тем же порядком: в разделе выдачи выбирается формат <code>IP:PORT:LOGIN:PASS</code>, список перечитывается, учётные данные подставляются в программу. Прежние привязки при этом можно оставить, они мешать не будут: узел примет соединение по любому из двух признаков.</p>
<pre><code># короткая проверка после любой правки доступа
curl -sS -o /dev/null -m 15 -w 'code=%{http_code} time=%{time_total}\n' \
  -x http://185.24.87.14:8000 https://api.ipify.org</code></pre>
<p>Ответ <code>code=200</code> с разумным временем отклика означает, что доступ настроен верно. Пакет включается примерно за 5 минут после оплаты, и первая проверка делается сразу после включения, до запуска рабочего прогона. Мы советуем прогонять эту команду каждый раз после правки настроек: она занимает секунду и снимает половину вопросов заранее.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Менять записи разрешено без ограничений прямо в настройках кабинета. При двух привязанных адресах общее число потоков делится между ними пополам, поэтому вторую запись стоит заполнять тогда, когда работа действительно идёт с двух машин.</p>
<h3 id="chto-delat-pri-dinamicheskom-adrese-provayde">Что делать при динамическом адресе провайдера?</h3>
<p>Привязанный адрес можно менять без ограничений прямо в настройках кабинета, правка занимает секунды. Второй путь: взять список в формате <code>IP:PORT:LOGIN:PASS</code> и работать по логину, тогда адрес источника в проверке не участвует вовсе. Оба формата доступны в одном разделе кабинета и входят в пакет.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два на выбор: <code>IP:PORT</code> для работы по привязанному адресу и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину с паролем. Забрать список можно двумя путями: получить ссылку либо скачать файл. Список обновляется в режиме реального времени, поэтому перед крупным прогоном его стоит перечитать.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и покупки указывается свой адрес в настройках либо берётся формат с логином. Пакет включается примерно за 5 минут, после чего раздел выдачи начинает отдавать список. Перед покупкой доступен бесплатный тест до 2 часов, и настройку доступа удобно пройти именно в нём, вместе с оператором.</p>
<p>Тему продолжают соседние материалы раздела: <a href="/osnovy/chto-takoe-proxy-ipv4/">что такое прокси IPv4</a> с разбором пути запроса по шагам, <a href="/osnovy/privatnyy-i-obshchiy/">приватный доступ и общий пул</a> про устройство доступа к адресам, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a> с расчётом по потокам. Практическую часть закрывает статья про <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a>, от оплаты до рабочего запроса.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/avtorizaciya/">https://kupit-proxy-ipv4.ru/osnovy/avtorizaciya/</a></p>]]></content:encoded></item>
<item><title>Сколько адресов нужно под задачу: считаем потоки и частоту обращений</title><link>https://kupit-proxy-ipv4.ru/osnovy/skolko-adresov-nuzhno/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/osnovy/skolko-adresov-nuzhno/</guid><description>Величина для расчёта здесь одна: число одновременных потоков и частота обращений к целевому сайту. Количество адресов задаётся пакетом целиком, доступ…</description><content:encoded><![CDATA[
<p class="vvod">Величина для расчёта здесь одна: число одновременных потоков и частота обращений к целевому сайту. Количество адресов задаётся пакетом целиком, доступ открывается ко всему пулу примерно из 12 000 активных строк, ротация внутри пула идёт автоматически, поэтому штуки считать не приходится.</p>
<p>Дальше разобрана арифметика. Как из объёма прогона получить требуемую скорость, как из скорости и среднего времени отклика получить число потоков, какой лимит записан в стандартном пакете и в корпоративном, почему потоки разных пакетов складывать нельзя. В конце три сценария с цифрами: сбор прайсов поставщиков, съём позиций по семантике и работа с несколькими рабочими кабинетами.</p>
<h2 id="pochemu-vopros-skolko-adresov-upiraetsya-v-p">Почему вопрос «сколько адресов» упирается в потоки</h2>
<p>Формулировка «мне нужно тридцать прокси» пришла из схемы, где покупатель получает короткий фиксированный список строк и раздаёт их своим процессам руками. У нас пакет открывает доступ ко всему пулу сразу, список забирается ссылкой или файлом в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, обновляется он в реальном времени. Ограничивает работу лимит одновременных потоков, записанный в пакете.</p>
<p>Поток это соединение, которое программа держит открытым в конкретный момент времени. A-Parser показывает эту величину в настройках задания, ZennoPoster в свойствах проекта, Key Collector в параметрах сбора, обычный <code>curl</code> в связке с <code>xargs -P</code> принимает её флагом. Когда мы считаем нагрузку, мы смотрим именно в это поле. Всё остальное производные: сколько страниц пройдено за час, сколько времени займёт полный прогон, упрётся ли софт в потолок пакета.</p>
<p>Счёт идёт по потокам. Отсюда простое следствие: два человека с одинаковым списком целевых страниц могут спокойно работать на разных лимитах, потому что у одного отклик целевого домена держится около секунды, а второй ждёт ответа по три секунды и вынужден компенсировать это числом параллельных соединений. Разбор устройства адреса и подсети лежит в отдельном материале про <a href="/osnovy/podset-i-diapazon/">подсеть и диапазон</a>, здесь идёт только арифметика нагрузки.</p>
<h2 id="schitaem-trebuemuyu-skorost-stranicy-delim-n">Считаем требуемую скорость: страницы делим на часы прогона</h2>
<p>Первая величина считается за минуту. Берём число целевых страниц за один прогон, делим на количество часов, которые отведены под работу, получаем требуемую скорость в запросах за час. Никаких коэффициентов на этом шаге не вводим, они появятся дальше.</p>
<p>Отдельно отмечаем два момента. Первый: страницы считаются по факту запросов, число товаров тут обманывает, потому что карточка часто требует двух обращений (сама страница плюс запрос к внутреннему методу с ценой или остатком). Второй: в число входят повторные попытки. Если по опыту прошлых прогонов доля повторов держится около десяти процентов, объём умножается на 1.1 до всякого деления.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Обращений за прогон</th><th>Часов на прогон</th><th>Запросов в час</th></tr></thead><tbody><tr><td>Прайс одного крупного поставщика</td><td>40 000</td><td>8</td><td>5 000</td></tr><tr><td>Остатки по трём складам за ночь</td><td>90 000</td><td>12</td><td>7 500</td></tr><tr><td>Съём позиций по средней семантике</td><td>12 000</td><td>6</td><td>2 000</td></tr><tr><td>Ежедневная сверка узкого ассортимента</td><td>3 000</td><td>3</td><td>1 000</td></tr><tr><td>Проверка своего сайта со стороны</td><td>600</td><td>2</td><td>300</td></tr><tr><td>Мониторинг цен по расписанию раз в час</td><td>1 400</td><td>1</td><td>1 400</td></tr></tbody></table></div>
<p>Цифра из правой колонки дальше идёт во все расчёты. Она же отвечает на вопрос про срок доступа: разовая выгрузка укладывается в сутки, повторяющийся прогон удобнее держать на месячном доступе к пулу, потому что ручное продление каждые семь дней рано или поздно забывается и останавливает работу посреди ночного окна.</p>
<h2 id="iz-skorosti-i-vremeni-otklika-poluchaem-chis">Из скорости и времени отклика получаем число потоков</h2>
<p>Вторая величина выводится из первой. Переводим запросы в час в запросы в секунду, умножаем на среднее время отклика целевого домена в секундах и получаем минимальное число потоков, при котором заданная скорость держится. Формула короткая, проверяется на калькуляторе.</p>
<pre><code># потоки = запросы в секунду * среднее время отклика
# запросы в секунду = обращения / (часы * 3600)

python3 - &lt;&lt;'PY'
pages, hours, latency = 40000, 8, 1.2
rps = pages / (hours * 3600)
print(round(rps, 2), "запросов в секунду")
print(round(rps * latency, 1), "потоков по формуле")
PY</code></pre>
<p>Среднее время отклика берём измерением. Один вызов <code>curl</code> через пул на реальный целевой адрес показывает полное время запроса, двадцать таких вызовов подряд дают среднее, по которому уже можно считать:</p>
<pre><code>for i in $(seq 1 20); do
  curl -o /dev/null -s -w "%{time_total}\n" \
    -x http://185.24.87.14:8000 https://example.com/catalog/page/1
done | awk '{s+=$1} END {print "среднее:", s/NR, "с"}'</code></pre>
<div class="tabl"><table><thead><tr><th>Запросов в час</th><th>Запросов в секунду</th><th>Отклик, с</th><th>Потоков по формуле</th><th>Ставим в софте</th></tr></thead><tbody><tr><td>300</td><td>0.08</td><td>1.5</td><td>1</td><td>4</td></tr><tr><td>1 000</td><td>0.28</td><td>2.0</td><td>1</td><td>6</td></tr><tr><td>2 000</td><td>0.56</td><td>2.0</td><td>2</td><td>8</td></tr><tr><td>5 000</td><td>1.39</td><td>1.2</td><td>2</td><td>10</td></tr><tr><td>7 500</td><td>2.08</td><td>3.0</td><td>7</td><td>20</td></tr><tr><td>60 000</td><td>16.7</td><td>2.5</td><td>42</td><td>60</td></tr><tr><td>250 000</td><td>69.4</td><td>4.0</td><td>278</td><td>400</td></tr></tbody></table></div>
<p>Правая колонка отличается от расчётной в три раза с округлением вверх, и запас берётся осознанно. Часть соединений в любой момент висит в ожидании ответа, часть страниц отдаётся медленнее среднего, часть обращений уходит на повтор после таймаута, и без запаса реальная скорость проседает ниже плановой уже на второй час прогона. Тройной коэффициент выдерживает эти три источника задержки одновременно и при этом далеко не подходит к потолку пакета.</p>
<h2 id="limit-potokov-v-pakete-1000-3000-i-pochemu-o">Лимит потоков в пакете: 1000, 3000 и почему они не складываются</h2>
<p>Стандартные пакеты дают до 1000 одновременных потоков, корпоративный месяц поднимает лимит до 3000. Величина записана в самом пакете и работает поверх всех настроек софта: программа может просить сколько угодно соединений, наружу пройдёт столько, сколько разрешено.</p>
<p>На лимит влияет привязка. В пакет входит одновременная привязка 2 адресов со свободной сменой в настройках кабинета, и при двух привязанных адресах общее число потоков делится между ними пополам. Пакет на 1000 потоков при двух привязках отдаёт по 500 на каждую машину. Это ровно та деталь, которую забывают при расчёте: администратор считал нагрузку по полной цифре, а рабочая машина упирается в половину и логи наполняются отказами.</p>
<div class="tabl"><table><thead><tr><th>Пакет</th><th>Лимит потоков</th><th>Одна привязка</th><th>Две привязки</th></tr></thead><tbody><tr><td>Сутки</td><td>до 1000</td><td>1000</td><td>по 500</td></tr><tr><td>Неделя</td><td>до 1000</td><td>1000</td><td>по 500</td></tr><tr><td>Месяц</td><td>до 1000</td><td>1000</td><td>по 500</td></tr><tr><td>Корпоративный месяц</td><td>до 3000</td><td>3000</td><td>по 1500</td></tr></tbody></table></div>
<p>Потоки разных пакетов не складываются. Два стандартных пакета на одном аккаунте дают два независимых лимита по 1000, каждый работает сам по себе, общей суммы в две тысячи потоков из них не получится. Причина в устройстве учёта: лимит привязан к пакету и к адресу, с которого идут запросы, поэтому один прогон с одной машины видит потолок одного пакета.</p>
<p>Отсюда рабочее правило. Рост нагрузки внутри одного прогона закрывается переходом на старший пакет, а параллельные независимые прогоны спокойно разводятся по разным пакетам на одном аккаунте: ограничений на число пакетов у учётной записи нет. Агентство держит по пакету на клиента, разработчик добавляет второй под отдельный проект, и каждый из них живёт со своим лимитом. Состав пакета по потокам и привязкам подробно расписан в материале про <a href="/pokupka/chto-vhodit-v-paket/">то, что входит в пакет</a>.</p>
<h2 id="rotaciya-vnutri-pula-iz-12-000-adresov-snima">Ротация внутри пула из 12 000 адресов снимает вопрос количества</h2>
<p>Пул держит около 12 000 активных адресов в сутки, список обновляется в реальном времени, ротация внутри пула автоматическая. Практический смысл этой цифры такой: запросы одного прогона расходятся по множеству адресов и подсетей сами, без ручной раздачи строк по потокам и без отдельной логики перебора в софте.</p>
<p>Из этого следует ответ на исходный вопрос. Задача, для которой в старой схеме потребовалось бы тридцать или триста строк, здесь закрывается одним пакетом с подходящим лимитом потоков, потому что пул один и он общий для всех потоков клиента. Считать нужно скорость и параллельность, количество берётся готовым.</p>
<p>География пула это микс со всего мира, адреса приходят из 200+ стран. Для сбора открытых данных, съёма выдачи и разведения рабочих профилей такая схема даёт разнообразие подсетей без ручной настройки: соседние запросы уходят из разных диапазонов, и целевой сайт видит их как обращения из разных сетей.</p>
<p>Трафик при этом безлимитный на всех сроках. Объём выкачки в расчёт числа потоков не входит совсем: тысяча страниц по 50 килобайт и тот же миллион страниц считаются одинаково, разница только во времени прогона. Тем, у кого объём заранее неизвестен и меняется от недели к неделе, спокойнее работается на пакетах, где действует <a href="https://iprazon.com/proxy/bezlimitnye">доступ к пулу без счётчика выкачки</a>.</p>
<h2 id="sbor-praysov-postavschikov-raschet-na-cifrah">Сбор прайсов поставщиков: расчёт на цифрах</h2>
<p>Магазин снимает прайсы у шести поставщиков, суммарно 40 000 карточек, окно ночное с полуночи до восьми утра. Половина поставщиков отдаёт цену прямо в разметке карточки, вторая половина требует дополнительного обращения к внутреннему методу, поэтому реальных запросов выходит около 60 000. Делим на 8 часов, получаем 7 500 запросов в час.</p>
<p>Отклик по измерению держится около 1.8 секунды, площадки крупные и отвечают ровно. Запросов в секунду выходит 2.08, потоков по формуле около четырёх, в софте ставим 15. Прогон укладывается в окно с запасом, и даже при просадке отклика вдвое скорость остаётся плановой. Лимит стандартного пакета здесь используется на полтора процента, и это нормальная картина для одиночного парсера.</p>
<div class="tabl"><table><thead><tr><th>Величина</th><th>Значение</th><th>Откуда взялась</th></tr></thead><tbody><tr><td>Карточек за прогон</td><td>40 000</td><td>Каталоги шести поставщиков</td></tr><tr><td>Реальных обращений</td><td>60 000</td><td>Часть карточек требует второго запроса</td></tr><tr><td>Окно прогона</td><td>8 часов</td><td>Ночное расписание</td></tr><tr><td>Требуемая скорость</td><td>7 500 запросов в час</td><td>60 000 делим на 8</td></tr><tr><td>Средний отклик</td><td>1.8 с</td><td>Замер 20 вызовами <code>curl</code></td></tr><tr><td>Потоков по формуле</td><td>4</td><td>2.08 умножаем на 1.8</td></tr><tr><td>Ставим в софте</td><td>15</td><td>Формула с тройным запасом</td></tr><tr><td>Срок доступа</td><td>месяц</td><td>Прогон повторяется каждую ночь</td></tr></tbody></table></div>
<p>Ситуация меняется, когда магазин переходит на почасовую сверку остатков перед высоким сезоном. Окно сжимается до часа, объём остаётся прежним, требуемая скорость подскакивает в восемь раз, и число потоков вслед за ней уходит к 120. Стандартный лимит это выдерживает без запаса по нервам. Под такой режим подходят <a href="https://iprazon.com/proxy/dlya-parsinga">адреса под сбор данных парсерами</a>, где нагрузка идёт постоянным фоном. Подробный разбор магазинного сценария лежит в материале про <a href="/zadachi/internet-magazin/">работу с поставщиками и остатками</a>.</p>
<h2 id="sem-poziciy-raschet-na-cifrah">Съём позиций: расчёт на цифрах</h2>
<p>Съём выдачи считается иначе, потому что единица работы здесь проверка одного ключа в одной поисковой системе. Семантика на 4 000 запросов, глубина проверки три страницы выдачи, две поисковые системы. Обращений получается 4 000 умножить на 3 и на 2, итого 24 000 за один съём.</p>
<p>Съём делается раз в неделю и растягивается на 6 часов, чтобы частота обращений к выдаче держалась ровной. Требуемая скорость 4 000 запросов в час, это 1.11 в секунду. Отклик у страниц выдачи заметно выше каталожного, около 2.5 секунды с учётом редиректов. Потоков по формуле выходит 3, в софте ставим 12.</p>
<p>Здесь важнее ровность, чем максимум. Key Collector и близкие программы дают задать паузу между обращениями и разброс этой паузы, и связка «умеренные потоки плюс разброс» держит съём стабильнее, чем попытка выжать всю семантику за сорок минут на двухстах потоках. Настройки для этой программы разобраны на странице про <a href="https://iprazon.com/instrumenty/key-collector">работу Key Collector через пул</a>.</p>
<p>Отдельно считаем случай агентства. Двадцать проектов, средняя семантика по 1 500 ключей, съём раз в неделю по всем сразу, окно двое суток. Обращений 20 умножить на 1 500, на 3 и на 2, итого 180 000. При 48 часах это 3 750 запросов в час, потоков по формуле около трёх, в софте 12 при последовательном обходе проектов. Если же агентство запускает проекты параллельно на разных серверах, каждый сервер получает свой пакет и свой лимит, и суммарная нагрузка распределяется без упора в потолок. Тонкости съёма разобраны отдельно в материале про <a href="/zadachi/seo-pozicii/">позиции и работу с выдачей</a>.</p>
<h2 id="neskolko-rabochih-kabinetov-schet-po-profily">Несколько рабочих кабинетов: счёт по профилям</h2>
<p>Третий сценарий устроен принципиально иначе. В работе с кабинетами и профилями антидетект-браузера нагрузка низкая, обращений мало, зато соединения живут долго: открытая вкладка держит поток всё время, пока сотрудник работает. Здесь число потоков считается по числу одновременно открытых профилей, умноженному на среднее количество параллельных соединений браузера.</p>
<p>Один профиль антидетект-браузера в активной работе держит от 6 до 12 соединений: сама страница, статика, запросы к внутренним методам интерфейса, фоновые опросы. Берём верхнюю границу. Команда из пяти человек, у каждого по три открытых профиля, итого 15 профилей и около 180 потоков в пике. Стандартный лимит это покрывает с большим запасом.</p>
<div class="tabl"><table><thead><tr><th>Профилей в работе</th><th>Соединений на профиль</th><th>Потоков в пике</th><th>Комментарий</th></tr></thead><tbody><tr><td>3</td><td>12</td><td>36</td><td>Один сотрудник, три кабинета</td></tr><tr><td>15</td><td>12</td><td>180</td><td>Команда из пяти человек</td></tr><tr><td>40</td><td>12</td><td>480</td><td>Отдел, одна привязка</td></tr><tr><td>40</td><td>12</td><td>480</td><td>Две привязки, упор в половину лимита</td></tr><tr><td>90</td><td>12</td><td>1 080</td><td>Корпоративный пакет</td></tr></tbody></table></div>
<p>Четвёртая строка таблицы показывает ту самую ловушку с делением. Сорок профилей дают 480 потоков, лимит при двух привязанных адресах составляет 500 на машину, и запас исчезает полностью: любая всплывающая нагрузка вроде массовой загрузки медиа упирается в потолок. Выход простой: оставить одну привязку на время работы отдела либо перейти на корпоративный пакет. Командам, где профили разведены по сотрудникам, подходит <a href="https://iprazon.com/proxy/privatnye">приватный доступ к пулу для рабочей группы</a>, а сам порядок разведения кабинетов разобран в материале про <a href="/zadachi/neskolko-kabinetov/">несколько кабинетов одной компании</a>.</p>
<h2 id="kak-proverit-raschet-za-dva-testovyh-chasa">Как проверить расчёт за два тестовых часа</h2>
<p>Расчёт проверяется до покупки. Бесплатный тест длится до 2 часов под конкретный запрос, и этого времени хватает, чтобы снять три величины: реальное среднее время отклика на своих целевых доменах, долю успешных ответов при рабочей частоте обращений и число потоков, при котором целевой сайт продолжает отвечать ровно.</p>
<p>Порядок запуска короткий. Выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Пакет после оплаты включается примерно за 5 минут, тестовый доступ открывается тем же порядком.</p>
<div class="tabl"><table><thead><tr><th>Что снимаем в тесте</th><th>Как</th><th>Куда идёт цифра</th></tr></thead><tbody><tr><td>Среднее время отклика</td><td>20 вызовов <code>curl</code> с <code>%{time_total}</code></td><td>Множитель в формуле потоков</td></tr><tr><td>Доля успешных ответов</td><td>Прогон на 500 запросов, разбор кодов</td><td>Поправка на повторы в объёме</td></tr><tr><td>Рабочее число потоков</td><td>Ступенчатый рост: 10, 25, 50, 100</td><td>Значение в настройках софта</td></tr><tr><td>Формат строки подключения</td><td>Импорт списка в свою программу</td><td>Выбор между <code>IP:PORT</code> и парой с логином</td></tr></tbody></table></div>
<p>Ступенчатый рост потоков даёт больше информации, чем один прогон на выбранной цифре. Поднимаем в четыре приёма и на каждой ступени смотрим, как ведёт себя время отклика: пока оно держится ровным, запас есть, а как только среднее пошло вверх при том же наборе страниц, рабочая точка найдена и её берём с округлением вниз. Записанные цифры дальше превращаются в выбор пакета за пару минут, и повторный тест для этого уже не понадобится.</p>
<p>Когда все три величины сняты, остаётся выбрать срок и оформить доступ там, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">взять пакет прокси IPv4 с нужным лимитом</a>. Для задач, где прогоны идут круглосуточно и объём выкачки заранее неизвестен, ровнее всего работает <a href="https://iprazon.com/proxy/bezlimitnye">безлимитный объём на любом сроке доступа</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chto-vhodit-v-proksi-pul-i-skolko-tam-adreso">Что входит в прокси-пул и сколько там адресов?</h3>
<p>В пуле около 12 000 активных IPv4 и SOCKS5, онлайн держится в этом районе в сутки, список адресов обновляется в режиме реального времени. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Доступ к пулу открыт только клиентам сервиса.</p>
<h3 id="est-li-limity-po-potokam-i-kak-oni-schitayut">Есть ли лимиты по потокам и как они считаются?</h3>
<p>У каждого пакета свой лимит. При двух привязанных адресах общее число потоков делится между ними пополам, поэтому пакет на 1000 потоков отдаёт по 500 на машину. Пакеты по потокам не складываются: два пакета работают как два независимых лимита. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения.</p>
<h3 id="skolko-paketov-mozhno-derzhat-na-odnom-akkau">Сколько пакетов можно держать на одном аккаунте?</h3>
<p>Ограничений нет. Под параллельные независимые прогоны удобно оформить отдельные пакеты на той же учётной записи: у каждого будет свой срок и свой лимит потоков, а баланс и настройки остаются общими.</p>
<h3 id="kak-ponyat-chto-rasschitannogo-limita-hvatit">Как понять, что рассчитанного лимита хватит под мою задачу?</h3>
<p>Заранее предугадать поведение каждого целевого сайта нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Тест проходит на вашем софте и ваших доменах, за это время снимаются отклик, доля успешных ответов и рабочее число потоков.</p>
<p>Соседние материалы раздела дополняют расчёт: <a href="/osnovy/privatnyy-i-obshchiy/">приватный доступ и общий пул</a> объясняют, чем доступ ко всему пулу отличается от короткого списка строк, <a href="/osnovy/servernye-adresa/">серверные адреса</a> показывают, откуда берётся сам пул, <a href="/osnovy/avtorizaciya/">два способа доступа</a> разбирают привязку и логин, от которых зависит деление лимита пополам. Когда цифры сняты и пакет выбран, следующий шаг описан в разборе про <a href="/pokupka/srok-dostupa/">выбор срока доступа</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/osnovy/skolko-adresov-nuzhno/">https://kupit-proxy-ipv4.ru/osnovy/skolko-adresov-nuzhno/</a></p>]]></content:encoded></item>
<item><title>Какие прокси покупать под конкретную задачу: протокол, потоки и срок доступа</title><link>https://kupit-proxy-ipv4.ru/pokupka/kakie-proxy-pokupat/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/kakie-proxy-pokupat/</guid><description>Выбор сводится к четырём величинам: протокол под свой софт, число одновременных потоков под нагрузку, срок доступа под частоту задачи и формат выдачи списка.…</description><content:encoded><![CDATA[
<p class="vvod">Выбор сводится к четырём величинам: протокол под свой софт, число одновременных потоков под нагрузку, срок доступа под частоту задачи и формат выдачи списка. Под сбор данных и съём позиций берут HTTP с HTTPS, под почту, произвольные порты и приложения на сокетах берут SOCKS5, потоки считают по нагрузке прогона, срок ставят по тому, разовая задача или повторяющаяся.</p>
<p>Ниже разобрано по сценариям: сбор данных, съём позиций, несколько рабочих кабинетов, отправка почты и проверка своего сайта со стороны. По каждому указан протокол, разумный порядок потоков, срок и список того, что проверяется в тестовом окне. Отдельным разделом идёт то, что покупать не стоит, включая бесплатные открытые списки.</p>
<h2 id="chetyre-velichiny-iz-kotoryh-skladyvaetsya-v">Четыре величины, из которых складывается выбор</h2>
<p>Задача описывается одной фразой без прилагательных: собрать прайсы поставщиков, снять позиции по семантике, развести рабочие кабинеты, отправить рассылку с рабочего адреса, посмотреть на собственный сайт из другой сети. Формулировка задаёт всё остальное, поэтому она идёт первой.</p>
<p>Протокол диктует софт. Парсеры, чекеры выдачи и браузеры ходят по HTTP и HTTPS, программы с произвольными портами и приложения, работающие на уровне сокетов, предпочитают SOCKS. В пакете доступны IPv4 с HTTP и HTTPS, а также SOCKS4 и SOCKS5 на выбор, из сокетной пары рекомендуется пятая версия: она умеет передавать разрешение имён на сторону посредника и работает поверх произвольных портов.</p>
<p>Потоки считаются по нагрузке. Стандартные пакеты дают до 1000 одновременных потоков, корпоративный месяц до 3000, и подавляющее большинство рабочих сценариев укладывается в первую цифру с большим запасом. Порядок расчёта разобран отдельно в материале про <a href="/osnovy/skolko-adresov-nuzhno/">число потоков под задачу</a>, здесь берутся готовые ориентиры.</p>
<p>Срок это то, за что мы платим: доступ к пулу на сутки, неделю, месяц или корпоративный месяц. Трафик безлимитный на всех вариантах, объём выкачки на выбор не влияет совсем.</p>
<div class="tabl"><table><thead><tr><th>Величина</th><th>Чем определяется</th><th>Где смотреть</th></tr></thead><tbody><tr><td>Задача</td><td>Одной фразой без прилагательных</td><td>Формулируется до кабинета</td></tr><tr><td>Протокол</td><td>Требованиями софта</td><td>Поля подключения в программе</td></tr><tr><td>Потоки</td><td>Скоростью прогона и откликом</td><td>Настройки задания в парсере</td></tr><tr><td>Срок</td><td>Разовая задача или повторяющаяся</td><td>Расписание запусков</td></tr><tr><td>Формат выдачи</td><td>Способом доступа</td><td>Кабинет, раздел выдачи списка</td></tr></tbody></table></div>
<p>Формат выдачи стоит пятым и решается за секунду. <code>IP:PORT</code> берётся, когда рабочий адрес привязан в кабинете, <code>IP:PORT:LOGIN:PASS</code> берётся, когда машин несколько или адрес машины меняется. Оба формата мы выдаём в пакете, забрать список можно ссылкой или файлом.</p>
<p>Шестым пунктом держим в голове привязку. Мы даём в пакете одновременную привязку 2 адресов со свободной сменой прямо в настройках, и при двух привязанных адресах общий лимит потоков делится между ними пополам. Когда основной прогон идёт с одной машины, вторую привязку мы оставляем пустой до момента, когда она реально понадобится, иначе расчёт по полной цифре упрётся в половину лимита и логи наполнятся отказами. Пакет включается примерно за 5 минут после оплаты, поэтому переиграть выбор срока или протокола можно почти сразу после первого прогона. Наш состав по протоколам, потокам и привязкам целиком виден там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<h2 id="sbor-dannyh-i-parsing-http-s-https-potoki-po">Сбор данных и парсинг: HTTP с HTTPS, потоки по прогону</h2>
<p>Парсеры каталогов, прайсов и остатков работают по HTTP и HTTPS. A-Parser, Netpeak Spider, самописные сборщики на <code>requests</code> и <code>aiohttp</code> принимают строку посредника в одном поле, и никаких дополнительных библиотек под этот протокол ставить не приходится. Сокетный вариант эти программы тоже принимают, выигрыш появляется на прогонах, где страница тянет ресурсы с десятка доменов.</p>
<p>Потоки в таком сценарии редко выходят за пределы сотни. Прогон на 60 000 обращений за восьмичасовое ночное окно требует около 2 запросов в секунду, а при среднем отклике 1.8 секунды формула даёт четыре потока, и в софте ставится 15 с тройным запасом. Крупные ежедневные выгрузки на несколько сотен тысяч страниц поднимают цифру до 200 или 400 потоков, что всё ещё вдвое ниже стандартного лимита.</p>
<p>Срок ставится по расписанию. Разовая выгрузка каталога поставщика закрывается сутками, регулярный ночной прогон живёт на месячном доступе. Для постоянной работы сборщиков подходят <a href="https://iprazon.com/proxy/dlya-parsinga">адреса под сбор открытых данных</a>, где нагрузка идёт ровным фоном каждую ночь.</p>
<pre><code># проверка целевой страницы через HTTP-посредник
curl -x http://185.24.87.14:8000 -o /dev/null -s \
  -w "код %{http_code}, время %{time_total} с\n" \
  https://example-shop.com/catalog/page/1</code></pre>
<p>В тестовом окне по этому сценарию мы смотрим три вещи: код ответа целевого домена при рабочей частоте обращений, ровность времени отклика от запроса к запросу и поведение своей программы при импорте списка. Третий пункт неочевиден и стоит потраченных минут: часть сборщиков ждёт логин с паролем отдельными полями и ломает строку, склеенную через двоеточие.</p>
<h2 id="sem-poziciy-te-zhe-protokoly-upor-na-rovnost">Съём позиций: те же протоколы, упор на ровность обращений</h2>
<p>Проверка выдачи устроена мягче парсинга по нагрузке и жёстче по требованиям к ритму. Key Collector, A-Parser в режиме съёма и близкие программы обращаются к страницам выдачи по HTTPS, и главная величина здесь пауза между обращениями с разбросом, а вслед за ней уже потоки.</p>
<p>Семантика на 4 000 запросов при глубине в три страницы и двух поисковых системах даёт 24 000 обращений за съём. Растянутый на шесть часов, он требует 4 000 запросов в час, это чуть больше одного в секунду. При отклике 2.5 секунды формула выдаёт три потока, в софте ставится 12. Умеренная параллельность с разбросом пауз держит съём стабильнее, чем попытка пройти всю семантику за сорок минут на двух сотнях соединений.</p>
<p>Срок берётся недельный при разовой проверке и месячный при регулярном съёме. Еженедельная задача на месячном доступе избавляет от четырёх ручных продлений, каждое из которых можно забыть посреди ночного окна.</p>
<div class="tabl"><table><thead><tr><th>Что проверяем в тесте</th><th>Как</th><th>Признак пригодности</th></tr></thead><tbody><tr><td>Отклик страниц выдачи</td><td>20 вызовов <code>curl</code> с <code>%{time_total}</code></td><td>Среднее держится ровным</td></tr><tr><td>Код ответа</td><td>Прогон на 200 ключей</td><td>Рабочие коды по всей выборке</td></tr><tr><td>Разнообразие подсетей</td><td>Сверка выходных адресов подряд</td><td>Соседние запросы из разных диапазонов</td></tr><tr><td>Импорт списка в программу</td><td>Загрузка файла из кабинета</td><td>Программа приняла все строки</td></tr></tbody></table></div>
<p>Разнообразие подсетей проверяется одной строкой: несколько запросов подряд на сервис, который возвращает выходной адрес. Наш пул устроен как микс со всего мира, ротацию внутри него мы держим автоматической, поэтому соседние обращения уходят из разных диапазонов без ручной настройки перебора. Отдельную логику перебора строк в софте писать не нужно совсем.</p>
<h2 id="neskolko-rabochih-kabinetov-socks5-i-schet-p">Несколько рабочих кабинетов: SOCKS5 и счёт по профилям</h2>
<p>Работа с рекламными и торговыми кабинетами считается по числу одновременно открытых профилей. Антидетект-браузеры принимают и HTTP, и SOCKS5, при этом сокетный вариант удобнее: разрешение имён уходит на сторону посредника, и картина по выходному адресу получается цельной без отдельной настройки в самом браузере.</p>
<p>Один активный профиль держит от 6 до 12 соединений сразу: страница, статика, внутренние методы интерфейса, фоновые опросы. Пять сотрудников по три профиля дают 15 профилей и около 180 потоков в пике, отдел на сорок профилей выходит к 480. Стандартный лимит покрывает оба случая, при этом в расчёт входит одна деталь: в пакет входит одновременная привязка 2 адресов со свободной сменой, и при двух привязках общее число потоков делится пополам.</p>
<p>Срок здесь всегда длинный. Кабинеты живут месяцами, профили переоткрываются ежедневно, поэтому доступ берётся на месяц, а при большом отделе на корпоративный месяц с лимитом до 3000 потоков. Тем, у кого работа идёт постоянным потоком без сезонных пауз, ровнее всего заходит <a href="https://iprazon.com/proxy/na-mesyats">доступ к пулу на месяц</a>.</p>
<pre><code># профиль антидетекта, строка подключения по SOCKS5
socks5://user5521:pf39kd@185.24.87.14:8000

# та же машина, доступ по привязке адреса без пары логина
socks5://185.24.87.14:8000</code></pre>
<p>В тесте по этому сценарию мы открываем два профиля с разными строками подключения и смотрим, что выходные адреса у них различаются, интерфейс кабинета грузится полностью, а фоновые запросы не отваливаются по таймауту. Двух часов на такую проверку хватает с избытком.</p>
<h2 id="otpravka-pochty-socks5-obyazatelen-potoki-mi">Отправка почты: SOCKS5 обязателен, потоки минимальные</h2>
<p>Почтовый сценарий стоит особняком. SMTP работает поверх собственного протокола на портах 25, 465 и 587, обычный HTTP-посредник такие соединения не переносит, поэтому здесь берётся SOCKS5. Приём почты по IMAP и POP3 устроен так же и требует того же сокетного варианта.</p>
<p>Нагрузка в почтовых задачах низкая. Отправка нескольких сотен писем в час укладывается в 5 или 10 потоков, крупная рассылка на десятки тысяч адресов редко просит больше 50 одновременных сессий, потому что почтовые серверы принимающей стороны сами держат ритм и охотнее работают с ровным потоком. Основная работа здесь идёт в настройках почтового клиента и в заголовках письма.</p>
<pre><code># отправка через сокетный посредник, порт 587 с STARTTLS
swaks --to check@example.com --from robot@mydomain.ru \
  --server smtp.mydomain.ru:587 --tls \
  --socks5 185.24.87.14:8000</code></pre>
<p>Срок берётся по характеру рассылки: разовая отправка закрывается сутками, постоянная переписка через рабочий адрес живёт на месячном доступе. Под этот сценарий подходит вариант, где нужно <a href="https://iprazon.com/products/kupit-proxy-socks5">взять доступ по протоколу SOCKS5</a>, потому что переключение между четвёртой и пятой версией делается прямо в строке подключения. Разбор самой отправки лежит в материале про <a href="/protokoly/smtp-cherez-proxy/">SMTP через посредник</a>.</p>
<p>В тестовом окне проверяются три вещи: соединение с почтовым сервером по выбранному порту, прохождение приветствия и авторизации, доставка одного тестового письма на свой ящик. Если письмо дошло и заголовки в нём выглядят как задумано, сценарий рабочий.</p>
<h2 id="proverka-svoego-sayta-so-storony-minimum-pot">Проверка своего сайта со стороны: минимум потоков, короткий срок</h2>
<p>Самый лёгкий сценарий из всех. Администратор смотрит на собственный сайт из другой сети: проверяет, как отдаётся кеш, видна ли региональная версия, работает ли редирект, что показывает страница до входа в личный кабинет. Обращений десятки, потоков хватает пяти.</p>
<p>Протокол здесь HTTP с HTTPS, потому что вся работа идёт в браузере и в <code>curl</code>. Настройка в браузере занимает минуту, в консоли и того меньше. Для разовых проверок берётся суточный доступ, для регулярного мониторинга доступности недельный или месячный.</p>
<pre><code># сравнение ответа напрямую и через посредник
curl -s -o /dev/null -w "прямо: %{http_code} %{time_total}\n" https://mydomain.ru/
curl -s -o /dev/null -w "через пул: %{http_code} %{time_total}\n" \
  -x http://185.24.87.14:8000 https://mydomain.ru/</code></pre>
<p>Две строки выше закрывают половину задачи: расхождение кодов или заметная разница во времени сразу показывает, что сайт по-разному отвечает своим и чужим сетям. Под такой сценарий берётся простой вариант, где достаточно <a href="https://iprazon.com/products/kupit-proxy-http">подключить прокси по HTTP в браузере</a>. Порядок первой проверки описан в разборе про <a href="/proverka/kak-proverit/">то, как убедиться, что прокси работает</a>.</p>
<h2 id="svodnaya-tablica-zadacha-protokol-potoki-sro">Сводная таблица: задача, протокол, потоки, срок</h2>
<p>Таблица собирает всё сказанное выше в одну картину. Цифры потоков даны как рабочие ориентиры с запасом относительно расчётной величины.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Протокол</th><th>Потоки</th><th>Срок доступа</th></tr></thead><tbody><tr><td>Разовая выгрузка каталога поставщика</td><td>HTTP, HTTPS</td><td>10 до 30</td><td>Сутки</td></tr><tr><td>Ночной сбор прайсов и остатков</td><td>HTTP, HTTPS</td><td>15 до 60</td><td>Месяц</td></tr><tr><td>Крупная ежедневная выгрузка</td><td>HTTP, HTTPS</td><td>200 до 400</td><td>Месяц</td></tr><tr><td>Съём позиций по средней семантике</td><td>HTTPS</td><td>10 до 20</td><td>Неделя</td></tr><tr><td>Регулярный съём по портфелю проектов</td><td>HTTPS</td><td>20 до 60</td><td>Месяц</td></tr><tr><td>Три рабочих кабинета у одного сотрудника</td><td>SOCKS5</td><td>30 до 50</td><td>Месяц</td></tr><tr><td>Отдел на сорок профилей</td><td>SOCKS5</td><td>400 до 600</td><td>Месяц</td></tr><tr><td>Отдел с параллельными прогонами на серверах</td><td>SOCKS5</td><td>до 3000</td><td>Корпоративный месяц</td></tr><tr><td>Разовая отправка писем</td><td>SOCKS5</td><td>5 до 10</td><td>Сутки</td></tr><tr><td>Постоянная рассылка с рабочего адреса</td><td>SOCKS5</td><td>20 до 50</td><td>Месяц</td></tr><tr><td>Приём почты по IMAP или POP3</td><td>SOCKS5</td><td>5</td><td>Месяц</td></tr><tr><td>Проверка своего сайта из другой сети</td><td>HTTP, HTTPS</td><td>5</td><td>Сутки</td></tr><tr><td>Мониторинг доступности по расписанию</td><td>HTTP, HTTPS</td><td>5 до 10</td><td>Месяц</td></tr></tbody></table></div>
<p>Из таблицы видно закономерность. Протокол диктуется софтом и почти никогда не обсуждается, потоки меняются в пятидесятикратном диапазоне между сценариями, а срок сводится к одному вопросу: задача повторится на следующей неделе или закончится сегодня. Оформить подходящий вариант можно там, где собраны <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакеты прокси IPv4 по срокам и потокам</a>.</p>
<p>Ещё одну вещь мы советуем проверить до оформления: сколько машин пойдёт в работу. Одна рабочая станция закрывается привязкой адреса и форматом <code>IP:PORT</code>, два и больше рабочих места удобнее вести по паре логина и пароля, потому что строка подключения тогда переносится между машинами без правок в кабинете. Ограничений на число пакетов у учётной записи мы не ставим, поэтому параллельные независимые задачи спокойно разводятся по отдельным пакетам с собственными сроками и лимитами.</p>
<h2 id="chego-pokupat-ne-stoit-i-pochemu-otkrytye-sp">Чего покупать не стоит и почему открытые списки не работают</h2>
<p>Первое, чего брать не надо: пакет, выбранный до формулировки задачи. Покупатель, который открыл кабинет раньше, чем посчитал нагрузку, обычно берёт срок наугад и потоки круглой цифрой, потом переставляет и то и другое. Пять минут арифметики экономят половину первого рабочего дня.</p>
<p>Второе: несколько мелких пакетов вместо одного подходящего. Потоки разных пакетов не складываются, каждый работает со своим лимитом, поэтому рост нагрузки внутри одного прогона закрывается переходом на старший вариант. Несколько пакетов имеют смысл при параллельных независимых задачах, где у каждой свой сервер и свой лимит.</p>
<p>Третье: покупка без тестового окна. Бесплатный тест длится до 2 часов под конкретный запрос, и он отвечает на вопрос о пригодности точнее любого описания, потому что проходит на вашем софте и ваших доменах.</p>
<p>Отдельная тема это бесплатные открытые списки, которые публикуются на форумах и агрегаторах. В производственной задаче они не выдерживают проверки по четырём причинам сразу, и вот как это выглядит в работе.</p>
<div class="tabl"><table><thead><tr><th>Признак открытого списка</th><th>Что происходит на прогоне</th></tr></thead><tbody><tr><td>Строки собраны сканированием чужих узлов</td><td>Половина адресов перестаёт отвечать в течение часа</td></tr><tr><td>Один адрес используют сотни людей одновременно</td><td>Отклик скачет от секунды до полуминуты</td></tr><tr><td>Нет авторизации и контроля доступа</td><td>Скорость зависит от того, кто ещё работает через тот же узел</td></tr><tr><td>Список не обновляется автоматически</td><td>Каждый прогон начинается с ручной перепроверки строк</td></tr><tr><td>Неизвестно, что делает промежуточный узел</td><td>Заголовки запроса приходят на сайт в непредсказуемом виде</td></tr></tbody></table></div>
<p>Практический итог простой. Прогон, который на пуле с автоматической ротацией занимает восемь часов и не требует внимания, на открытом списке растягивается на двое суток и наполняется ручной работой по отсеву неотвечающих строк. Наш пул держит около 12 000 активных адресов, список обновляется в реальном времени, доступ открыт только клиентам сервиса, и ротация внутри пула идёт без участия оператора. Разбор поставщиков и признаков рабочего сервиса лежит в отдельном материале про <a href="/pokupka/gde-pokupat/">то, где покупать прокси</a>.</p>
<h2 id="chto-uspet-za-testovye-dva-chasa-pered-pokup">Что успеть за тестовые два часа перед покупкой</h2>
<p>План теста пишется заранее и занимает пол-листа. Без плана первый час уходит на установку софта, и к концу окна на руках оказывается один ответ сервера, по которому картина не складывается.</p>
<p>Порядок запуска короткий: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Пакет после оплаты включается примерно за 5 минут.</p>
<div class="tabl"><table><thead><tr><th>Отрезок теста</th><th>Что делаем</th><th>Что записываем</th></tr></thead><tbody><tr><td>Первые минуты</td><td>Один запрос через <code>curl</code> на сервис выходного адреса</td><td>Адрес из пула отличается от адреса машины</td></tr><tr><td>Первые полчаса</td><td>Замер отклика на своих целевых доменах</td><td>Среднее время в секундах</td></tr><tr><td>Середина окна</td><td>Прогон на 200 до 500 обращений рабочим софтом</td><td>Доля успешных ответов и коды</td></tr><tr><td>Последний час</td><td>Ступенчатый рост потоков: 10, 25, 50, 100</td><td>Точка, где отклик пошёл вверх</td></tr></tbody></table></div>
<p>Три записанные цифры дальше превращаются в выбор пакета за пару минут: среднее время отклика, доля успешных ответов и рабочее число потоков. Проверять всё это мы советуем на своих доменах и своей программой, потому что общий чекер показывает только факт доступа, а поведение целевого сайта под нагрузкой видно исключительно на реальном прогоне. Записи стоит сохранить в тот же файл, где лежал план: через неделю детали стираются из памяти, и строка с цифрами возвращает к выбору без повторного теста.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-vy-daete">Какой тип прокси вы даёте?</h3>
<p>В пакете идут IPv4 и SOCKS5, из сокетной пары доступны SOCKS-4 и SOCKS-5 на выбор, рекомендуется пятая версия. HTTP и HTTPS работают на тех же адресах, переключение делается в строке подключения, докупать под другой протокол ничего не нужно.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. В кабинете доступны оба способа получения, ссылкой или файлом. Список обновляется в режиме реального времени, поэтому перед крупным прогоном его стоит перечитать.</p>
<h3 id="mozhno-li-zakazat-adresa-opredelennoy-strany">Можно ли заказать адреса определённой страны?</h3>
<p>Пул представляет микс со всего мира, адреса приходят из 200+ стран, выборка по отдельной стране не делается. Для сбора открытых данных, съёма выдачи и разведения рабочих профилей такая схема даёт разнообразие подсетей без ручной настройки.</p>
<h3 id="chem-proveryat-kuplennye-proksi">Чем проверять купленные прокси?</h3>
<p>Для массовой проверки списка рекомендуется чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Одиночную проверку удобнее делать вызовом <code>curl</code> на сервис, который возвращает выходной адрес.</p>
<p>Соседние материалы раздела закрывают остальные шаги покупки: <a href="/pokupka/besplatnyy-test/">бесплатный тест до 2 часов</a> с планом проверки по минутам, <a href="/pokupka/kak-kupit/">порядок покупки от кабинета до первого запроса</a>, <a href="/pokupka/format-vydachi/">как приходит список адресов</a> и что с ним делать дальше. Различия протоколов между собой подробно разобраны в материале про <a href="/protokoly/http-https-socks/">HTTP, HTTPS, SOCKS4 и SOCKS5</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/kakie-proxy-pokupat/">https://kupit-proxy-ipv4.ru/pokupka/kakie-proxy-pokupat/</a></p>]]></content:encoded></item>
<item><title>Где покупать прокси IPv4 и на что смотреть у поставщика до оплаты</title><link>https://kupit-proxy-ipv4.ru/pokupka/gde-pokupat/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/gde-pokupat/</guid><description>Покупать прокси IPv4 стоит у сервиса, который держит собственный пул адресов, даёт бесплатный тест под вашу задачу и открывает кабинет с настройками доступа.…</description><content:encoded><![CDATA[
<p class="vvod">Покупать прокси IPv4 стоит у сервиса, который держит собственный пул адресов, даёт бесплатный тест под вашу задачу и открывает кабинет с настройками доступа. Такого поставщика разбирают по семи признакам: тест, размер и состав пула, набор протоколов, способы доступа, формат выдачи списка, лимит одновременных потоков и скорость включения пакета.</p>
<p>Ниже каждый признак разобран отдельно: какой вопрос задать до оплаты, какой ответ считать рабочим и что должно оказаться внутри кабинета после покупки. Отдельно разобрано, почему открытые бесплатные списки и перепродажа чужих пакетов не выдерживают рабочего прогона.</p>
<h2 id="tri-tipa-prodavcov-i-chem-oni-razlichayutsya">Три типа продавцов и чем они различаются</h2>
<p>Продавцов прокси удобно разложить на три группы. Первая группа: сервис со своим оборудованием и своим пулом адресов. Вторая: посредник, перепродающий доступ к чужому пулу под собственной вывеской. Третья: открытые списки, собранные сканированием сети и выложенные для всех желающих.</p>
<p>Различие видно по одному вопросу. Спросите, кто отвечает за адрес, который перестал отдавать ответ посреди прогона. Сервис со своим пулом отвечает сам: у него есть оборудование, мониторинг и оператор, который смотрит логи. Посредник переадресует вопрос дальше по цепочке и вернётся через сутки. Открытый список не отвечает вообще, потому что за ним нет никого.</p>
<p>Мы работаем по первой схеме и держим <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a>, поэтому дальше признаки описаны так, как они выглядят у сервиса с собственным пулом. Читателю это даёт готовую шкалу: те же вопросы задаются любому продавцу, ответы сравниваются между собой.</p>
<div class="tabl"><table><thead><tr><th>Тип продавца</th><th>Что получает покупатель</th><th>Где ломается на прогоне</th></tr></thead><tbody><tr><td>Сервис со своим пулом</td><td>Кабинет, тест, оператор, свой список адресов</td><td>Ограничение по потокам пакета</td></tr><tr><td>Посредник на чужом пуле</td><td>Список строк и переписка через второе звено</td><td>Разбор случая уходит на сутки и дольше</td></tr><tr><td>Открытый бесплатный список</td><td>Строки без гарантии ответа</td><td>Половина строк молчит уже при импорте</td></tr></tbody></table></div>
<p>Дальше по тексту разобраны признаки, которые проверяются до оплаты. Про то, какой тип прокси брать под конкретную программу, есть отдельный разбор в материале про <a href="/pokupka/kakie-proxy-pokupat/">подбор прокси под задачу</a>.</p>
<h2 id="besplatnyy-test-pod-svoyu-zadachu-glavnyy-pr">Бесплатный тест под свою задачу: главный признак</h2>
<p>Тест до покупки закрывает больше вопросов, чем любое описание пакета. Заранее предугадать поведение каждого целевого сайта и каждой программы нельзя, поэтому мы даём бесплатный тест длительностью до 2 часов под конкретный запрос покупателя. Продавец, у которого теста нет совсем, предлагает платить за неизвестность.</p>
<p>Порядок запуска короткий. Выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси. Дальше два часа идут под вашу задачу.</p>
<p>Важен характер теста. Демонстрационный доступ на общем чекере показывает только то, что строки отвечают. Рабочий тест идёт на вашем софте и ваших целевых доменах: та же программа, те же настройки, тот же порядок запросов, который пойдёт в работу после оплаты. Отсюда практический вопрос продавцу: можно ли прогнать тест своей программой по своим доменам.</p>
<p>За два часа снимаются три величины: среднее время отклика, доля успешных ответов и число потоков, при котором целевой сайт продолжает отвечать ровно. Эти цифры дальше превращаются в выбор пакета. Без них выбор превращается в угадывание, и покупатель берёт лимит потоков наугад.</p>
<p>Тест проверяет и совместимость. Часть программ капризна к формату строки подключения: одни ждут логин и пароль отдельными полями, другие принимают их внутри строки через двоеточие. Такая мелочь всплывает в первые минуты и разбирается вместе с оператором до оплаты, поэтому тест стоит запускать той сборкой софта, которая реально пойдёт в работу.</p>
<h2 id="pul-adresov-razmer-sostav-i-obnovlenie-spisk">Пул адресов: размер, состав и обновление списка</h2>
<p>Второй признак это пул. Спрашивать нужно три величины: сколько адресов активно, как часто обновляется список и кому открыт доступ. Наш пул держится в районе 12 000 активных IPv4 и SOCKS5, онлайн держится около той же цифры в сутки, список обновляется в режиме реального времени, доступ открыт только клиентам сервиса.</p>
<p>Размер пула определяет разнообразие подсетей. Прогон на 5 000 запросов в час через две сотни адресов упирается в частоту обращений с одной подсети, целевой сайт начинает отвечать медленнее и переходит на проверки. Тот же прогон через пул на несколько тысяч адресов распределяется шире, и частота с каждого отдельного адреса остаётся низкой.</p>
<p>Состав пула важнее круглой цифры в описании. География у нас охватывает 200+ стран, пул это микс со всего мира, по отдельной стране выборка не делается. Ротация внутри пула автоматическая, поэтому раздавать адреса по прогонам руками не требуется: программа берёт актуальный список и работает. Мы держим только приватные серверные адреса, и доступ к ним закрыт для всех, кроме клиентов, что описано на странице про <a href="https://iprazon.com/proxy/privatnye">приватный пул серверных адресов</a>.</p>
<p>Обновление списка проверяется просто. Забрали список утром, забрали вечером, сравнили. У живого пула состав строк меняется, потому что оборудование обслуживается, адреса вводятся и выводятся. Список, который совпал строка в строку через неделю, говорит о статичном наборе, и такой набор быстро набирает историю обращений к популярным площадкам.</p>
<div class="tabl"><table><thead><tr><th>Что спросить про пул</th><th>Рабочий ответ</th><th>Что проверить самому</th></tr></thead><tbody><tr><td>Сколько адресов активно</td><td>Порядок тысяч, у нас около 12 000</td><td>Число строк в выданном списке</td></tr><tr><td>Как часто обновляется список</td><td>В режиме реального времени</td><td>Сравнить выгрузки с разницей в несколько часов</td></tr><tr><td>Кому открыт доступ к пулу</td><td>Только клиентам сервиса</td><td>Списка нет в открытом поиске</td></tr><tr><td>Откуда адреса</td><td>Собственное серверное оборудование</td><td>Отклик ровный, скачков нет</td></tr><tr><td>Как устроена ротация</td><td>Автоматическая внутри пула</td><td>Адрес на выходе меняется между запросами</td></tr></tbody></table></div>
<h2 id="protokoly-http-https-socks4-i-socks5">Протоколы: HTTP, HTTPS, SOCKS4 и SOCKS5</h2>
<p>Третий признак определяется вашим софтом. Браузеры и большинство парсеров ходят по HTTP и HTTPS, программы с произвольными портами и приложения на сокетах предпочитают SOCKS. В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, из сокетных вариантов мы рекомендуем пятый.</p>
<p>Разница между четвёртым и пятым SOCKS видна на резолвинге имён и на авторизации. SOCKS5 умеет передавать доменное имя на сторону прокси, поэтому запросы к DNS уходят через посредник и картина по адресу выходит полной. SOCKS4 работает с адресом назначения, и имя резолвится на стороне машины.</p>
<p>Продавец, который отвечает про протоколы одним словом, оставляет вопрос открытым. Рабочий ответ выглядит списком: вот протоколы, вот порт, вот формат строки подключения, вот пример для curl. Проверить обещанное можно за минуту.</p>
<pre><code># HTTP через привязанный адрес
curl -x http://185.24.87.14:8000 https://ifconfig.me

# SOCKS5 с резолвингом на стороне прокси
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<div class="tabl"><table><thead><tr><th>Протокол</th><th>Что закрывает</th><th>Типичный софт</th></tr></thead><tbody><tr><td>HTTP</td><td>Обычные запросы без шифрования</td><td>Парсеры каталогов, простые скрипты</td></tr><tr><td>HTTPS</td><td>Туннель CONNECT до сайта с шифрованием</td><td>Браузеры, антидетект-сборки</td></tr><tr><td>SOCKS4</td><td>Транспорт на уровне сокета</td><td>Старые программы с полем SOCKS</td></tr><tr><td>SOCKS5</td><td>Сокет плюс авторизация и передача имени</td><td>Почтовые клиенты, боты, серверные скрипты</td></tr></tbody></table></div>
<p>Отдельный сигнал: доплата за смену протокола. Адреса в пакете одни и те же, меняется строка подключения, поэтому переключение между HTTP и сокетным вариантом никак не влияет на состав пакета. Подробности сокетного варианта собраны там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-socks5">доступ по SOCKS5 для программ и скриптов</a>.</p>
<h2 id="sposoby-dostupa-i-format-vydachi-spiska">Способы доступа и формат выдачи списка</h2>
<p>Четвёртый признак: как именно открывается доступ. Рабочих способов два, и хороший продавец даёт оба. Первый: в настройках кабинета указывается адрес машины, с которой пойдут запросы, дальше прокси работают без логина. Второй: берётся формат с логином и паролем, авторизация идёт строкой подключения.</p>
<p>В пакет входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках. Это покрывает типовой набор: рабочая машина и сервер, либо офис и домашний кабинет сотрудника. Провайдер с меняющимся адресом работе не мешает, потому что администратор переписывает строку в кабинете за полминуты.</p>
<p>Пятый признак идёт следом: формат выдачи. Мы выдаём список в двух форматах, <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, забрать его можно ссылкой или файлом. Ссылка удобна там, где софт умеет подтягивать список сам, файл проще для ручного импорта и раздачи коллегам.</p>
<pre><code># формат без пары логина и пароля
185.24.87.14:8000
185.24.87.15:8000

# формат с логином и паролем
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<p>Вопрос продавцу формулируется так: в каком виде приходит список и обновляется ли он сам. Ответ «пришлём файл на почту после оплаты» означает ручной цикл при каждом изменении пула. Ответ «ссылка в кабинете, содержимое обновляется в реальном времени» означает, что планировщик заберёт актуальные строки сам перед каждым запуском. Что делать с полученным списком дальше, разобрано в материале про <a href="/pokupka/format-vydachi/">формат выдачи адресов</a>.</p>
<h2 id="limity-potokov-kakaya-cifra-schitaetsya-rabo">Лимиты потоков: какая цифра считается рабочей</h2>
<p>Потоки это одновременно открытые соединения, которые программа держит к целевым сайтам. A-Parser, ZennoPoster и Key Collector показывают эту величину в настройках прогона. Стандартные пакеты у нас дают до 1000 потоков, корпоративный до 3000.</p>
<p>Три правила вокруг потоков стоит выяснить до оплаты. Первое: складываются ли пакеты. У нас пакеты по потокам не складываются, два стандартных пакета на одном аккаунте работают каждый со своим лимитом. Второе: что происходит при двух привязанных адресах. Общее число потоков делится между ними пополам, пакет на 1000 потоков даёт по 500 на каждый адрес. Третье: как сервис реагирует на всплески. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, и это защищает пул от перегрузки в интересах всех клиентов.</p>
<p>Рабочая цифра выводится из теста. Берём требуемую скорость в запросах за час, умножаем на среднее время отклика в секундах, делим на 3600 и добавляем примерно треть на запас. Прогон на 5 000 запросов в час при отклике в полторы секунды даёт около двух потоков расчётных и три с запасом, а тяжёлые страницы с откликом в восемь секунд поднимают ту же цифру до полутора десятков.</p>
<p>Продавец, который называет лимит потоков «безграничным», говорит о чём угодно, кроме своей инфраструктуры. Понятная цифра в описании пакета удобнее: она сравнивается с расчётом и превращается в выбор варианта за минуту. Сколько адресов и потоков нужно под конкретный объём, посчитано в разборе про <a href="/osnovy/skolko-adresov-nuzhno/">число адресов под задачу</a>.</p>
<h2 id="kabinet-skorost-vklyucheniya-i-dostupnost-op">Кабинет, скорость включения и доступность оператора</h2>
<p>Шестой признак это кабинет. Внутри должны быть баланс, список пакетов, настройки привязки адресов, раздел выдачи списка, меню запроса теста и контакты оператора. Отдельного приложения ставить не нужно, вся работа идёт через браузер. Кабинет, где нет настроек привязки, превращает каждую смену рабочей машины в переписку с поддержкой.</p>
<p>Седьмой признак это скорость включения. После подтверждения покупки пакет у нас включается примерно за 5 минут, статус меняется в списке, раздел выдачи начинает отдавать адреса. Сутки ожидания активации означают ручную обработку заявки на стороне продавца, и такой же ручной будет любая последующая правка.</p>
<p>Оператор проверяется до оплаты, на этапе теста. Мы просим передать логин и тип прокси сразу, тогда ответ приходит одним сообщением и переписка не растягивается. Хороший признак: оператор разбирает ваш конкретный случай, смотрит на код ответа и формат строки, предлагает проверку. Слабый признак: ответ общими фразами из описания тарифа.</p>
<div class="tabl"><table><thead><tr><th>Признак кабинета</th><th>Рабочее состояние</th><th>Что проверить на тесте</th></tr></thead><tbody><tr><td>Настройки привязки адресов</td><td>Две привязки, смена без ограничений</td><td>Переписать адрес и повторить запрос</td></tr><tr><td>Раздел выдачи списка</td><td>Два формата, ссылка и файл</td><td>Забрать список обоими способами</td></tr><tr><td>Меню запроса теста</td><td>Доступно до первой покупки</td><td>Отправить запрос из меню</td></tr><tr><td>Статус пакета</td><td>Меняется в списке за минуты</td><td>Засечь время от оплаты до выдачи</td></tr><tr><td>Контакты оператора</td><td>Внутри кабинета</td><td>Задать вопрос по своему софту</td></tr><tr><td>Число пакетов на аккаунте</td><td>Ограничений нет</td><td>Оформить второй пакет под отдельный проект</td></tr></tbody></table></div>
<p>Отдельная мелочь, заметная только на второй неделе работы: баланс и оплата разведены с покупкой пакета. Деньги лежат на балансе, пакет оформляется списанием, поэтому продление занимает два движения и не требует заново вводить платёжные данные. Агентство с несколькими параллельными проектами держит все пакеты под одной учётной записью с общим балансом.</p>
<h2 id="otkrytye-spiski-i-pereprodazha-chuzhih-paket">Открытые списки и перепродажа чужих пакетов</h2>
<p>Открытые бесплатные списки собираются сканированием диапазонов и выкладываются целиком. Их берут все желающие одновременно, поэтому история обращений к популярным площадкам у таких адресов накапливается за часы. Импорт списка на тысячу строк обычно даёт сотню отвечающих, из них до конца прогона доживают единицы.</p>
<p>Дальше начинается арифметика времени. Прогон на 40 000 карточек через открытый список растягивается на несколько ночей: программа перебирает молчащие строки, ждёт таймауты, повторяет запросы. Администратор сидит рядом и подставляет новые строки. Стоимость этих часов легко перекрывает стоимость пакета, при этом результат прогона остаётся неполным.</p>
<p>Второй момент касается предсказуемости. У открытого адреса нет владельца, который отвечает за его состояние, поэтому отклик скачет от десятков миллисекунд до десятков секунд, а число рабочих строк меняется каждый час. Любой расчёт потоков по такому списку теряет смысл через полчаса после начала работы.</p>
<p>Перепродажа чужих пакетов выглядит аккуратнее и ломается в другом месте. Список приходит рабочим, отклик ровный, первые дни вопросов нет. Вопросы появляются при разборе случая: посредник не видит логов пула, не управляет привязками и передаёт вопрос дальше по цепочке. Сутки на ответ по простому вопросу об авторизации это обычный срок такой схемы.</p>
<p>Распознать перепродажу помогают три вопроса. Кто держит оборудование. Есть ли кабинет с настройками привязки на стороне продавца. Даёт ли продавец тест под вашу задачу с разбором результата. Три уверенных ответа означают собственный пул, три уклончивых означают второе звено. Мы держим оборудование сами, и состав пакета целиком описан там, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к пулу</a>.</p>
<p>Есть и третий признак, заметный по документации доступа. Собственный пул описывается конкретикой: порт, протоколы, формат строки, порядок привязки, поведение лимита потоков при двух адресах. Посредник описывает товар общими словами о качестве и надёжности, потому что деталями инфраструктуры он не управляет. Читателю проще всего сравнить две страницы описания и посмотреть, где написаны цифры. Наш подход к закрытому доступу разложен по пунктам на странице про <a href="https://iprazon.com/proxy/privatnye">закрытый пул только для клиентов сервиса</a>.</p>
<div class="tabl"><table><thead><tr><th>Вариант</th><th>Отклик на прогоне</th><th>Разбор случая</th><th>Пригодность под рабочий прогон</th></tr></thead><tbody><tr><td>Открытый бесплатный список</td><td>Скачет, доля рабочих строк падает за часы</td><td>Отсутствует</td><td>Не выдерживает даже разовой выгрузки</td></tr><tr><td>Перепродажа чужого пакета</td><td>Ровный, пока пул в порядке</td><td>Через второе звено, сутки и дольше</td><td>Годится до первого сбоя</td></tr><tr><td>Сервис со своим пулом</td><td>Ровный, состав списка обновляется</td><td>Оператор смотрит логи и отвечает по случаю</td><td>Держит постоянную нагрузку</td></tr></tbody></table></div>
<h2 id="chto-sprosit-u-postavschika-i-kakoy-otvet-sc">Что спросить у поставщика и какой ответ считать рабочим</h2>
<p>Ниже сведены все признаки в одну таблицу. Она короткая и работает как разговорный список: вопросы задаются оператору до оплаты, ответы сравниваются с правой колонкой. Ответ, который не попал в правую колонку, показывает, где начнутся сложности на рабочем прогоне.</p>
<div class="tabl"><table><thead><tr><th>Что спросить</th><th>Какой ответ считается рабочим</th><th>Признак слабого продавца</th></tr></thead><tbody><tr><td>Есть ли тест под мою задачу</td><td>Бесплатный тест до 2 часов на вашем софте</td><td>Тест только на общем чекере</td></tr><tr><td>Сколько адресов в пуле</td><td>Порядок тысяч активных, у нас около 12 000</td><td>Уклончивая формулировка без цифры</td></tr><tr><td>Как обновляется список</td><td>В режиме реального времени</td><td>Файл на почту после оплаты</td></tr><tr><td>Какие протоколы поддержаны</td><td>HTTP, HTTPS, SOCKS4 и SOCKS5</td><td>Один протокол либо доплата за смену</td></tr><tr><td>Как открывается доступ</td><td>Привязка своего адреса или логин с паролем</td><td>Только один способ без выбора</td></tr><tr><td>В каком формате приходит список</td><td><code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, ссылкой или файлом</td><td>Одна текстовая простыня без формата</td></tr><tr><td>Сколько привязок входит в пакет</td><td>Две привязки со свободной сменой</td><td>Смена привязки через поддержку</td></tr><tr><td>Какой лимит потоков</td><td>1000 на стандартных, до 3000 на корпоративном</td><td>Обещание безграничных потоков</td></tr><tr><td>Складываются ли пакеты по потокам</td><td>Пакеты не складываются, лимит у каждого свой</td><td>Ответ без конкретики</td></tr><tr><td>Как быстро включается пакет</td><td>Примерно 5 минут после подтверждения</td><td>Активация в течение суток</td></tr><tr><td>Есть ли кабинет с настройками</td><td>Баланс, привязки, выдача, тест, контакты</td><td>Переписка вместо кабинета</td></tr><tr><td>Кто отвечает при сбое</td><td>Оператор сервиса смотрит логи пула</td><td>Вопрос уходит дальше по цепочке</td></tr></tbody></table></div>
<p>Порядок вопросов удобно держать таким же, как в таблице: он идёт от общего к частному и заканчивается разбором сбоев. Первые три вопроса отсеивают открытые списки, следующие четыре показывают зрелость кабинета, последние три отделяют собственный пул от перепродажи. Весь разговор занимает десять минут переписки, и он окупается на первом же прогоне, потому что проверка формата строки подключения до оплаты снимает половину будущих обращений в поддержку.</p>
<p>Массовую проверку списка после покупки удобно делать чекером от Zennolab, у него есть демонстрационная версия. Он проходит строки пачкой и показывает отвечающие адреса, время отклика и тип прокси. Тем, кто работает с автоматизацией той же компании, полезна страница про <a href="https://iprazon.com/instrumenty/zennoposter">прокси для ZennoPoster и сборок автоматизации</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu">Подойдут ли прокси под мою задачу?</h3>
<p>Заранее предугадать поведение каждого целевого сайта и каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем софте и ваших доменах, и его результат отвечает на вопрос точнее любого описания пакета.</p>
<h3 id="chto-vhodit-v-proksi-pul-i-komu-on-dostupen">Что входит в прокси-пул и кому он доступен?</h3>
<p>В пуле около 12 000 активных IPv4 и SOCKS5, онлайн держится в районе той же цифры в сутки. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Доступ к пулу открыт только клиентам сервиса, в открытом виде список нигде не публикуется.</p>
<h3 id="proksi-kakih-stran-v-spiske-i-mozhno-li-otob">Прокси каких стран в списке и можно ли отобрать нужные?</h3>
<p>Пул собран как микс со всего мира, адреса приходят из множества стран, география охватывает 200+ стран. По отдельной стране выборка не делается. Для сбора открытых данных, проверки выдачи и работы с несколькими кабинетами такая схема даёт широкое разнообразие подсетей без ручной настройки.</p>
<h3 id="chem-proveryat-proksi-posle-pokupki">Чем проверять прокси после покупки?</h3>
<p>Мы рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Разовую проверку удобно делать через <code>curl</code> с запросом на сервис, который возвращает адрес на выходе.</p>
<p>Разбор соседних шагов покупки собран рядом: <a href="/pokupka/besplatnyy-test/">что успеть проверить за тестовые два часа</a> с планом по минутам, <a href="/pokupka/kak-kupit/">порядок покупки от теста до первого запроса</a> по шагам кабинета, <a href="/pokupka/chto-vhodit-v-paket/">состав пакета по потокам и адресам</a> с разбором привязок. Различие между закрытым доступом и общим набором адресов разобрано в материале про <a href="/osnovy/privatnyy-i-obshchiy/">приватный доступ и общий пул</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/gde-pokupat/">https://kupit-proxy-ipv4.ru/pokupka/gde-pokupat/</a></p>]]></content:encoded></item>
<item><title>Как купить прокси IPv4: порядок действий от теста до первого запроса</title><link>https://kupit-proxy-ipv4.ru/pokupka/kak-kupit/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/kak-kupit/</guid><description>Покупка прокси IPv4 укладывается в пять шагов: регистрация в кабинете, бесплатный тест до 2 часов, выбор пакета по сроку и числу потоков, оплата и привязка…</description><content:encoded><![CDATA[
<p class="vvod">Покупка прокси IPv4 укладывается в пять шагов: регистрация в кабинете, бесплатный тест до 2 часов, выбор пакета по сроку и числу потоков, оплата и привязка своего адреса в настройках. После оплаты пакет включается примерно за 5 минут, список адресов забирается ссылкой или файлом, и запросы уже идут через пул.</p>
<p>Дальше разобран каждый шаг: что определить заранее, что успеть проверить за два тестовых часа, как выглядит кабинет изнутри, в каком виде приходит список и что сделать сразу после включения. Порядок написан так, чтобы человек, который открывает кабинет впервые, прошёл его без возвратов на предыдущий шаг.</p>
<h2 id="chto-opredelit-do-pokupki-zadacha-obem-potok">Что определить до покупки: задача, объём, потоки и протокол</h2>
<p>Выбор пакета держится на четырёх величинах: задача, объём запросов, число одновременных потоков и протокол. Задача описывается одной фразой без прилагательных: собрать прайсы поставщиков, снять позиции по семантике, проверить свой сайт из другой сети, развести рекламные кабинеты по разным адресам. Формулировка задаёт срок и нагрузку, поэтому она идёт первой.</p>
<p>Объём считается в запросах за час. Берём число целевых страниц, делим на срок, который отведён под прогон, и получаем требуемую скорость. Прогон на 40 000 карточек за ночь это примерно 5 000 запросов в час при восьми часах работы. Такая арифметика занимает минуту, зато после неё разговор о потоках становится предметным, потому что число потоков вытекает прямо из требуемой скорости и среднего времени отклика.</p>
<p>Потоки это одновременно открытые соединения, которые программа держит к целевым сайтам. A-Parser, ZennoPoster и Key Collector показывают эту величину в настройках прогона и там же её ограничивают. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются: два стандартных пакета на одном аккаунте не превращаются в 2 тысячи потоков, каждый работает со своим лимитом.</p>
<p>Протокол определяется софтом. Браузеры и большинство парсеров ходят по HTTP и HTTPS, программы с произвольными портами и приложения на сокетах предпочитают SOCKS. В пакете доступны SOCKS4 и SOCKS5, и когда выбор остановился на SOCKS5, отдельно докупать ничего не требуется: адреса те же, меняется только строка подключения. Про особенности сокетного варианта есть подробный разбор на странице <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a>.</p>
<div class="tabl"><table><thead><tr><th>Что определить</th><th>Как посчитать</th><th>На что влияет</th></tr></thead><tbody><tr><td>Задача</td><td>Одна фраза без прилагательных</td><td>Срок доступа и характер нагрузки</td></tr><tr><td>Объём</td><td>Целевые страницы делим на часы прогона</td><td>Требуемая скорость в запросах за час</td></tr><tr><td>Потоки</td><td>Скорость умножаем на среднее время отклика</td><td>Стандартный пакет или корпоративный</td></tr><tr><td>Протокол</td><td>Смотрим, что принимает софт</td><td>Формат строки подключения</td></tr></tbody></table></div>
<h2 id="besplatnyy-test-do-2-chasov-chto-uspet-prove">Бесплатный тест до 2 часов: что успеть проверить</h2>
<p>Тест существует ровно для того, чтобы покупка была осознанной. Заранее предугадать поведение каждого целевого сайта нельзя, поэтому перед оплатой доступен бесплатный тест длительностью до 2 часов под конкретный запрос. Порядок запуска короткий: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси.</p>
<p>Два часа это много, если план проверки готов заранее. Тот, кто впервые пробовал прогон через пул без плана, обычно тратит первый час на установку софта и получает к концу окна один ответ сервера. Картина по такому прогону не складывается. План занимает пол-листа: авторизация, отклик, поведение целевого сайта, потоки, формат выдачи.</p>
<div class="tabl"><table><thead><tr><th>Отрезок теста</th><th>Что проверяем</th><th>Признак успеха</th></tr></thead><tbody><tr><td>Первые минуты</td><td>Авторизация и доступ</td><td>Запрос проходит, чекер показывает адрес из пула</td></tr><tr><td>Первые полчаса</td><td>Время отклика на целевом домене</td><td>Отклик стабильный от запроса к запросу</td></tr><tr><td>Середина теста</td><td>Поведение сайта при росте частоты</td><td>Ответы остаются рабочими, коды не меняются</td></tr><tr><td>Последний час</td><td>Потоки на реальном прогоне</td><td>Софт держит заданное число соединений</td></tr></tbody></table></div>
<p>Проверять стоит на своих целевых доменах. Тест на общем чекере покажет, что доступ работает, и на этом его польза заканчивается. Настоящий ответ даёт та же программа с теми же настройками, которая пойдёт в работу после покупки: если софт отказался соединяться через посредник, причина видна в первые минуты и разбирается вместе с оператором до оплаты.</p>
<p>Отдельно фиксируем цифры. Среднее время отклика, доля успешных ответов, число потоков, при котором целевой сайт продолжает отвечать ровно. Эти три величины дальше превращаются в выбор пакета, и без них выбор превращается в угадывание.</p>
<p>Результаты стоит записать в тот же файл, где лежал план проверки. Через неделю детали стираются из памяти, и покупатель, который уже пробовал два разных режима прогона, помнит одно общее впечатление. Строка с цифрами отклика и рабочим числом потоков возвращает к выбору пакета в любой момент, повторный тест для этого не понадобится.</p>
<h2 id="registraciya-v-kabinete-chto-poyavlyaetsya-v">Регистрация в кабинете: что появляется внутри</h2>
<p>Регистрация занимает пару минут и открывает рабочую панель. Внутри сразу видно всё, что понадобится дальше: баланс, список пакетов, настройки привязки адресов, выдача списка прокси, меню запроса теста и контакты оператора. Отдельного приложения ставить не нужно, вся работа идёт через браузер.</p>
<p>Баланс пополняется в кабинете, способ выбирается из доступных при пополнении. Пакет оформляется списанием с баланса, поэтому шаг оплаты отделён от шага покупки, и деньги на балансе можно держать заранее, если пакеты берутся регулярно.</p>
<p>Раздел с настройками адресов отвечает за доступ. В нём указывается адрес, с которого пойдут запросы, и там же меняется привязка, когда рабочая машина переехала. Раздел выдачи отдаёт список прокси: там же выбирается формат и способ получения. Меню теста доступно до первой покупки, поэтому регистрация делается до всех остальных шагов.</p>
<p>Контакты оператора лежат там же, внутри кабинета. Через них закрываются вопросы активации и запуска: тот, кто столкнулся с неактивной учётной записью или незнакомым сообщением софта, пишет по контактам и получает разбор по своему случаю. Оператору полезно сразу передать логин и тип прокси, тогда ответ приходит одним сообщением и переписка не растягивается.</p>
<p>Ограничений на число пакетов у аккаунта нет. Агентство держит несколько пакетов под разных клиентов, разработчик добавляет второй пакет под отдельный проект, и всё это живёт под одной учётной записью с общим балансом. Если у команды несколько независимых прогонов, удобнее заранее посмотреть, как устроены <a href="https://iprazon.com/proxy/privatnye">приватные серверные адреса для рабочей группы</a>.</p>
<h2 id="vybor-paketa-po-sroku-i-chislu-potokov-oform">Выбор пакета по сроку и числу потоков, оформление и включение</h2>
<p>Пакет это срок доступа к пулу плюс лимит потоков. Трафик безлимитный на всех вариантах, поэтому за гигабайты считать ничего не нужно и объём выкачанных страниц на выбор не влияет. Доступные сроки: сутки, неделя, месяц и корпоративный месяц с расширенным лимитом потоков.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Разумный срок</th><th>Потоки</th></tr></thead><tbody><tr><td>Разовая выгрузка каталога поставщика</td><td>Сутки</td><td>До 1000</td></tr><tr><td>Проверка своего сайта из другой сети</td><td>Сутки</td><td>50 и меньше</td></tr><tr><td>Съём позиций по средней семантике</td><td>Неделя</td><td>200 до 500</td></tr><tr><td>Постоянный сбор прайсов и остатков</td><td>Месяц</td><td>До 1000</td></tr><tr><td>Несколько рекламных кабинетов и профилей</td><td>Месяц</td><td>100 до 300</td></tr><tr><td>Прогон на несколько серверов сразу</td><td>Корпоративный месяц</td><td>До 3000</td></tr><tr><td>Агентство с параллельными проектами клиентов</td><td>Корпоративный месяц</td><td>До 3000</td></tr></tbody></table></div>
<p>Срок берётся с запасом в одну ступень, когда задача повторяется. Разовая выгрузка закрывается сутками. Регулярный съём позиций каждую неделю удобнее закрывать месяцем: продлевать вручную семь раз подряд утомительно, и любая забытая ступень останавливает прогон посреди работы. Тем, у кого задача уже вышла на постоянный режим, подходит <a href="https://iprazon.com/proxy/na-mesyats">доступ к пулу на месяц</a>.</p>
<p>Потоки берутся по цифре из теста, увеличенной примерно на треть. Запас нужен под пиковые моменты, когда часть соединений висит в ожидании ответа. Держать заведомо избыточный лимит смысла мало: аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, и это защищает пул от перегрузки в интересах всех клиентов.</p>
<p>Оформление идёт в два движения: выбрать пакет в кабинете и подтвердить списание с баланса. После подтверждения пакет включается примерно за 5 минут, статус меняется в списке, и раздел выдачи начинает отдавать список адресов. Всё, что нужно на этом шаге, находится на странице пакетов, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к общему пулу</a>.</p>
<h2 id="spisok-adresov-kak-zabrat-i-v-kakom-formate">Список адресов: как забрать и в каком формате</h2>
<p>Список забирается в разделе выдачи. Два формата на выбор: <code>IP:PORT</code> для работы с привязкой своего адреса и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину и паролю. Получить список можно двумя путями: скопировать ссылку или скачать файл. Ссылка удобна там, где софт умеет подтягивать список сам, файл проще для ручного импорта.</p>
<pre><code># формат без авторизации по логину
185.24.87.14:8000
185.24.87.15:8000

# формат с логином и паролем
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<div class="tabl"><table><thead><tr><th>Формат</th><th>Когда брать</th><th>Куда подходит</th></tr></thead><tbody><tr><td><code>IP:PORT</code></td><td>Рабочий адрес привязан в кабинете</td><td>Браузеры, парсеры, серверные скрипты</td></tr><tr><td><code>IP:PORT:LOGIN:PASS</code></td><td>Адрес машины меняется или машин несколько</td><td>Программы с полями логина и пароля, облачные сборщики</td></tr><tr><td>Ссылка на список</td><td>Софт умеет обновлять список сам</td><td>A-Parser, ZennoPoster, планировщики</td></tr><tr><td>Файл со списком</td><td>Импорт руками или раздача коллегам</td><td>Антидетект-браузеры, ручные проверки</td></tr></tbody></table></div>
<p>Пул держится в районе 12 000 активных адресов в сутки, список обновляется в реальном времени, ротация внутри пула автоматическая. Отсюда практический вывод: список перечитывается перед каждым крупным прогоном. Сохранённый однажды файл постепенно устаревает, и тот, кто пробовал импорт полугодовой давности, получает часть неотвечающих строк и лишний час на разбор.</p>
<p>Ссылка на выдачу удобна ещё и тем, что её отдают планировщику. Кабинет вывел адрес выдачи один раз, дальше программа тянет актуальные строки перед каждым запуском, и ручной шаг из процесса уходит совсем.</p>
<p>География пула это микс со всего мира, адреса приходят из множества стран, выборка по отдельной стране не делается. Для сбора открытых данных, проверки выдачи и работы с кабинетами такая схема даёт разнообразие подсетей без ручной настройки.</p>
<h2 id="nastroyka-dostupa-privyazka-adresa-ili-login">Настройка доступа: привязка адреса или логин с паролем</h2>
<p>Доступ открывается одним из двух путей. Первый: в настройках кабинета указывается адрес машины, с которой пойдут запросы, и дальше прокси работают без логина. Второй: берётся формат с логином и паролем, и запросы авторизуются строкой подключения. Оба варианта включены в пакет, переключаться между ними можно в любой момент.</p>
<p>В пакет входит одновременная привязка 2 адресов. Это покрывает типовой сценарий: рабочая машина и сервер, либо офис и домашний кабинет сотрудника. Привязку разрешено менять без ограничений прямо в настройках, поэтому провайдер с меняющимся адресом никаких проблем не создаёт: администратор переписал строку в кабинете и продолжил работу.</p>
<p>Один момент влияет на расчёт нагрузки. При двух привязанных адресах общий лимит потоков делится между ними пополам. Пакет на 1000 потоков при двух привязках даёт по 500 на каждый адрес, и если основной прогон идёт с одной машины, вторую привязку разумнее держать пустой до момента, когда она реально понадобится.</p>
<p>Порт в обоих вариантах один и тот же, различие сидит в наличии пары логина и пароля внутри строки. Если прокси отказался пропускать запрос и в ответ пришла ошибка авторизации, сначала сверяется формат: часть программ ждёт логин и пароль отдельными полями и ломает строку, склеенную через двоеточие. Вторая частая причина это привязка, оформленная на прежний адрес машины.</p>
<pre><code># проверка доступа с привязанным адресом
curl -x http://185.24.87.14:8000 https://ifconfig.me

# проверка доступа по логину и паролю
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<h2 id="pervaya-proverka-posle-podklyucheniya">Первая проверка после подключения</h2>
<p>Первая проверка занимает несколько минут и снимает большую часть будущих вопросов. Сначала один запрос через <code>curl</code> на сервис, который возвращает адрес: ответ должен показать адрес из пула. Затем тот же запрос на целевой домен, чтобы увидеть реальный код ответа. Потом короткий прогон на 50 запросов с рабочими настройками софта.</p>
<p>Для массовой проверки подойдёт чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Если чекер вывел ожидаемое число рабочих строк и время отклика совпало с тестовым, настройка закончена.</p>
<div class="tabl"><table><thead><tr><th>Проверка</th><th>Команда или инструмент</th><th>Ожидаемый результат</th></tr></thead><tbody><tr><td>Адрес на выходе</td><td><code>curl -x ... https://ifconfig.me</code></td><td>Адрес из пула, отличный от адреса машины</td></tr><tr><td>Код ответа целевого сайта</td><td><code>curl -o /dev/null -w "%{http_code}" -x ...</code></td><td>Рабочий код, тот же что и в тесте</td></tr><tr><td>Заголовки запроса</td><td>Сервис проверки заголовков</td><td>Заголовки без служебных следов посредника</td></tr><tr><td>Массовая проверка списка</td><td>Чекер от Zennolab</td><td>Отвечающие строки и время отклика</td></tr></tbody></table></div>
<p>Отдельно смотрим на запросы к DNS. Программы иногда резолвят имена мимо посредника, и тогда картина по адресу выходит неполной. В SOCKS5 резолвинг передаётся на сторону прокси, в браузерах и парсерах для этого есть отдельная настройка, которую достаточно включить один раз.</p>
<h2 id="prodlenie-i-perehod-na-drugoy-paket">Продление и переход на другой пакет</h2>
<p>Продление делается в кабинете до истечения срока. Пакет, продлённый заранее, работает без паузы, и список адресов остаётся доступным непрерывно. Если срок закончился, доступ к выдаче закрывается, при этом настройки привязки и учётная запись сохраняются, поэтому возобновление занимает минуты.</p>
<p>Переход на другой пакет строится тем же порядком. Проект перешёл в постоянный режим, нагрузка выросла, потоков стало не хватать: оформляется пакет с более высоким лимитом, и работа продолжается на нём. Помнить нужно про одно правило: потоки разных пакетов складывать нельзя, поэтому рост нагрузки закрывается переходом на старший вариант.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Что сделать</th><th>Что происходит с доступом</th></tr></thead><tbody><tr><td>Задача продолжается в том же объёме</td><td>Продлить пакет до окончания срока</td><td>Работа идёт без паузы</td></tr><tr><td>Нагрузка выросла в пределах лимита</td><td>Оставить пакет, поднять потоки в софте</td><td>Доступ прежний</td></tr><tr><td>Нагрузка вышла за лимит потоков</td><td>Взять пакет с более высоким лимитом</td><td>Новый лимит доступен после включения</td></tr><tr><td>Появился второй независимый проект</td><td>Оформить отдельный пакет на том же аккаунте</td><td>Каждый пакет работает со своим лимитом</td></tr><tr><td>Задача закончилась</td><td>Дать сроку истечь</td><td>Настройки и учётная запись остаются</td></tr></tbody></table></div>
<p>Отдельно стоит сезонная нагрузка. Магазин перешёл на ежедневную сверку остатков перед высоким сезоном, объём вырос примерно вдвое, через полтора месяца режим вернулся к прежнему. Тут удобно поднять лимит потоков на время пика и потом продолжить работу на прежнем варианте: сроки пакетов идут независимо, учётная запись остаётся одной, привязанные адреса сохраняются в настройках.</p>
<p>Для команд, где прогоны идут круглосуточно и объём выкачки заранее неизвестен, спокойнее всего работают <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a>: счётчиков нет, планировать выгрузку по объёму не нужно.</p>
<h2 id="tipichnye-oshibki-pokupateley">Типичные ошибки покупателей</h2>
<p>Первая ошибка это покупка без теста. Софт бывает капризным к формату строки подключения, и когда конкретная программа отказалась принимать список, разбирать это удобнее в тестовом окне вместе с оператором. Два часа под свою задачу отвечают на вопрос точнее любого описания.</p>
<p>Вторая ошибка это потоки по ощущению. Число берётся крупным для запаса, целевой сайт начинает отвечать медленнее, и покупатель столкнулся с ситуацией, где прогон идёт дольше при большем числе соединений. Цифра из теста, увеличенная на треть, работает лучше любой круглой величины.</p>
<p>Третья ошибка это забытое деление лимита. Привязаны два адреса, лимит поделён пополам, расчёт нагрузки при этом шёл по полной цифре. Софт упирается в потолок, логи показывают отказы, причина сидит в настройках кабинета.</p>
<div class="tabl"><table><thead><tr><th>Ошибка</th><th>Что видно в работе</th><th>Что сделать</th></tr></thead><tbody><tr><td>Покупка без теста</td><td>Софт не принимает формат списка</td><td>Пройти тест до 2 часов на своей программе</td></tr><tr><td>Потоки взяты наугад</td><td>Прогон медленнее ожидаемого</td><td>Считать по времени отклика из теста</td></tr><tr><td>Забыто деление лимита</td><td>Часть соединений отбивается</td><td>Оставить одну привязку или взять старший пакет</td></tr><tr><td>Старый сохранённый список</td><td>Часть строк не отвечает</td><td>Перечитать список перед прогоном</td></tr><tr><td>Резолвинг мимо посредника</td><td>Адрес виден верно, поведение сайта странное</td><td>Включить резолвинг на стороне прокси</td></tr><tr><td>Ожидание выбора страны</td><td>Поиск фильтра по региону в кабинете</td><td>Работать с общим пулом, микс со всего мира</td></tr></tbody></table></div>
<p>Четвёртая ошибка мельче остальных, зато повторяется постоянно: в работу уходит список, сохранённый на диск задолго до прогона. Администратор переписал настройки софта, обновил потоки и адреса привязки, файл со строками при этом остался прежним. Часть строк отвечает отказом, логи наполняются ошибками, и час уходит на поиск причины, которая закрывается одним обновлением списка из кабинета.</p>
<p>Пятая ошибка встречается у тех, кто пришёл из других сервисов и ищет фильтр по стране. Пул устроен как микс со всего мира, выборка по отдельной стране не делается, и задачи вроде сбора данных, проверки выдачи и разведения кабинетов такая схема закрывает разнообразием подсетей. Состав пакета с потоками, привязками и безлимитным трафиком целиком описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu">Подойдут ли прокси под мою задачу?</h3>
<p>Заранее предугадать поведение каждого целевого сайта и каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем софте и ваших доменах, и его результат отвечает на вопрос точнее любого описания.</p>
<h3 id="kak-zapustit-besplatnyy-test">Как запустить бесплатный тест?</h3>
<p>Порядок такой: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Дальше приходит доступ, и два часа идут под вашу задачу.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В пакет входит одновременная привязка 2 адресов. Менять привязку разрешено без ограничений прямо в настройках кабинета, поэтому провайдер с меняющимся адресом работе не мешает. При двух привязанных адресах общее число потоков делится между ними пополам.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Забрать список можно ссылкой или файлом, оба варианта доступны в кабинете. Список обновляется в реальном времени, поэтому перед крупным прогоном его стоит перечитать.</p>
<p>Дальше по шагам покупки собраны отдельные разборы: <a href="/pokupka/besplatnyy-test/">как проходит бесплатный тест</a> с планом проверки по минутам, <a href="/pokupka/chto-vhodit-v-paket/">что входит в пакет</a> по потокам, трафику и привязкам, <a href="/pokupka/srok-dostupa/">как выбрать срок доступа</a> под разовую и постоянную задачу. Когда пакет оформлен и включён, следующий шаг описан в материале про <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/kak-kupit/">https://kupit-proxy-ipv4.ru/pokupka/kak-kupit/</a></p>]]></content:encoded></item>
<item><title>Что входит в пакет прокси IPv4: потоки, трафик и адреса</title><link>https://kupit-proxy-ipv4.ru/pokupka/chto-vhodit-v-paket/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/chto-vhodit-v-paket/</guid><description>В пакет входит доступ к пулу примерно из 12 000 адресов с автоматической ротацией, безлимитный трафик, лимит одновременных потоков, две привязки своего…</description><content:encoded><![CDATA[
<p class="vvod">В пакет входит доступ к пулу примерно из 12 000 адресов с автоматической ротацией, безлимитный трафик, лимит одновременных потоков, две привязки своего адреса и выдача списка в двух форматах ссылкой или файлом. Протоколы идут все сразу: IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, включение занимает около 5 минут после подтверждения покупки.</p>
<p>Дальше состав разобран по пунктам: что стоит за каждой строкой описания, как это выглядит внутри кабинета и во что превращается на рабочем прогоне. Отдельно разобрано, почему безлимитный трафик снимает целый класс расчётов и почему пакеты по потокам не складываются между собой.</p>
<h2 id="iz-chego-sostoit-paket-shest-strok-opisaniya">Из чего состоит пакет: шесть строк описания</h2>
<p>Пакет собран из шести составляющих. Доступ к пулу адресов, набор протоколов, лимит одновременных потоков, трафик, привязки своего адреса и срок доступа. Седьмым пунктом идёт формат выдачи списка, он общий для всех вариантов пакета.</p>
<p>Каждая строка отвечает за свою часть работы. Пул задаёт разнообразие подсетей, протоколы задают совместимость с вашим софтом, потоки задают скорость прогона, привязки задают способ доступа, срок задаёт длительность работы. Трафик из этого перечня выпадает, потому что мы держим его безлимитным на всех вариантах и на расчёты он не влияет совсем.</p>
<div class="tabl"><table><thead><tr><th>Что в пакете</th><th>Что это значит на практике</th></tr></thead><tbody><tr><td>Доступ к пулу около 12 000 адресов</td><td>Прогон распределяется по тысячам адресов, частота с каждого остаётся низкой</td></tr><tr><td>Автоматическая ротация внутри пула</td><td>Раздавать адреса по прогонам руками не требуется</td></tr><tr><td>Протоколы IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5</td><td>Софт подключается без доплаты за смену протокола</td></tr><tr><td>Лимит потоков 1000 или до 3000</td><td>Верхняя граница одновременных соединений в программе</td></tr><tr><td>Безлимитный трафик</td><td>Объём выкачанных страниц на выбор пакета не влияет</td></tr><tr><td>Две привязки своего адреса</td><td>Рабочая машина и сервер работают с одного пакета</td></tr><tr><td>Выдача списка в двух форматах</td><td>Ссылка для планировщика либо файл для ручного импорта</td></tr><tr><td>Срок доступа к пулу</td><td>Сутки, неделя, месяц или корпоративный месяц</td></tr></tbody></table></div>
<p>Ниже каждая строка развёрнута. Порядок мы выстроили от пула к сроку, потому что именно так покупатель проходит кабинет: сначала смотрит на состав пула, потом на потоки, в конце выбирает длительность.</p>
<h2 id="dostup-k-pulu-primerno-iz-12-000-adresov">Доступ к пулу примерно из 12 000 адресов</h2>
<p>Первое, что даёт пакет, это доступ к пулу. Мы держим около 12 000 активных IPv4 и SOCKS5, онлайн держится в районе той же цифры в сутки. Доступ открыт только клиентам сервиса, в открытом виде список нигде не публикуется.</p>
<p>Размер пула превращается в практическую величину через частоту обращений. Прогон на 6 000 запросов в час по пулу из 12 000 адресов даёт в среднем меньше одного обращения с адреса за час работы. Тот же прогон по набору из двухсот адресов даёт три десятка обращений с каждого, и целевая площадка видит совсем другую картину активности.</p>
<p>География пула охватывает 200+ стран, состав собран как микс со всего мира. По отдельной стране выборка не делается, и для сбора открытых данных, съёма позиций и работы с несколькими кабинетами такая схема даёт широкое разнообразие подсетей без ручных настроек. Развёрнутое описание состава лежит на странице про <a href="https://iprazon.com/proxy/privatnye">приватный пул серверных адресов IPv4</a>.</p>
<p>Список адресов обновляется в режиме реального времени. Оборудование обслуживается, адреса вводятся и выводятся, поэтому состав строк меняется. Отсюда рабочая привычка: список перечитывается перед каждым крупным прогоном, а планировщику отдаётся ссылка на выдачу вместо сохранённого файла.</p>
<h2 id="avtomaticheskaya-rotaciya-vnutri-pula">Автоматическая ротация внутри пула</h2>
<p>Ротация в пакете работает сама. Мы перебираем адреса внутри пула автоматически, поэтому распределять их по потокам руками не требуется. Программа получает список и работает, а смена адреса на выходе происходит без участия администратора.</p>
<p>Это заметно на длинных прогонах. Сборщик каталога идёт восемь часов подряд, обращения расходятся по пулу, и частота с каждого отдельного адреса остаётся низкой всё это время. Тот же прогон с ручным закреплением строк за потоками требует таблицы соответствий, скрипта раздачи и разбора при каждом изменении состава списка.</p>
<p>Ротация снимает и второй пласт работы: слежение за состоянием отдельных адресов. Список обновляется сам, выведенные строки уходят из выдачи, новые появляются, и администратору достаточно перечитать список перед запуском. Как устроен этот механизм со стороны прогона, подробно разложено на странице про <a href="https://iprazon.com/proxy/s-rotaciey">пул с автоматической ротацией адресов</a>.</p>
<p>Проверяется ротация одной командой в цикле. Десять запросов подряд на сервис, который возвращает адрес на выходе, показывают состав адресов, через которые прошли запросы.</p>
<pre><code># десять запросов подряд через список из кабинета
for i in $(seq 1 10); do
  curl -s -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me
  echo
done</code></pre>
<h2 id="bezlimitnyy-trafik-i-chto-on-ubiraet-iz-rasc">Безлимитный трафик и что он убирает из расчётов</h2>
<p>Трафик в пакете безлимитный. Счётчика гигабайтов нет, доплаты за объём нет, объём выкачанных страниц на выбор пакета не влияет. Это снимает целый класс расчётов, который обычно съедает время перед покупкой.</p>
<p>Разбираем, что именно уходит. Без счётчика не нужно оценивать средний вес страницы, умножать его на число целевых адресов и добавлять запас на повторные запросы. Не нужно закладывать поправку на тяжёлые страницы с изображениями, скриптами и подгружаемыми блоками. Не нужно держать в прогоне отдельный учёт объёма, писать оповещения о приближении к границе и прерывать работу посреди ночи. Не нужно выбирать между полнотой выгрузки и экономным режимом сбора.</p>
<p>Практический эффект виден на трёх типах задач. Сбор каталогов с картинками, где вес страницы уходит за мегабайт. Постоянный съём позиций, где число запросов растёт вместе с семантикой. Работа с браузерными сборками, где загружается вся страница целиком со всеми ресурсами. Во всех трёх случаях объём заранее неизвестен, и планирование по объёму превращается в угадывание.</p>
<div class="tabl"><table><thead><tr><th>Расчёт без безлимита</th><th>Что происходит с безлимитным трафиком</th></tr></thead><tbody><tr><td>Оценка среднего веса страницы</td><td>Не требуется, вес страницы на выбор пакета не влияет</td></tr><tr><td>Умножение веса на число адресов</td><td>Уходит из подготовки прогона совсем</td></tr><tr><td>Запас на повторные запросы и таймауты</td><td>Повторы идут свободно, счётчик не растёт</td></tr><tr><td>Оповещения о приближении к границе</td><td>Настраивать нечего</td></tr><tr><td>Выбор между полнотой и экономным режимом</td><td>Выгрузка идёт целиком, включая тяжёлые страницы</td></tr><tr><td>Учёт объёма в отчёте прогона</td><td>Остаётся только число запросов и доля успешных ответов</td></tr></tbody></table></div>
<p>Планирование при этом сводится к двум величинам: срок и потоки. Мы считаем такой набор самым удобным для рабочих задач, потому что обе величины измеряются на бесплатном тесте и дальше просто переносятся в выбор пакета. Как это работает на постоянной нагрузке, описано там, где оформляется <a href="https://iprazon.com/proxy/bezlimitnye">доступ с безлимитным трафиком</a>.</p>
<h2 id="limit-odnovremennyh-potokov-1000-do-3000-i-p">Лимит одновременных потоков: 1000, до 3000 и правило сложения</h2>
<p>Потоки это одновременно открытые соединения, которые программа держит к целевым сайтам. Мы даём до 1000 потоков на стандартных пакетах и до 3000 на корпоративном. Величина видна в настройках прогона у A-Parser, ZennoPoster и Key Collector, там же она ограничивается сверху. Сокетный вариант подключения для тех же программ разобран на странице про <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a>.</p>
<p>Расчёт нужной цифры короткий. Берём требуемую скорость в запросах за час, умножаем на среднее время отклика в секундах, делим на 3600 и добавляем примерно треть на запас. Прогон на 20 000 страниц за ночь при восьми часах работы даёт 2 500 запросов в час, при отклике в две секунды это около полутора потоков расчётных и два с запасом. Тяжёлые страницы с откликом в десять секунд поднимают ту же цифру до семи потоков, и разница между этими режимами видна только на тесте с реальными доменами.</p>
<div class="tabl"><table><thead><tr><th>Тип прогона</th><th>Скорость запросов в час</th><th>Ориентир по потокам</th></tr></thead><tbody><tr><td>Проверка своего сайта из другой сети</td><td>До 200</td><td>Единицы потоков</td></tr><tr><td>Съём позиций по средней семантике</td><td>1 000 до 3 000</td><td>200 до 500</td></tr><tr><td>Сбор каталога поставщика</td><td>5 000 до 8 000</td><td>До 1000</td></tr><tr><td>Ежедневная сверка остатков по нескольким источникам</td><td>8 000 и выше</td><td>До 1000</td></tr><tr><td>Параллельные прогоны на нескольких серверах</td><td>Считается по сумме</td><td>До 3000 на корпоративном</td></tr></tbody></table></div>
<p>Верхняя граница держится ровно. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, и это защищает пул от перегрузки в интересах всех клиентов. Держать заведомо избыточный лимит смысла мало: цифра из теста с запасом на треть работает точнее любой круглой величины.</p>
<h3 id="pochemu-pakety-po-potokam-ne-skladyvayutsya">Почему пакеты по потокам не складываются</h3>
<p>Правило простое: у каждого пакета свой лимит потоков, и лимиты разных пакетов между собой не суммируются. Два стандартных пакета на одном аккаунте не превращаются в 2 000 потоков. Каждый работает со своей верхней границей, независимо от соседнего.</p>
<p>Причина в устройстве учёта. Лимит привязан к пакету и считается по его собственным соединениям, поэтому вторая покупка открывает вторую независимую дорожку с собственным потолком. Ограничений на число пакетов у аккаунта нет, и это удобно там, где прогоны действительно разные: агентство держит по пакету на клиента, разработчик добавляет пакет под отдельный проект, и каждый работает со своим лимитом без взаимного влияния.</p>
<p>Отсюда практический вывод для роста нагрузки. Когда прогон упирается в потолок потоков, рост закрывается переходом на пакет со старшим лимитом. Корпоративный вариант с 3 000 потоков берётся именно в такой момент: одна дорожка с высоким потолком обслуживает нагрузку, которую два стандартных пакета обслужить не могут по определению.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Что происходит с потоками</th></tr></thead><tbody><tr><td>Один стандартный пакет</td><td>До 1000 одновременных соединений</td></tr><tr><td>Два стандартных пакета на аккаунте</td><td>Каждый работает со своим лимитом до 1000</td></tr><tr><td>Корпоративный пакет</td><td>До 3000 одновременных соединений</td></tr><tr><td>Одна привязка адреса</td><td>Лимит пакета доступен целиком</td></tr><tr><td>Две привязки адреса</td><td>Лимит делится пополам между адресами</td></tr><tr><td>Рост нагрузки за потолок</td><td>Переход на пакет со старшим лимитом</td></tr></tbody></table></div>
<p>Ошибка, которая повторяется чаще прочих, выглядит так: покупатель берёт второй пакет ради потоков, настраивает софт на суммарную цифру и получает отказы соединений уже на разгоне. Логи показывают отбитые запросы, причина сидит в расчёте. Пять минут на проверку правила перед покупкой снимают этот разбор целиком.</p>
<h2 id="dve-privyazki-adresa-i-delenie-limita-popola">Две привязки адреса и деление лимита пополам</h2>
<p>В пакет входит одновременная привязка 2 адресов. Менять их разрешено без ограничений прямо в настройках кабинета, поэтому провайдер с меняющимся адресом работе не мешает: администратор переписывает строку и продолжает прогон.</p>
<p>Две привязки покрывают типовой набор рабочих мест. Ноутбук администратора и сервер с планировщиком. Офисная машина и домашний кабинет сотрудника. Основной сервер и запасной, куда прогон переезжает на время обслуживания. Смена привязки занимает полминуты и не требует переписки с оператором.</p>
<p>Одно правило влияет на расчёт нагрузки напрямую. При двух привязанных адресах общее число потоков делится между ними пополам. Пакет на 1000 потоков при двух привязках даёт по 500 на каждый адрес, корпоративный на 3000 даёт по 1500. Когда основной прогон идёт с одной машины, вторую привязку разумнее держать пустой до момента, когда она действительно понадобится.</p>
<div class="tabl"><table><thead><tr><th>Схема привязок</th><th>Доступно потоков на стандартном пакете</th><th>Когда так удобно</th></tr></thead><tbody><tr><td>Одна привязка</td><td>До 1000 на одной машине</td><td>Весь прогон идёт с одного сервера</td></tr><tr><td>Две привязки</td><td>По 500 на каждый адрес</td><td>Сервер и рабочая машина работают параллельно</td></tr><tr><td>Доступ по логину и паролю</td><td>Лимит пакета без деления по машинам</td><td>Машин несколько либо адрес меняется часто</td></tr></tbody></table></div>
<p>Второй способ доступа снимает вопрос привязок целиком. Формат с логином и паролем авторизует запросы строкой подключения, поэтому машина может быть любой. Оба способа входят в пакет, переключаться между ними можно в любой момент. Разбор двух вариантов по шагам собран в материале про <a href="/osnovy/avtorizaciya/">способы доступа к прокси</a>.</p>
<h2 id="vydacha-spiska-dva-formata-ssylka-ili-fayl">Выдача списка: два формата, ссылка или файл</h2>
<p>Список адресов выдаётся в двух форматах. <code>IP:PORT</code> работает там, где доступ открыт привязкой своего адреса. <code>IP:PORT:LOGIN:PASS</code> работает там, где авторизация идёт парой логина и пароля. Оба формата доступны в кабинете, переключение занимает один клик.</p>
<pre><code># формат для работы с привязанным адресом
185.24.87.14:8000
185.24.87.15:8000

# формат с логином и паролем внутри строки
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<p>Забрать список можно двумя путями: получить ссылку или скачать файл. Ссылка удобна там, где софт умеет подтягивать список сам: A-Parser, ZennoPoster и планировщики принимают адрес выдачи и обновляют строки перед каждым запуском. Файл проще для ручного импорта в антидетект-сборку и для раздачи внутри команды.</p>
<p>Содержимое выдачи обновляется в реальном времени, и это меняет привычку работы с файлом. Сохранённый однажды список постепенно расходится с составом пула, часть строк перестаёт отвечать, логи наполняются отказами. Ссылка, отданная планировщику один раз, снимает этот шаг из процесса совсем. Мы выдаём оба варианта каждому пакету, поэтому выбор способа остаётся за администратором и меняется в любой момент.</p>
<h2 id="protokoly-vklyuchenie-paketa-i-sroki-dostupa">Протоколы, включение пакета и сроки доступа</h2>
<p>Протоколы идут в пакете все сразу. IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5 доступны без доплаты, адреса при этом одни и те же, меняется только строка подключения. Из сокетных вариантов мы рекомендуем SOCKS5: он умеет передавать доменное имя на сторону прокси и принимает авторизацию по логину.</p>
<pre><code># HTTP через привязанный адрес
curl -x http://185.24.87.14:8000 https://ifconfig.me

# SOCKS5 с авторизацией и резолвингом на стороне прокси
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>Включение пакета занимает примерно 5 минут после подтверждения покупки. Статус меняется в списке пакетов, раздел выдачи начинает отдавать адреса, привязка применяется сразу. Проверить работу удобно одним запросом через <code>curl</code> на сервис, который возвращает адрес на выходе, затем коротким прогоном на полсотни запросов с рабочими настройками софта. Подробности состава и порядок оформления собраны там, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к пулу</a>.</p>
<p>Сроки доступа к пулу идут четырьмя ступенями: сутки, неделя, месяц и корпоративный месяц с расширенным лимитом потоков. Разовая выгрузка каталога закрывается сутками. Регулярный съём позиций удобнее закрывать месяцем, потому что продлевать вручную каждую неделю утомительно и любая забытая ступень останавливает прогон посреди работы. Ступень выбирается по режиму работы, и трафик на этот выбор не влияет: <a href="https://iprazon.com/proxy/bezlimitnye">пакеты без счётчика гигабайтов</a> работают одинаково на всех сроках.</p>
<p>Сроки разных пакетов идут независимо друг от друга. Сезонный всплеск закрывается пакетом со старшим лимитом на время пика, после чего работа продолжается на прежнем варианте, учётная запись остаётся одной, привязанные адреса сохраняются в настройках кабинета. Именно эта независимость делает удобной схему с несколькими пакетами под разные проекты одной команды, и никаких ограничений на число пакетов у аккаунта мы не ставим.</p>
<h2 id="kak-sostav-paketa-prevraschaetsya-v-rabochie">Как состав пакета превращается в рабочие цифры</h2>
<p>Соберём разобранное в один проход. Задача описывается одной фразой, из неё выводится число целевых страниц, из числа страниц и отведённого времени выводится скорость в запросах за час, из скорости и времени отклика выводятся потоки. Срок берётся по режиму работы: разовая задача закрывается сутками, постоянная месяцем.</p>
<p>Трафик из этой цепочки выпадает совсем, потому что он безлимитный. Пул и ротация тоже не требуют расчёта: доступ идёт ко всему набору адресов, перебор внутри пула автоматический. Остаётся два параметра выбора и одно правило про деление лимита при двух привязках, и весь разговор о пакете укладывается в пять минут.</p>
<p>Проверять расчёт стоит на бесплатном тесте до 2 часов. Он даёт три величины: среднее время отклика на ваших доменах, долю успешных ответов и число потоков, при котором целевая площадка продолжает отвечать ровно. Эти цифры переносятся в выбор пакета напрямую, и покупка перестаёт быть догадкой. План теста по минутам собран в отдельном материале про <a href="/pokupka/besplatnyy-test/">бесплатный тест до покупки</a>.</p>
<p>Массовую проверку списка после включения удобно делать чекером от Zennolab, у него есть демонстрационная версия. Он проходит строки пачкой и показывает отвечающие адреса, время отклика и тип прокси. Совпадение цифр чекера с цифрами теста означает, что пакет подобран верно и прогон можно запускать в полном объёме.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chto-vhodit-v-proksi-pul">Что входит в прокси-пул?</h3>
<p>В пуле около 12 000 активных IPv4 и SOCKS5, онлайн держится в районе той же цифры в сутки. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Доступ к пулу открыт только клиентам сервиса, список обновляется в режиме реального времени.</p>
<h3 id="est-li-limity-po-potokam-i-kak-oni-schitayut">Есть ли лимиты по потокам и как они считаются?</h3>
<p>У каждого пакета свой лимит: до 1000 на стандартных вариантах и до 3000 на корпоративном. При двух привязанных адресах общее число потоков делится между ними пополам. Пакеты по потокам не складываются, каждый работает со своей верхней границей. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu-i-c">Сколько адресов можно привязать к пакету и что делать при меняющемся адресе?</h3>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Привязанный адрес меняется без ограничений прямо в настройках кабинета, поэтому меняющийся адрес провайдера работе не мешает. Второй вариант доступа идёт через логин и пароль в строке подключения.</p>
<h3 id="v-kakom-formate-i-v-kakom-vide-vydaetsya-spi">В каком формате и в каком виде выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. В кабинете доступны два способа получения: ссылка на список либо скачивание файла. Содержимое обновляется в реальном времени, поэтому перед крупным прогоном список стоит перечитать.</p>
<p>Соседние разборы по покупке лежат рядом: <a href="/pokupka/kak-kupit/">порядок действий от теста до первого запроса</a> по шагам кабинета, <a href="/pokupka/srok-dostupa/">как выбрать срок доступа под свой режим</a> с разбором ступеней, <a href="/pokupka/format-vydachi/">как приходит список адресов</a> в двух форматах. Расчёт нужного числа адресов под конкретный объём работы собран в материале про <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/chto-vhodit-v-paket/">https://kupit-proxy-ipv4.ru/pokupka/chto-vhodit-v-paket/</a></p>]]></content:encoded></item>
<item><title>Бесплатный тест прокси до 2 часов: что успеть проверить за окно</title><link>https://kupit-proxy-ipv4.ru/pokupka/besplatnyy-test/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/besplatnyy-test/</guid><description>Бесплатный тест длительностью до 2 часов даётся под конкретный запрос и закрывает один вопрос: пойдёт ли ваша программа через наш пул на ваших целевых…</description><content:encoded><![CDATA[
<p class="vvod">Бесплатный тест длительностью до 2 часов даётся под конкретный запрос и закрывает один вопрос: пойдёт ли ваша программа через наш пул на ваших целевых сайтах. За окно надо снять пять величин: авторизация, время отклика на своих доменах, реакция целевого сайта на рост частоты, удержание потоков программой и импорт списка в рабочем формате.</p>
<p>Дальше идёт разбивка окна по отрезкам, набор замеров с командами и правило, по которому цифры теста превращаются в выбор пакета. Общий порядок покупки разобран отдельно в материале про <a href="/pokupka/kak-kupit/">покупку прокси IPv4 по шагам</a>, здесь мы уходим внутрь самого тестового окна.</p>
<h2 id="pochemu-povedenie-celevogo-sayta-zaranee-ne-">Почему поведение целевого сайта заранее не предсказать</h2>
<p>Каждая площадка отвечает по-своему. Один каталог поставщика спокойно отдаёт код 200 на сорока запросах в минуту с одного адреса, соседний начинает возвращать 403 уже после десятого. Проверки живут на разных уровнях: частота обращений с адреса, набор заголовков, длительность сессии, порядок обхода страниц, скорость перехода между разделами. Комбинация правил у каждого сайта своя, снаружи она не читается.</p>
<p>Софт добавляет второй слой неизвестности. Одна программа держит список адресов внутри и берёт следующую строку после каждого запроса, другая ждёт одну строку подключения в поле настроек и меняет её только вручную. Третья резолвит доменные имена мимо посредника, и картина по адресу выходит смазанной. Мы видим эти расхождения каждый день, поэтому обещать заранее, что конкретная связка программы и сайта заработает нужным образом, нельзя.</p>
<p>Отсюда и появился тест. Два часа под ваш запрос отвечают точнее любого описания на странице пакета. Проверка идёт на том софте и на тех доменах, которые пойдут в работу после оплаты, поэтому результат переносится на боевой прогон один в один. Особенно это заметно на массовом сборе, где решает поведение площадки на длинной дистанции: под такие прогоны мы отдельно собрали <a href="https://iprazon.com/proxy/dlya-parsinga">прокси под парсинг каталогов и товарных карточек</a>.</p>
<h2 id="poryadok-zapuska-i-podgotovka-do-starta-okna">Порядок запуска и подготовка до старта окна</h2>
<p>Запуск теста укладывается в шесть движений: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, написать оператору логин и тип прокси. Первый шаг делается до всех остальных. Оператору уходит именно тип, и переигрывать его внутри окна затратно по времени.</p>
<p>Тип определяется программой. Браузеры, сборщики выдачи и парсеры карточек ходят по HTTP и HTTPS. Почтовые клиенты, десктопные программы с произвольными портами и скрипты на сокетах берут SOCKS. В пакете доступны SOCKS4 и SOCKS5, мы рекомендуем SOCKS5: он умеет резолвить доменные имена на своей стороне. Когда программа принимает оба варианта, берём <a href="https://iprazon.com/products/kupit-proxy-socks5">доступ по протоколу SOCKS5 под свой софт</a> и проверяем на нём.</p>
<p>Подготовка до активации доступа экономит первый час окна. Тот, кто начинает установку программы после получения доступа, к концу двух часов имеет один успешный ответ сервера и никакой картины. Готовим заранее всё, кроме строки подключения.</p>
<div class="tabl"><table><thead><tr><th>Что подготовить до окна</th><th>Как выглядит готовым</th><th>Что теряется без этого</th></tr></thead><tbody><tr><td>Программа установлена и запускается</td><td>Пробный прогон по прямому подключению прошёл</td><td>Первый час уходит на установку</td></tr><tr><td>Задание на 200 до 500 целевых адресов</td><td>Список URL лежит файлом рядом с проектом</td><td>Замер идёт по трём страницам и ничего не показывает</td></tr><tr><td>Включён лог с кодами ответов</td><td>В логе видно код, время и адрес</td><td>Причину отказов приходится угадывать</td></tr><tr><td>Открыт файл для цифр</td><td>Три колонки: отрезок, замер, значение</td><td>Через день от теста остаётся общее впечатление</td></tr><tr><td>Посчитана требуемая скорость</td><td>Число запросов в час записано</td><td>Потоки берутся наугад</td></tr><tr><td>Выбран протокол</td><td>HTTP, HTTPS или SOCKS5 записан для оператора</td><td>Внутри окна меняется тип и теряются минуты</td></tr></tbody></table></div>
<p>Задание для теста собирается из тех же страниц, которые пойдут в боевой прогон. Двести целевых адресов дают достаточную статистику по кодам ответов, пятьсот дают запас на ступени частоты. Брать три страницы для замера бесполезно: любой сайт отвечает на три обращения ровно, и порог частоты на такой выборке не проявится.</p>
<p>Отдельно проверяем, что рабочая машина выходит в сеть с того адреса, который указан в настройках. Провайдер с меняющимся адресом переписывает его без предупреждения, и активированный доступ упирается в чужой адрес привязки. Смотрим адрес прямо перед активацией.</p>
<p>Сообщение оператору пишем одной строкой и сразу с двумя обязательными полями: логин в кабинете и выбранный тип прокси. Полезно добавить третьим пунктом название программы и характер задачи. Так ответ приходит одним сообщением, и минуты окна не уходят на уточняющую переписку. Оператор при этом видит, что именно проверяется, и подсказывает по формату строки подключения для конкретного софта.</p>
<h2 id="plan-na-dva-chasa-razbivka-okna-po-otrezkam">План на два часа: разбивка окна по отрезкам</h2>
<p>План занимает один экран. Каждому отрезку соответствует один замер и один признак, по которому мы считаем отрезок пройденным. Порядок отрезков не переставляется: каждый следующий опирается на цифру предыдущего, и перепрыгнуть через отклик к потокам не выйдет.</p>
<div class="tabl"><table><thead><tr><th>Отрезок окна</th><th>Что проверяем</th><th>Признак успеха</th></tr></thead><tbody><tr><td>0 до 10 минуты</td><td>Авторизация и адрес на выходе</td><td>Запрос проходит, на выходе адрес из пула</td></tr><tr><td>10 до 30 минуты</td><td>Медиана отклика на своём целевом домене</td><td>Разброс между запросами держится в узком коридоре</td></tr><tr><td>30 до 50 минуты</td><td>Ступенчатый рост частоты обращений</td><td>Коды ответов сохраняются при переходе на следующую ступень</td></tr><tr><td>50 до 80 минуты</td><td>Рабочий прогон на расчётном числе потоков</td><td>Скорость растёт вместе с потоками, отказов единицы</td></tr><tr><td>80 до 100 минуты</td><td>Пик потоков и удержание соединений</td><td>Программа держит заданное число соединений</td></tr><tr><td>100 до 120 минуты</td><td>Выдача списка и импорт в программу</td><td>Оба формата подтягиваются, прогон стартует заново</td></tr></tbody></table></div>
<p>Логика последовательности простая. Пока авторизация не подтверждена, замер отклика описывает прямое подключение и картину искажает. Пока неизвестна медиана отклика, число потоков не с чем сопоставить. Пока не найден порог частоты целевого сайта, прогон на большом числе соединений упирается в отказы площадки и показывает только её порог, при этом возможности пула остаются за кадром замера.</p>
<p>Двадцать минут в конце оставляем под пересдачу любого отрезка, который дал странную цифру. Такой запас нужен всегда. Практика показывает, что один замер из шести приходится повторять: то лог оказался выключен, то в задании остался старый список адресов от прошлого проекта.</p>
<h2 id="pervye-desyat-minut-avtorizaciya-i-adres-na-">Первые десять минут: авторизация и адрес на выходе</h2>
<p>Начинаем с одного запроса. Пока не подтверждено, что трафик уходит через пул, все остальные цифры бессмысленны.</p>
<pre><code># адрес на выходе через привязанный в кабинете адрес машины
curl -s -x http://185.24.87.14:8000 https://ifconfig.me

# то же самое с парой логина и пароля внутри строки
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# SOCKS5 с резолвингом доменных имён на стороне прокси
curl -s -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>Ответ должен показать адрес, отличный от адреса рабочей машины. Совпадение означает, что программа обошла посредник стороной: у части утилит настройка прокси живёт в отдельном профиле и не подхватывается глобально.</p>
<p>Код 407 в ответе указывает на авторизацию. Разбираем две причины по очереди. Первая: привязка в настройках кабинета оформлена на прежний адрес машины. Вторая: программа ждёт логин и пароль отдельными полями и ломает строку, склеенную через двоеточие. Обе закрываются за минуту, если знать, куда смотреть, и обе разбираются вместе с оператором прямо внутри тестового окна.</p>
<p>Здесь же смотрим на привязки. При двух привязанных адресах общий лимит потоков делится между ними пополам, поэтому на время теста держим одну привязку. Иначе замер по потокам покажет половину доступного числа, и расчёт пакета уедет вниз.</p>
<p>Ещё одна проверка первых минут занимает секунды и снимает много вопросов позже: сравнить адрес на выходе при двух подряд идущих запросах. Ротация внутри пула автоматическая, поэтому соседние обращения нередко уходят с разных адресов. Программы, которые рассчитывают на постоянство адреса внутри сессии, ведут себя на такой схеме иначе, и увидеть это лучше сразу.</p>
<pre><code>for i in 1 2 3 4 5; do
  curl -s -x http://185.24.87.14:8000 https://ifconfig.me
  echo
done</code></pre>
<p>Разные адреса в выводе означают, что ротация работает и запросы расходятся по пулу. Одинаковые тоже нормальны: пул держится в районе 12 000 активных адресов, и повтор на коротком отрезке встречается.</p>
<h2 id="vremya-otklika-zamer-idet-po-svoim-celevym-d">Время отклика: замер идёт по своим целевым доменам</h2>
<p>Общий чекер отвечает на вопрос про доступность и на этом останавливается. Рабочую цифру даёт запрос к вашему целевому домену с вашим набором заголовков. Разница между двумя замерами доходит до нескольких раз, потому что путь до популярного сервиса проверки и путь до каталога поставщика проходят по разным маршрутам.</p>
<pre><code>curl -o /dev/null -s -x http://185.24.87.14:8000 \
  -w "connect=%{time_connect} first=%{time_starttransfer} total=%{time_total} code=%{http_code}\n" \
  https://target-catalog.ru/catalog/section/17</code></pre>
<p>Гоняем этот запрос 50 раз подряд с паузой в секунду и складываем строки в файл. Три величины из вывода работают на разные вопросы: <code>time_connect</code> показывает качество канала до узла, <code>time_starttransfer</code> показывает, сколько думает сам сайт, <code>time_total</code> идёт в расчёт потоков.</p>
<p>Считаем медиану, не среднее. Одно зависание на 12 секунд поднимает среднее так, что цифра перестаёт описывать типичный запрос. Медиана и разброс между двадцать пятым и семьдесят пятым процентилем описывают картину честно. Подробный разбор методики замера лежит в материале про <a href="/proverka/skorost-i-otklik/">скорость и время отклика</a>, внутри теста хватит медианы и доли успешных ответов.</p>
<p>Пинг до адреса прокси в расчёт не берём. Он измеряет отзыв узла на служебный пакет и ничего не говорит о том, за сколько целевой сайт отдаст HTML на 300 килобайт.</p>
<h2 id="povedenie-celevogo-sayta-pri-roste-chastoty">Поведение целевого сайта при росте частоты</h2>
<p>Это главный замер окна. Сайт спокойно отвечает на редкие обращения и меняет поведение при переходе через свой порог, а порог этот у каждого свой. Поднимаем частоту ступенями и фиксируем, что происходит на каждой.</p>
<div class="tabl"><table><thead><tr><th>Ступень</th><th>Частота с одного адреса</th><th>Что записываем</th></tr></thead><tbody><tr><td>Первая</td><td>5 запросов в минуту</td><td>Базовый код ответа и размер тела</td></tr><tr><td>Вторая</td><td>15 запросов в минуту</td><td>Изменение времени ответа</td></tr><tr><td>Третья</td><td>30 запросов в минуту</td><td>Появление 429 и заголовка <code>Retry-After</code></td></tr><tr><td>Четвёртая</td><td>60 запросов в минуту</td><td>Доля 403 и промежуточных страниц</td></tr></tbody></table></div>
<p>Каждая ступень держится по пять минут. Записываем код, размер ответа и время. Размер важен наравне с кодом: часть площадок отдаёт 200 вместе с укороченной страницей вместо каталога, и по одному коду такую подмену не поймать. Заголовок <code>Retry-After</code> в ответе с кодом 429 подсказывает паузу, которую сайт считает приемлемой, и эта цифра прямо переносится в настройки задержки в программе.</p>
<p>Полезно записывать и заголовки ответа целиком. Часть площадок выдаёт подсказки прямо в них: <code>X-RateLimit-Remaining</code> показывает остаток квоты, <code>Server</code> и <code>Via</code> намекают на промежуточный узел перед приложением, <code>Set-Cookie</code> появляется там, где сайт начал вести сессию. Такая мелочь потом экономит часы разбора уже на боевом прогоне, потому что причина отказов оказывается видна с первого взгляда в лог.</p>
<p>Ступень, на которой картина испортилась, и есть ваш рабочий потолок. Берём предыдущую ступень и работаем на ней. Ротация внутри пула автоматическая, адреса меняются, поэтому суммарная скорость прогона набирается числом параллельных соединений, при этом частота с каждой отдельной точки остаётся в комфортных для сайта пределах.</p>
<h2 id="potoki-i-format-vydachi-posledniy-chas-okna">Потоки и формат выдачи: последний час окна</h2>
<h3 id="uderzhanie-potokov-programmoy">Удержание потоков программой</h3>
<p>Проверяем, что программа реально держит заданное число соединений. Ставим 20 потоков, засекаем скорость. Дальше 50, 100, 200 и расчётная цифра. На каждой ступени смотрим три показателя: фактическую скорость в запросах за минуту, долю таймаутов, глубину очереди ожидания.</p>
<p>Скорость растёт с числом потоков до определённой точки, потом упирается в целевой сайт или в саму программу. Эту точку и фиксируем. Она чаще оказывается ниже, чем ожидает покупатель, потому что упор возникает на стороне площадки. В A-Parser лимит потоков задаётся на уровне задания, и подробности настройки собраны на странице про <a href="https://iprazon.com/instrumenty/a-parser">настройку A-Parser под работу с пулом</a>. В сборках автоматизации счётчик потоков живёт в свойствах проекта, разбор есть на странице про <a href="https://iprazon.com/instrumenty/zennoposter">прокси для проектов ZennoPoster</a>.</p>
<p>Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются, поэтому цифру из теста сравниваем с лимитом одного пакета.</p>
<p>Отдельно следим за долей таймаутов при росте числа соединений. Пока она держится около нуля, потоки можно поднимать дальше. Как только каждый десятый запрос уходит в ожидание, дальнейший рост числа соединений замедляет прогон: программа тратит время на переоткрытие висящих запросов, а суммарная скорость падает. Точка перелома фиксируется именно по этому показателю, и она надёжнее любых круглых цифр вроде сотни или пятисот.</p>
<h3 id="format-vydachi-i-import-spiska">Формат выдачи и импорт списка</h3>
<p>Последние двадцать минут отдаём выдаче. Список приходит в двух форматах: <code>IP:PORT</code> для работы с привязанным адресом и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину и паролю. Забрать его можно ссылкой или файлом, оба варианта лежат в кабинете. Список обновляется в режиме реального времени.</p>
<pre><code>185.24.87.14:8000
185.24.87.15:8000
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<p>Импортируем список в программу тем способом, которым будем пользоваться каждый день. Часть программ ждёт разделитель двоеточием, часть просит логин и пароль отдельными полями, часть умеет подтягивать список по ссылке сама. Проверить это стоит именно сейчас: разбор формата после оплаты отнимает вечер, внутри окна вопрос закрывается сообщением оператору. Что делать со списком дальше, разобрано в материале про <a href="/pokupka/format-vydachi/">формат выдачи адресов</a>.</p>
<h2 id="tri-cifry-iz-testa-i-kak-oni-prevraschayutsy">Три цифры из теста и как они превращаются в пакет</h2>
<p>Из окна надо унести три числа. Медиану времени полного ответа на своём домене, долю успешных ответов на рабочей ступени частоты и число потоков, при котором скорость перестала расти. Всё остальное это наблюдения, эти три идут в расчёт.</p>
<div class="tabl"><table><thead><tr><th>Цифра из теста</th><th>Как снимается</th><th>Во что превращается</th></tr></thead><tbody><tr><td>Медиана <code>time_total</code></td><td>50 запросов подряд к целевому домену</td><td>Множитель в формуле потоков</td></tr><tr><td>Доля успешных ответов</td><td>Коды на рабочей ступени частоты</td><td>Запас по скорости и длина пауз</td></tr><tr><td>Рабочее число потоков</td><td>Ступени 20, 50, 100, 200</td><td>Лимит потоков в пакете</td></tr></tbody></table></div>
<p>Формула короткая: требуемая скорость в запросах за час умножается на медиану в секундах и делится на 3600. Скорость 18 000 запросов в час при медиане 3,2 секунды даёт 16 одновременных соединений. Добавляем треть запаса на пиковые моменты, когда часть соединений ждёт ответа, и получаем 21 поток. Такая цифра спокойно ложится в стандартный пакет.</p>
<p>Доля успешных ответов задаёт срок. Прогон, где на рабочей ступени отвечает подавляющее большинство запросов, укладывается в расчётное время. Прогон с заметной долей повторов растягивается, и под него берётся срок на ступень длиннее. Как раз на этом месте цифры теста становятся выбором строки в кабинете, и по ним удобно <a href="https://iprazon.com/products/kupit-proxy-ipv4">собрать пакет прокси IPv4 по своим замерам</a>.</p>
<p>Третья цифра сравнивается с лимитом пакета напрямую. Если тест показал 21 поток, стандартного лимита хватает с большим запасом. Если прогон уверенно шёл на 700 потоках и упирался в программу, разговор идёт про корпоративный вариант с расширенным лимитом. Трафик безлимитный на всех пакетах, поэтому объём выкачанных страниц в расчёт не входит совсем: считаем только скорость, потоки и срок.</p>
<p>Записываем цифры в тот же файл, где лежал план. Через неделю подробности стираются, и у покупателя остаётся общее ощущение вроде «работало нормально». Строка вида «медиана 3,2 с, успешных 97 процентов, потолок 240 потоков» возвращает к выбору пакета в любой момент, и повторное окно для этого уже не понадобится.</p>
<h2 id="chego-v-testovom-okne-delat-ne-nado">Чего в тестовом окне делать не надо</h2>
<p>Первое: тратить окно на установку программы. Софт ставится и проверяется по прямому подключению заранее, внутри окна меняется одна строка настроек.</p>
<p>Второе: ограничиваться общим чекером. Он показывает, что доступ работает, дальше его польза заканчивается. Настоящий ответ даёт ваша программа на ваших доменах.</p>
<p>Третье: менять несколько настроек за один заход. Поменяли протокол, потоки и паузу одновременно, картина изменилась, причина неизвестна. Меняем по одному.</p>
<div class="tabl"><table><thead><tr><th>Что делают часто</th><th>Что получают в итоге</th><th>Как правильно</th></tr></thead><tbody><tr><td>Ставят программу внутри окна</td><td>Один ответ сервера за два часа</td><td>Ставят и прогоняют заранее</td></tr><tr><td>Гоняют только общий чекер</td><td>Доступ есть, поведения сайта не видно</td><td>Работают на своих целевых доменах</td></tr><tr><td>Сразу выкручивают потоки в максимум</td><td>Целевой сайт закрывается на первой минуте</td><td>Идут ступенями от 20</td></tr><tr><td>Держат две привязки</td><td>Замер по потокам вдвое ниже реального</td><td>Оставляют одну привязку на время теста</td></tr><tr><td>Ищут выборку по стране</td><td>Время уходит на поиск фильтра</td><td>Работают с общим пулом, микс со всего мира</td></tr><tr><td>Тестируют на постороннем домене</td><td>Цифры не переносятся на боевой прогон</td><td>Берут те же адреса, что пойдут в работу</td></tr></tbody></table></div>
<p>Четвёртое: гнать максимум потоков с первой минуты. Целевая площадка отвечает на такой заход отказами, замер срывается, и половина окна уходит на ожидание, пока сайт снова начнёт отвечать нормально.</p>
<p>Пятое: искать в кабинете фильтр по стране. Пул устроен как микс со всего мира, адреса приходят из множества стран, выборка по отдельной стране не делается. Разнообразие подсетей при этом работает на задачу само по себе, и после теста остаётся <a href="https://iprazon.com/products/kupit-proxy-ipv4">взять доступ к пулу IPv4 на нужный срок</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu">Подойдут ли прокси под мою задачу?</h3>
<p>Заранее предугадать поведение каждой связки программы и площадки нельзя, поэтому до покупки доступен бесплатный тест длительностью до 2 часов под ваш запрос. Замер идёт на вашем софте и ваших доменах, и его цифры переносятся на рабочий прогон напрямую.</p>
<h3 id="kak-zapustit-besplatnyy-test">Как запустить бесплатный тест?</h3>
<p>Порядок шести шагов такой: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. После этого доступ открыт, и окно до 2 часов идёт под вашу задачу.</p>
<h3 id="chem-proveryat-proksi-vo-vremya-testa">Чем проверять прокси во время теста?</h3>
<p>Для массовой проверки списка мы рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Точечные замеры по своему домену удобнее снимать через <code>curl</code> с ключом <code>-w</code>.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Забрать список можно ссылкой или файлом, оба варианта доступны в кабинете, и список обновляется в режиме реального времени. Импорт в свою программу стоит проверить прямо внутри тестового окна.</p>
<p>Соседние шаги выбора разобраны отдельно: <a href="/pokupka/kakie-proxy-pokupat/">какие прокси покупать под конкретную задачу</a> с разбором по типам софта, <a href="/pokupka/chto-vhodit-v-paket/">что входит в пакет</a> по потокам, трафику и привязкам, <a href="/pokupka/srok-dostupa/">как выбрать срок доступа</a> под разовый прогон и постоянную работу. Когда пакет уже включён, порядок первой проверки описан в материале про <a href="/proverka/kak-proverit/">проверку работы прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/besplatnyy-test/">https://kupit-proxy-ipv4.ru/pokupka/besplatnyy-test/</a></p>]]></content:encoded></item>
<item><title>Срок доступа к прокси: сутки, неделя или месяц</title><link>https://kupit-proxy-ipv4.ru/pokupka/srok-dostupa/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/srok-dostupa/</guid><description>Срок доступа выбирается по характеру задачи: разовый прогон закрывается сутками, серия проверок неделей, постоянная работа месяцем. Доступны четыре варианта:…</description><content:encoded><![CDATA[
<p class="vvod">Срок доступа выбирается по характеру задачи: разовый прогон закрывается сутками, серия проверок неделей, постоянная работа месяцем. Доступны четыре варианта: сутки, неделя, месяц и корпоративный месяц с лимитом до 3000 потоков, трафик безлимитный на любом из них.</p>
<p>Дальше разобрано, что именно оплачивает срок, как посчитать длительность под конкретный объём страниц, почему разовый прогон почти всегда упирается в число потоков, и что происходит с доступом при продлении и переходе на старший пакет.</p>
<h2 id="kakie-sroki-dostupa-est-i-chem-oni-otlichayu">Какие сроки доступа есть и чем они отличаются</h2>
<p>Линейка короткая и построена по одной логике: чем длиннее срок, тем спокойнее идёт повторяющаяся работа. Внутри всех вариантов пул один и тот же, около 12 000 активных адресов с автоматической ротацией, а различие сидит в длительности и в потолке одновременных соединений.</p>
<div class="tabl"><table><thead><tr><th>Срок доступа</th><th>Под какую работу</th><th>Потоки</th><th>Что удобно</th></tr></thead><tbody><tr><td>Сутки</td><td>Разовый прогон с известным объёмом</td><td>До 1000</td><td>Быстрый вход, никаких обязательств дальше</td></tr><tr><td>Неделя</td><td>Серия проверок с перерывами</td><td>До 1000</td><td>Между заходами доступ остаётся открытым</td></tr><tr><td>Месяц</td><td>Постоянный сбор и регулярные прогоны</td><td>До 1000</td><td>Продление раз в месяц, расписание не рвётся</td></tr><tr><td>Корпоративный месяц</td><td>Параллельные прогоны команды</td><td>До 3000</td><td>Высокий потолок соединений на одном пакете</td></tr></tbody></table></div>
<p>Сутки закрывают ситуацию, когда объём известен заранее и работа заканчивается в один заход. Выгрузили каталог поставщика, сверили остатки, проверили свой сайт из другой сети, доступ отработал и закрылся.</p>
<p>Неделя рассчитана на работу с паузами. Съём позиций по семантике идёт в понедельник и четверг, между заходами разбираются выгрузки, правятся задания, добавляются новые запросы. Держать под такой ритм суточные включения неудобно: каждое утро начинается с оформления вместо работы.</p>
<p>Месяц берут там, где прогон стал частью процесса. Магазин снимает прайсы конкурентов ежедневно, агентство ведёт съём выдачи по нескольким проектам, разработчик держит фоновую проверку доступности. Такой режим удобнее всего закрывает <a href="https://iprazon.com/proxy/na-mesyats">доступ к пулу IPv4 на месяц</a>, потому что расписание перестаёт зависеть от ручных продлений.</p>
<h2 id="za-chto-platit-srok-dostupa">За что платит срок доступа</h2>
<p>Срок оплачивает доступ к пулу вместе с лимитом одновременных потоков. Внутри срока никаких счётчиков нет: трафик безлимитный, объём выкачанных страниц на стоимость не влияет и в расчёт не входит. Это снимает целый пласт планирования, который обычно съедает время перед крупной выгрузкой.</p>
<p>Считать приходится только две величины: сколько длится работа и сколько соединений она держит одновременно. Всё остальное входит в пакет по умолчанию: протоколы IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, две привязки своего адреса, выдача списка в двух форматах ссылкой или файлом, обновление списка в режиме реального времени.</p>
<div class="tabl"><table><thead><tr><th>Что меняется от срока</th><th>Что не меняется никогда</th></tr></thead><tbody><tr><td>Длительность доступа к пулу</td><td>Размер пула, около 12 000 адресов</td></tr><tr><td>Периодичность продления</td><td>Автоматическая ротация внутри пула</td></tr><tr><td>Потолок потоков на корпоративном варианте</td><td>Безлимитный трафик на всех сроках</td></tr><tr><td>Удобство расписания прогонов</td><td>Набор протоколов и форматов выдачи</td></tr><tr><td>Частота обращений в кабинет</td><td>Две привязки адреса со свободной сменой</td></tr></tbody></table></div>
<p>Из этой таблицы следует практический вывод. Тот, кто выбирает между неделей и месяцем, выбирает ритм собственной работы, при этом качество и состав доступа остаются одинаковыми. Разбор состава пакета по пунктам мы вынесли в отдельный материал, здесь достаточно помнить, что срок и потоки это единственные переменные.</p>
<p>Ещё один момент упрощает выбор. Пул внутри всех сроков общий, около 12 000 активных адресов в сутки, ротация автоматическая, список обновляется в режиме реального времени. Суточный доступ ходит по тем же адресам, что и месячный. Поэтому короткий срок годится и для проверки перед длинной серией: цифры, снятые за сутки, переносятся на месяц напрямую.</p>
<p>Отдельно про объём выкачки. Прогон на 40 000 карточек и прогон на 400 000 карточек оплачиваются одинаково, если оба укладываются в один срок. Работа без счётчика гигабайтов описана на странице про <a href="https://iprazon.com/proxy/bezlimitnye">доступ с безлимитным трафиком на любом сроке</a>, и на длинных выгрузках это заметно сильнее всего.</p>
<h2 id="harakter-zadachi-zadaet-srok">Характер задачи задаёт срок</h2>
<p>Разделим работу на три типа. Разовый прогон: объём известен, дата известна, повтор не планируется. Серия проверок: заходы повторяются с интервалом от нескольких дней, объём каждого небольшой. Постоянная работа: прогон идёт по расписанию и останавливаться не должен.</p>
<div class="tabl"><table><thead><tr><th>Сценарий работы</th><th>Разумный срок</th><th>Потоки</th></tr></thead><tbody><tr><td>Выгрузка каталога одного поставщика</td><td>Сутки</td><td>50 до 200</td></tr><tr><td>Проверка своего сайта из другой сети</td><td>Сутки</td><td>20 и меньше</td></tr><tr><td>Разовая инвентаризация цен по рынку</td><td>Сутки</td><td>200 до 500</td></tr><tr><td>Съём позиций по семантике два раза в неделю</td><td>Неделя</td><td>100 до 300</td></tr><tr><td>Серия A/B проверок отдачи страниц</td><td>Неделя</td><td>50 до 150</td></tr><tr><td>Приёмка нового парсера перед запуском</td><td>Неделя</td><td>100 до 400</td></tr><tr><td>Ежедневный сбор прайсов и остатков</td><td>Месяц</td><td>300 до 1000</td></tr><tr><td>Ведение нескольких рекламных кабинетов</td><td>Месяц</td><td>50 до 200</td></tr><tr><td>Фоновый мониторинг доступности площадок</td><td>Месяц</td><td>20 до 100</td></tr><tr><td>Параллельные прогоны на несколько серверов</td><td>Корпоративный месяц</td><td>До 3000</td></tr><tr><td>Агентство с проектами нескольких клиентов</td><td>Корпоративный месяц</td><td>До 3000</td></tr></tbody></table></div>
<p>Границы между типами размытые, и в спорном случае мы советуем брать ступень выше. Задача с формулировкой «попробуем неделю, дальше посмотрим» через две недели превращается в постоянную, и продлевать сутками семь раз подряд утомительнее, чем один раз оформить месяц.</p>
<p>Работает и обратная проверка. Если задача звучит как «собрать один раз и забыть», длинный срок пользы не добавит: пул тот же, потоки те же, доступ просто останется открытым дольше нужного.</p>
<p>Мы советуем начинать разговор о сроке с одной фразы, описывающей работу без прилагательных. «Снять остатки у восьми поставщиков перед закупкой» это разовая задача на сутки. «Держать сверку остатков каждое утро» это месяц. «Прогнать семантику по трём проектам за сезонную волну» это неделя. Формулировка сразу показывает, повторяется работа или закрывается одним заходом, и на этом выбор срока обычно и заканчивается.</p>
<h2 id="arifmetika-kak-poschitat-srok-pod-obem">Арифметика: как посчитать срок под объём</h2>
<p>Расчёт держится на трёх числах: количество целевых страниц, скорость прогона в страницах за час и запас на разбор ошибок. Скорость берётся из бесплатного теста до 2 часов, где снимается медиана отклика и рабочее число потоков. Как проходит замер, подробно разобрано в материале про <a href="/pokupka/besplatnyy-test/">бесплатный тест до 2 часов</a>.</p>
<p>Формула такая: страницы делим на скорость и получаем часы работы. Дальше добавляем запас: примерно треть времени уходит на повторы, разбор кодов ответа, правку заданий и дозагрузку пропущенных страниц.</p>
<pre><code>страницы:            180 000
скорость прогона:    9 000 страниц в час
время прогона:       180 000 / 9 000 = 20 часов
запас на разбор:     20 * 0,35 = 7 часов
итого:               27 часов</code></pre>
<p>Двадцать семь часов в сутки не помещаются. Значит, вариантов два: поднять число потоков и уложиться в сутки либо взять неделю и работать спокойно. Второй путь мы советуем чаще, потому что первый упирается в поведение целевой площадки и цифра скорости оказывается недостижимой.</p>
<div class="tabl"><table><thead><tr><th>Объём страниц</th><th>Скорость прогона</th><th>Расчётное время с запасом</th><th>Срок</th></tr></thead><tbody><tr><td>30 000</td><td>6 000 в час</td><td>Около 7 часов</td><td>Сутки</td></tr><tr><td>180 000</td><td>9 000 в час</td><td>Около 27 часов</td><td>Неделя</td></tr><tr><td>600 000</td><td>12 000 в час</td><td>Около 68 часов</td><td>Неделя</td></tr><tr><td>400 000 ежедневно</td><td>15 000 в час</td><td>Около 36 часов в сутки</td><td>Корпоративный месяц</td></tr></tbody></table></div>
<p>Последняя строка показывает типичный тупик: расчёт даёт больше часов, чем есть в сутках. Такой объём разносится на несколько параллельных прогонов, и тогда упор смещается на число одновременных соединений.</p>
<p>Запас в треть мы берём из практики, и он редко оказывается лишним. Часть страниц отдаёт коды, требующие повтора. Часть заданий приходится править по ходу, когда у площадки поменялась вёрстка. Отдельные разделы отвечают заметно медленнее остальных, и средняя скорость по прогону проседает ниже расчётной. Если работа идёт по знакомому сайту с отлаженным заданием, запас сокращаем до пятой части, при первом проходе по новой площадке держим половину.</p>
<p>Ещё одна поправка касается расписания. Скорость прогона на одном и том же наборе потоков различается по часам суток: ночью площадка отвечает быстрее, днём медленнее. Разница доходит до полутора раз, поэтому длинные выгрузки мы обычно ставим на ночное окно и считаем срок по ночной скорости.</p>
<h2 id="razovyy-progon-upiraetsya-v-chislo-potokov">Разовый прогон упирается в число потоков</h2>
<p>Самая частая ошибка при выборе срока звучит так: «объём большой, возьмём месяц». Месяц при разовой выгрузке ничего не ускоряет. Прогон, который считался по формуле выше на 27 часов, займёт эти же 27 часов и на суточном, и на месячном варианте: скорость задаётся числом одновременных соединений и откликом целевой площадки.</p>
<p>Ускорение приходит из другого места. Двадцать потоков при медиане ответа 3 секунды дают около 24 000 страниц за час теоретического потолка, при этом реальная цифра ниже из-за пауз и повторов. Поднимаем потоки до сотни, и расчётное время сжимается пропорционально, пока целевой сайт держит частоту.</p>
<div class="tabl"><table><thead><tr><th>Что увеличиваем</th><th>Что происходит со временем прогона</th><th>Где предел</th></tr></thead><tbody><tr><td>Срок доступа</td><td>Время прогона остаётся прежним</td><td>Смысла для разовой задачи нет</td></tr><tr><td>Число потоков</td><td>Время сокращается почти пропорционально</td><td>Лимит пакета и порог целевого сайта</td></tr><tr><td>Число целевых доменов в задании</td><td>Общая нагрузка расходится шире</td><td>Готовность списка заданий</td></tr><tr><td>Число привязанных адресов</td><td>Лимит потоков делится пополам</td><td>Две привязки в пакете</td></tr></tbody></table></div>
<p>Отсюда правило для разовых задач: сначала считаем потоки, потом подбираем минимальный срок, который эти потоки покрывает. Сколько адресов и соединений нужно под конкретный объём, отдельно разобрано в материале про <a href="/osnovy/skolko-adresov-nuzhno/">расчёт числа адресов под задачу</a>.</p>
<p>Верхняя граница у потоков тоже есть. Стандартный пакет держит до 1000 одновременных соединений, корпоративный до 3000. Пакеты по потокам не складываются: два стандартных пакета на одном аккаунте работают каждый со своим лимитом и в сумму не собираются. Поэтому рост нагрузки закрывается переходом на старший вариант.</p>
<h2 id="seriya-proverok-i-postoyannaya-rabota">Серия проверок и постоянная работа</h2>
<p>Серия проверок живёт по своим правилам. Заходов несколько, каждый короткий, между ними пауза на разбор. Считаем здесь расстояние между первым и последним заходом, суммарные часы работы отходят на второй план. Три прогона по два часа, разнесённые на понедельник, среду и пятницу, требуют недельного доступа, хотя сама работа занимает в них шесть часов.</p>
<p>Постоянная работа считается ещё проще: доступ должен быть открыт всё время, поэтому берётся месяц. Ежедневный сбор прайсов, ночная сверка остатков, фоновый съём позиций по расписанию планировщика. Любой разрыв в доступе здесь означает пропущенный запуск и дыру в собранных рядах данных.</p>
<p>Ещё один аргумент за месяц это стабильность настроек. Привязанные адреса, ссылка на выдачу списка, конфигурация программы остаются на месте всё время работы пакета, и администратору не приходится возвращаться к настройке после каждого продления. Тем, у кого прогоны идут по расписанию без перерывов, мы рекомендуем <a href="https://iprazon.com/proxy/na-mesyats">месячный доступ к серверному пулу адресов</a>.</p>
<p>Сезонность вписывается в ту же схему. Магазин перед высоким сезоном поднимает частоту сверки остатков, объём растёт примерно вдвое, через полтора месяца режим возвращается к обычному. Здесь удобно взять на пик пакет со старшим лимитом потоков и потом продолжить работу на прежнем, срок при этом остаётся месячным в обоих случаях.</p>
<h2 id="prodlenie-i-perehod-na-drugoy-paket">Продление и переход на другой пакет</h2>
<p>Продление оформляется в кабинете до истечения срока. Пакет, продлённый заранее, работает без паузы, выдача списка остаётся доступной непрерывно, задания планировщика идут по расписанию. Когда срок закончился, доступ к выдаче закрывается, при этом учётная запись и настройки привязки сохраняются, поэтому возобновление занимает считанные минуты: пакет включается примерно за 5 минут после оформления.</p>
<div class="tabl"><table><thead><tr><th>Что произошло</th><th>Что делаем</th><th>Что с доступом</th></tr></thead><tbody><tr><td>Задача продолжается в прежнем объёме</td><td>Продлеваем до окончания срока</td><td>Работа идёт без паузы</td></tr><tr><td>Нагрузка выросла внутри лимита</td><td>Оставляем пакет, поднимаем потоки в программе</td><td>Доступ прежний</td></tr><tr><td>Нагрузка перешагнула лимит потоков</td><td>Берём пакет со старшим лимитом</td><td>Новый лимит доступен после включения</td></tr><tr><td>Появился второй независимый проект</td><td>Оформляем отдельный пакет на том же аккаунте</td><td>Каждый пакет со своим лимитом</td></tr><tr><td>Срок вышел, работа приостановлена</td><td>Даём сроку истечь</td><td>Настройки и учётная запись остаются</td></tr></tbody></table></div>
<p>Переход на другой срок строится тем же порядком: оформляется вариант с нужной длительностью, и работа продолжается на нём. Ограничений на число пакетов у аккаунта нет, поэтому агентство спокойно держит несколько пакетов под разных клиентов, а разработчик добавляет второй под отдельный проект.</p>
<p>Один момент стоит проверить перед продлением. Если за прошедший срок задача изменилась и потоков стало не хватать, продление прежнего варианта эту нехватку сохранит. Смотрим на логи прошлого периода: доля отбитых соединений и очередь ожидания подскажут, пора ли переходить на старший лимит. Как это отражается на скорости прогона, хорошо видно на страницах про <a href="https://iprazon.com/proxy/dlya-parsinga">прокси под массовый сбор данных</a>.</p>
<h2 id="srok-i-dve-privyazki-adresa">Срок и две привязки адреса</h2>
<p>В пакет входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках. Срок на это правило не влияет: и суточный, и месячный вариант дают одинаковые две привязки со свободной сменой.</p>
<p>Влияние идёт в другую сторону. При двух привязанных адресах общий лимит потоков делится между ними пополам: пакет на 1000 потоков даёт по 500 на каждый адрес. Расчёт срока при этом меняется, потому что скорость прогона с одной машины падает вдвое, и работа, посчитанная на 20 часов, растягивается до сорока.</p>
<p>Правило простое. Если весь прогон идёт с одной машины, вторую привязку держим свободной до момента, когда она реально понадобится. Если работают две машины параллельно, суммарная скорость сохраняется, при этом каждая половина лимита считается отдельно.</p>
<p>Есть и обходной путь для машин, которых больше двух. Формат выдачи <code>IP:PORT:LOGIN:PASS</code> авторизует запросы парой логина и пароля, и привязка адреса машины для него не требуется. Такой вариант удобен облачным сборщикам и серверам с меняющимся адресом, а лимит потоков при этом остаётся общим по пакету. Оба способа доступа входят в пакет, и переключаться между ними разрешено в любой момент.</p>
<p>На длинных сроках вторая привязка выручает при переездах. Провайдер сменил адрес рабочей машины, администратор переписал строку в настройках и продолжил работу без остановки прогона. На месячном доступе такое случается почти всегда, поэтому вторую привязку разумно оставлять как резерв на смену адреса.</p>
<h2 id="kogda-berut-korporativnyy-mesyac">Когда берут корпоративный месяц</h2>
<p>Корпоративный месяц отличается потолком потоков: до 3000 против 1000 на стандартных вариантах. Берут его в трёх ситуациях, и все три опознаются по цифрам из расчёта. Размер компании тут ни при чём: мы регулярно видим корпоративный вариант у одного администратора с тремя серверами.</p>
<p>Первая: прогоны идут с нескольких серверов одновременно. Три машины по 400 соединений каждая упираются в стандартный лимит, при этом на корпоративном варианте работают свободно и оставляют запас на пики.</p>
<p>Вторая: агентство ведёт параллельные проекты клиентов. Расписание съёма выдачи, сбор прайсов и проверка страниц идут в одни и те же часы, суммарная нагрузка складывается, и потолок в 1000 соединений становится узким местом всей связки.</p>
<p>Третья: расчёт по формуле дал больше часов, чем помещается в сутки. Единственный путь уложиться в окно это параллельность, а параллельность считается в потоках. Тем, кто уже упёрся в потолок стандартного пакета, стоит смотреть на <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакеты прокси IPv4 с расширенным лимитом потоков</a>.</p>
<p>Обратите внимание на одну деталь. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, и это правило защищает пул в интересах всех клиентов. Поэтому лимит мы советуем брать под посчитанную нагрузку с разумным запасом примерно в треть. Многократное превышение расчётной цифры пользы работе не добавляет.</p>
<p>Корпоративный вариант удобен ещё одним: команда держит один пакет с высоким потолком и раздаёт нагрузку между задачами внутри него. Раздельные пакеты под каждый проект дают ту же гибкость по срокам, при этом лимиты у них считаются независимо, и перекинуть свободные соединения с одного на другой не выйдет. Наш <a href="https://iprazon.com/proxy/privatnye">закрытый пул адресов для команды</a> устроен так, что все машины группы ходят через один и тот же набор адресов, и разбор выгрузок идёт по единой картине.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakie-sroki-dostupa-est-u-paketov">Какие сроки доступа есть у пакетов?</h3>
<p>Доступны сутки, неделя, месяц и корпоративный месяц. Трафик безлимитный на всех вариантах, различие идёт по длительности доступа к пулу и по потолку одновременных потоков: до 1000 на стандартных пакетах и до 3000 на корпоративном.</p>
<h3 id="skladyvayutsya-li-potoki-esli-vzyat-dva-pake">Складываются ли потоки, если взять два пакета сразу?</h3>
<p>Пакеты по потокам не складываются, каждый работает со своим лимитом. Ограничений на число пакетов у одного аккаунта при этом нет, поэтому под независимые проекты удобно держать отдельные пакеты. Рост нагрузки в рамках одного прогона закрывается переходом на вариант со старшим лимитом.</p>
<h3 id="skolko-adresov-mozhno-privyazat-i-kak-eto-vl">Сколько адресов можно привязать и как это влияет на срок?</h3>
<p>В пакет входит одновременная привязка 2 адресов с бесплатной сменой прямо в настройках кабинета. На длительность доступа это не влияет, при этом общее число потоков при двух привязках делится между адресами пополам, и расчётное время прогона с одной машины растягивается.</p>
<h3 id="kak-ponyat-kakoy-srok-nuzhen-do-pokupki">Как понять, какой срок нужен, до покупки?</h3>
<p>Перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Из него забираются медиана отклика и рабочее число потоков, дальше объём страниц делится на скорость прогона, добавляется примерно треть времени на разбор ошибок, и полученные часы прямо указывают на подходящий срок.</p>
<p>Соседние вопросы покупки разобраны отдельно: <a href="/pokupka/kak-kupit/">порядок покупки прокси IPv4</a> от регистрации до первого запроса, <a href="/pokupka/chto-vhodit-v-paket/">состав пакета по потокам и привязкам</a>, <a href="/pokupka/format-vydachi/">форматы выдачи списка адресов</a> со способами получения. Как устроена привязка своего адреса и её смена, описано в материале про <a href="/podklyuchenie/privyazka-adresa/">привязку адреса в кабинете</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/srok-dostupa/">https://kupit-proxy-ipv4.ru/pokupka/srok-dostupa/</a></p>]]></content:encoded></item>
<item><title>Формат выдачи прокси: как приходит список адресов и что с ним делать</title><link>https://kupit-proxy-ipv4.ru/pokupka/format-vydachi/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/pokupka/format-vydachi/</guid><description>Список адресов приходит в одном из двух форматов на выбор: IP:PORT и IP:PORT:LOGIN:PASS. Забрать его можно двумя путями, ссылкой на выдачу или файлом, оба…</description><content:encoded><![CDATA[
<p class="vvod">Список адресов приходит в одном из двух форматов на выбор: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Забрать его можно двумя путями, ссылкой на выдачу или файлом, оба варианта лежат в кабинете рядом, и список обновляется в режиме реального времени.</p>
<p>Дальше разобрано, чем эти два формата отличаются на практике, почему ссылка удобнее файла при регулярной работе, как распарсить строку списка в bash и python, как превратить сырые строки в конфиг для curl, requests, A-Parser, ZennoPoster и антидетект-браузера, и как настроить автоматическую подтяжку списка перед каждым прогоном.</p>
<h2 id="dva-formata-stroki-chto-stoit-za-dvoetochiya">Два формата строки: что стоит за двоеточиями</h2>
<p>Формат <code>IP:PORT</code> содержит две величины: адрес выходного узла и порт, на котором посредник принимает соединение. Этого достаточно, когда доступ открыт по привязке рабочей машины: сервер сам сверяет адрес источника со списком привязок в пакете и пропускает запрос без пары логина и пароля.</p>
<pre><code># формат из двух полей, доступ по привязанному адресу
185.24.87.14:8000
185.24.87.15:8000
92.118.44.203:8000</code></pre>
<p>Формат <code>IP:PORT:LOGIN:PASS</code> добавляет к тем же двум полям учётные данные. Логин и пароль едут внутри самой строки, поэтому запрос авторизуется откуда угодно и привязка машины при этом не требуется. Формат берут те, у кого прогон идёт с нескольких серверов сразу, или те, кто гоняет задачи в облачном сборщике, где внешний адрес заранее неизвестен.</p>
<pre><code># формат из четырёх полей, доступ по учётным данным
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd
92.118.44.203:8000:user5521:pf39kd</code></pre>
<p>Порт в обоих случаях один и тот же. Меняется только длина строки и наличие пары в хвосте. Мы выдаём оба формата в одном кабинете, переключение занимает одно нажатие, и повторно покупать ничего не нужно: адреса под обоими вариантами одинаковые.</p>
<p>Выбор между ними мы сводим к одному вопросу: адрес рабочей машины постоянный или меняется. Постоянный сервер с фиксированным внешним адресом просит формат из двух полей, потому что учётные данные в строке ему ничего не добавляют. Ноутбук с домашним провайдером, контейнер в облаке и любая машина, которая получает внешний адрес динамически, работают спокойнее с четырьмя полями: строка везёт доступ с собой и от адреса источника не зависит.</p>
<div class="tabl"><table><thead><tr><th>Формат</th><th>Сколько полей</th><th>Когда берут</th><th>Что должно быть настроено</th></tr></thead><tbody><tr><td><code>IP:PORT</code></td><td>2</td><td>Прогон идёт с одной или двух постоянных машин</td><td>Адрес машины прописан в настройках привязки</td></tr><tr><td><code>IP:PORT:LOGIN:PASS</code></td><td>4</td><td>Прогон идёт с меняющихся или временных машин</td><td>Ничего, пара логина и пароля едет в строке</td></tr><tr><td><code>IP:PORT</code> для команды</td><td>2</td><td>Раздача списка внутри одного сервера</td><td>Привязка на адрес этого сервера</td></tr><tr><td><code>IP:PORT:LOGIN:PASS</code> для облака</td><td>4</td><td>Задачи в облачном сборщике или в контейнерах</td><td>Хранилище секретов на стороне запуска</td></tr></tbody></table></div>
<p>Про сам механизм проверки права на доступ есть отдельный разбор: <a href="/osnovy/avtorizaciya/">два способа доступа</a> описаны там по шагам, с примерами настроек и разбором отказов.</p>
<h2 id="ssylka-na-vydachu-i-fayl-chem-oni-otlichayut">Ссылка на выдачу и файл: чем они отличаются в работе</h2>
<p>В кабинете два варианта получения: скопировать ссылку или скачать файл. Ссылка отдаёт список текстом, по одной строке на адрес, без заголовков и без обёрток. Файл содержит ровно те же строки, разница сидит в способе доставки.</p>
<p>Файл удобен один раз. Человек скачал его, открыл, скопировал десяток строк в поле программы и пошёл работать. Такой путь закрывает разовую задачу: проверить сайт со стороны, прогнать сотню страниц, посмотреть, как целевой домен отвечает через посредника.</p>
<p>Ссылка выигрывает там, где прогоны повторяются. Программа обращается по адресу выдачи сама, забирает актуальные строки и подставляет их в очередь перед запуском. Ручной шаг исчезает совсем: администратор один раз вписал адрес в настройки планировщика, и дальше список приезжает свежим каждый запуск, без участия человека и без переноса файлов между машинами.</p>
<div class="tabl"><table><thead><tr><th>Способ</th><th>Что происходит</th><th>Где выигрывает</th><th>Где мешает</th></tr></thead><tbody><tr><td>Ссылка на выдачу</td><td>Программа тянет строки по HTTP перед запуском</td><td>Регулярные прогоны, планировщики, несколько машин</td><td>Софт без поддержки внешних источников</td></tr><tr><td>Файл со списком</td><td>Строки лежат на диске рабочей машины</td><td>Разовая проверка, ручной импорт, офлайн-стенд</td><td>Список стареет с момента скачивания</td></tr><tr><td>Ссылка плюс локальный кеш</td><td>Строки тянутся, сохраняются во временный файл</td><td>Прогоны на нескольких серверах с общей логикой</td><td>Требует небольшого скрипта на входе</td></tr></tbody></table></div>
<p>Мы советуем брать ссылку всем, у кого задача повторяется хотя бы раз в неделю. Причина простая: пул живой.</p>
<p>Есть и промежуточный вариант, который берут администраторы нескольких серверов. Ссылка тянется одним скриптом на управляющей машине, результат раскладывается по рабочим узлам штатным средством развёртывания, и на каждом узле лежит локальная копия одного и того же среза. Так мы получаем и свежесть ссылки, и предсказуемость файла: все узлы работают с одинаковым набором строк, что заметно упрощает сравнение логов между ними.</p>
<h2 id="pochemu-spisok-obnovlyaetsya-i-chto-proishod">Почему список обновляется и что происходит со старым файлом</h2>
<p>Пул держится в районе 12 000 активных адресов в сутки. Ротация внутри пула автоматическая, состав меняется постоянно, и список адресов обновляется в режиме реального времени. Ссылка на выдачу отдаёт срез на момент обращения, файл фиксирует срез на момент скачивания.</p>
<p>Отсюда следует практический вывод. Файл, сохранённый месяц назад, содержит строки, которых в пуле уже нет. Программа честно пытается открыть соединение, получает таймаут либо отказ на уровне сокета, повторяет попытку по своим настройкам и в итоге пишет в лог отказ. Прогон при этом идёт медленнее ожидаемого, доля успешных ответов падает, и администратор начинает искать причину в настройках целевого сайта, хотя причина лежит в устаревшем файле на диске.</p>
<p>Картина в логах узнаваемая. Часть строк отвечает нормально, часть отваливается по таймауту, соотношение не меняется от запуска к запуску. Ровно этот признак отличает старый список от проблем с целевым доменом: при проблемах на стороне сайта отказы распределяются по всем адресам примерно поровну.</p>
<pre><code># быстрый ответ на вопрос «список свежий или нет»
# берём первые 30 строк и смотрим, сколько из них отвечает
head -n 30 proxy.txt | while IFS=: read -r ip port user pass; do
  code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 8 \
    -x "http://${user:+$user:$pass@}$ip:$port" https://ifconfig.me)
  echo "$ip:$port -&gt; ${code:-timeout}"
done</code></pre>
<p>Если отвечает меньше двух третей строк, список перечитывается из кабинета до начала работы. Занимает это секунды, экономит час разбора.</p>
<h2 id="razbor-stroki-spiska-v-bash">Разбор строки списка в bash</h2>
<p>Строка списка разбирается по двоеточию. В bash для этого хватает встроенного <code>read</code> с заданным разделителем, внешние утилиты не нужны. Разделитель задаётся через <code>IFS</code>, поля читаются в переменные, пустые хвостовые поля остаются пустыми.</p>
<pre><code>#!/bin/bash
# proxy.txt содержит строки IP:PORT либо IP:PORT:LOGIN:PASS
while IFS=: read -r ip port user pass; do
  [ -z "$ip" ] &amp;&amp; continue
  if [ -n "$user" ]; then
    echo "http://$user:$pass@$ip:$port"
  else
    echo "http://$ip:$port"
  fi
done &lt; proxy.txt &gt; proxy-urls.txt</code></pre>
<p>Скрипт на выходе даёт готовые URL посредника, которые принимает почти любая программа. Тот же цикл переписывается под SOCKS5 заменой схемы в двух местах. Если нужны обе схемы сразу, добавляется второй <code>echo</code> со схемой <code>socks5h://</code>, и один список превращается в два файла под разные задачи.</p>
<pre><code># счётчик полей: понять, какой формат пришёл, до всякого разбора
awk -F: '{print NF}' proxy.txt | sort -u
# 2  -&gt; IP:PORT
# 4  -&gt; IP:PORT:LOGIN:PASS</code></pre>
<p>Одна деталь экономит время. Файл из кабинета иногда приезжает с окончаниями строк в стиле Windows, и тогда последнее поле получает невидимый символ возврата каретки, из-за которого пароль перестаёт совпадать. Проверяется это одной командой, поправляется тоже одной.</p>
<pre><code># увидеть невидимое
cat -A proxy.txt | head -n 3
# убрать возврат каретки, если он есть
tr -d '\r' &lt; proxy.txt &gt; proxy-fixed.txt</code></pre>
<h2 id="razbor-stroki-spiska-v-python">Разбор строки списка в python</h2>
<p>В python разбор строится на <code>split(':')</code> с проверкой числа полей. Функция ниже принимает строку любого из двух форматов и возвращает словарь с готовыми URL под HTTP и SOCKS5, а также отдельные поля для программ, которые ждут логин и пароль в разных полях интерфейса.</p>
<pre><code>import re

LINE = re.compile(r'^\s*(\d{1,3}(?:\.\d{1,3}){3}):(\d{1,5})(?::([^:\s]+):([^:\s]+))?\s*$')

def parse(line):
    m = LINE.match(line)
    if not m:
        return None
    ip, port, user, password = m.groups()
    auth = f'{user}:{password}@' if user else ''
    return {
        'host': ip,
        'port': int(port),
        'user': user,
        'password': password,
        'http': f'http://{auth}{ip}:{port}',
        'socks5': f'socks5h://{auth}{ip}:{port}',
    }

def load(path):
    out = []
    with open(path, encoding='utf-8') as f:
        for raw in f:
            item = parse(raw)
            if item:
                out.append(item)
    return out

pool = load('proxy.txt')
print(len(pool), 'строк принято')</code></pre>
<p>Регулярное выражение отсекает мусор: комментарии, пустые строки, случайно скопированный заголовок таблицы. Это важнее, чем кажется. Программа, которой скормили строку с лишним пробелом, обычно падает на первом же соединении и пишет в лог сообщение об ошибке разбора адреса, по которому непонятно, какая именно строка виновата.</p>
<p>Готовый список сразу подставляется в <code>requests</code>. Библиотека ждёт словарь со схемами, поэтому конвертация занимает одну строку.</p>
<pre><code>import requests, random

p = random.choice(pool)
proxies = {'http': p['http'], 'https': p['http']}
r = requests.get('https://ifconfig.me', proxies=proxies, timeout=10)
print(r.status_code, r.text.strip())</code></pre>
<p>Обратите внимание на ключ <code>https</code> в словаре: там стоит схема <code>http</code>. Так и должно быть. Ключ обозначает протокол целевого адреса, значение обозначает адрес посредника, и для HTTPS-запросов через HTTP-посредник поднимается туннель, тип которого от схемы в словаре не зависит. Пакет с HTTP и HTTPS оформляется на странице, где мы <a href="https://iprazon.com/products/kupit-proxy-http">даём доступ к пулу по HTTP и HTTPS</a>.</p>
<h2 id="kak-prevratit-spisok-v-format-konkretnyh-pro">Как превратить список в формат конкретных программ</h2>
<p>Разные программы ждут разного. Одни принимают строку целиком, другие требуют четыре отдельных поля, третьи читают файл своего формата. Ниже сведено, что именно ждёт каждый распространённый потребитель списка. Сам пул при этом один, и обе схемы обращения к нему открыты сразу после включения пакета, где мы <a href="https://iprazon.com/products/kupit-proxy-http">держим адреса под HTTP и HTTPS</a>.</p>
<div class="tabl"><table><thead><tr><th>Программа</th><th>Что подаётся</th><th>Форма записи</th></tr></thead><tbody><tr><td>curl</td><td>Один посредник на запрос</td><td><code>-x http://user:pass@ip:port</code></td></tr><tr><td>requests</td><td>Словарь схем</td><td><code>{'http': 'http://user:pass@ip:port'}</code></td></tr><tr><td>A-Parser</td><td>Файл списка либо адрес выдачи</td><td><code>http://user:pass@ip:port</code> построчно</td></tr><tr><td>ZennoPoster</td><td>Поля в кубике настройки или строка из файла</td><td><code>ip:port:login:pass</code> построчно</td></tr><tr><td>Антидетект-браузер</td><td>Четыре поля в карточке профиля</td><td>Хост, порт, логин, пароль по отдельности</td></tr><tr><td>Системный клиент на сервере</td><td>Переменные окружения</td><td><code>export http_proxy=http://user:pass@ip:port</code></td></tr></tbody></table></div>
<p>curl принимает строку целиком, включая учётные данные. Проверка одного адреса выглядит так:</p>
<pre><code># HTTP-посредник, доступ по привязке машины
curl -x http://185.24.87.14:8000 https://ifconfig.me
# HTTP-посредник, доступ по учётным данным
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me
# SOCKS5 с разрешением имён на стороне выхода
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>A-Parser читает список из файла либо тянет его по адресу выдачи, причём второй путь настраивается прямо в настройках парсера и обновляется по расписанию. Формат строки там сетевой, со схемой впереди, поэтому файл <code>proxy-urls.txt</code> из bash-скрипта выше подходит без правок. Подробности настройки собраны на странице про <a href="https://iprazon.com/instrumenty/a-parser">работу A-Parser через пул адресов</a>.</p>
<p>ZennoPoster держит список в своём менеджере и ждёт строки в исходном виде, через двоеточие. Здесь удобнее отдать программе файл из кабинета как есть, без конвертации. Порядок подключения разобран там, где описана <a href="https://iprazon.com/instrumenty/zennoposter">связка ZennoPoster с пулом IPv4</a>.</p>
<p>Антидетект-браузер разносит поля по карточке профиля: тип посредника, хост, порт, логин, пароль. Копирование строки целиком в поле хоста приводит к отказу соединения, поэтому строку разбивают заранее. Скрипт на python выше отдаёт готовые поля <code>host</code>, <code>port</code>, <code>user</code>, <code>password</code>, которые остаётся разложить по колонкам таблицы импорта. Особенности профилей описаны на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<p>Системные утилиты на сервере читают посредника из переменных окружения. Строку туда кладут в том же виде, со схемой и учётными данными, и после этого через пул начинают ходить <code>wget</code>, <code>apt</code>, менеджеры пакетов языков программирования и всё остальное, что уважает эти переменные. Отдельно прописывается <code>no_proxy</code>, чтобы обращения внутрь своей сети шли напрямую и не занимали потоки пакета.</p>
<pre><code>export http_proxy="http://user5521:pf39kd@185.24.87.14:8000"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1,10.0.0.0/8"</code></pre>
<p>Для сокетного варианта строка меняется одной схемой. Программы, которые ходят по произвольным портам, работают с SOCKS5 ровнее, и адреса при этом остаются те же самые: пакет с сокетным доступом оформляется там, где мы <a href="https://iprazon.com/products/kupit-proxy-socks5">выдаём SOCKS5 для программ и скриптов</a>.</p>
<h2 id="avtomaticheskaya-podtyazhka-spiska-pered-pro">Автоматическая подтяжка списка перед прогоном</h2>
<p>Ручной шаг убирается одним скриптом на входе. Задача скрипта простая: сходить по адресу выдачи, забрать актуальные строки, проверить, что ответ похож на список, и положить результат туда, откуда его читает рабочая программа. Старый файл при этом сохраняется до успешной записи нового, чтобы сбой сети не оставил прогон вовсе без адресов.</p>
<pre><code>#!/bin/bash
# refresh-proxy.sh, запускается из планировщика перед каждым прогоном
URL="$PROXY_LIST_URL"          # адрес выдачи берём из окружения
DST="/opt/run/proxy.txt"
TMP="$(mktemp)"

curl -fsS --max-time 20 "$URL" | tr -d '\r' | grep -E '^[0-9.]+:[0-9]+' &gt; "$TMP"

lines=$(wc -l &lt; "$TMP")
if [ "$lines" -lt 50 ]; then
  echo "выдача вернула $lines строк, оставляем прежний файл" &gt;&amp;2
  rm -f "$TMP"; exit 1
fi

mv "$TMP" "$DST"
chmod 600 "$DST"
echo "список обновлён: $lines строк"</code></pre>
<p>Три вещи в этом скрипте держат прогон на ногах. Флаг <code>-fsS</code> заставляет curl вернуть ненулевой код при ответе сервера с ошибкой, вместо того чтобы записать текст ошибки в файл списка. Фильтр <code>grep</code> отсекает всё, что не похоже на строку адреса. Порог в 50 строк отбивает случай, когда выдача ответила коротким телом из-за сетевого сбоя.</p>
<p>В python то же самое укладывается в полтора десятка строк, если прогон запускается изнутри питоновского скрипта.</p>
<pre><code>import os, requests

def refresh(dst='proxy.txt', minimum=50):
    r = requests.get(os.environ['PROXY_LIST_URL'], timeout=20)
    r.raise_for_status()
    lines = [l.strip() for l in r.text.splitlines() if parse(l)]
    if len(lines) &lt; minimum:
        raise RuntimeError(f'выдача вернула {len(lines)} строк')
    tmp = dst + '.new'
    with open(tmp, 'w', encoding='utf-8') as f:
        f.write('\n'.join(lines) + '\n')
    os.replace(tmp, dst)
    os.chmod(dst, 0o600)
    return len(lines)</code></pre>
<p>Запись через временный файл с последующим <code>os.replace</code> гарантирует, что параллельно работающий прогон никогда не увидит наполовину записанный список. На нагруженных стендах это спасает от плавающих отказов, которые потом ищут неделями.</p>
<p>Расписание обновления мы привязываем к запуску прогона, не к календарю. Скрипт вызывается первой строкой рабочей задачи, отрабатывает за секунду и отдаёт управление дальше. Отдельная запись в планировщике раз в час тоже работает, хотя смысла в ней меньше: между обновлением и стартом прогона всё равно остаётся окно, за которое состав пула успевает поменяться. Логи обновления держим рядом с логами прогона, тогда по любому спорному запуску видно, каким срезом списка он работал.</p>
<h2 id="gde-derzhat-spisok-i-kak-ego-ne-ostavit-v-ot">Где держать список и как его не оставить в открытом виде</h2>
<p>Строка формата <code>IP:PORT:LOGIN:PASS</code> содержит рабочие учётные данные пакета. Файл со списком на общей машине читает любой, у кого есть учётная запись на этой машине: коллега, подрядчик, скрипт сборки, резервное копирование, которое утащит его в архив вместе со всем каталогом. Дальше учётными данными пользуются со стороны, потоки пакета уходят на чужие задачи, а лимит при этом делится на всех.</p>
<p>Порядок хранения короткий и понятный. Права на файл выставляются в <code>600</code>, владелец служебный, каталог лежит вне репозитория и вне общего сетевого диска.</p>
<pre><code># файл читает только владелец процесса
chmod 600 /opt/run/proxy.txt
chown runner:runner /opt/run/proxy.txt
# каталог закрыт целиком
chmod 700 /opt/run</code></pre>
<p>Адрес выдачи и учётные данные держим в переменных окружения либо в хранилище секретов, которое даёт CI. В репозиторий не попадает ни строка списка, ни адрес выдачи: имя файла добавляется в <code>.gitignore</code> до первого коммита, потому что вычищать историю потом дороже.</p>
<div class="tabl"><table><thead><tr><th>Что храним</th><th>Где держим</th><th>Права</th><th>Чего избегаем</th></tr></thead><tbody><tr><td>Файл со списком</td><td>Служебный каталог на рабочей машине</td><td><code>600</code>, владелец служебный</td><td>Общий сетевой диск, домашний каталог пользователя</td></tr><tr><td>Адрес выдачи</td><td>Переменная окружения или хранилище секретов</td><td>Доступ у процесса прогона</td><td>Жёсткая запись внутри скрипта</td></tr><tr><td>Учётные данные пакета</td><td>Хранилище секретов CI</td><td>Доступ у задачи сборки</td><td>Переписка в мессенджере, таблица с общим доступом</td></tr><tr><td>Временный файл при обновлении</td><td>Тот же каталог, <code>mktemp</code></td><td><code>600</code></td><td>Общий каталог временных файлов</td></tr></tbody></table></div>
<p>Формат <code>IP:PORT</code> в этом смысле спокойнее: без учётных данных внутри строки список сам по себе доступа не открывает, потому что сервер сверяет адрес источника с привязкой в пакете. Мы даём в пакете одновременную привязку 2 адресов, менять её разрешено без ограничений прямо в настройках, так что перевести прогон на привязку и убрать пару из строк списка обычно получается за пару минут.</p>
<h2 id="chto-delat-kogda-chast-strok-iz-spiska-ne-ot">Что делать, когда часть строк из списка не отвечает</h2>
<p>Сначала проверяем масштаб. Прогон по первым тридцати строкам показывает долю рабочих: если отвечает подавляющее большинство, дело в отдельных узлах и прогон продолжается штатно. Если отвечает меньше половины, причина общая, и её ищем по порядку.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Вероятная причина</th><th>Что делаем</th></tr></thead><tbody><tr><td>Отвечает часть строк, доля стабильна</td><td>Список устарел, файл давно на диске</td><td>Перечитываем выдачу по ссылке</td></tr><tr><td>Ни одна строка не отвечает, код 407</td><td>Формат доступа не совпал с настройкой</td><td>Сверяем привязку и наличие пары в строке</td></tr><tr><td>Ни одна строка не отвечает, отказ сокета</td><td>Пакет ещё включается или доступ закрыт</td><td>Ждём включения, пакет поднимается примерно за 5 минут</td></tr><tr><td>Отказы растут при росте потоков</td><td>Упёрлись в лимит пакета</td><td>Считаем потоки с учётом деления при двух привязках</td></tr><tr><td>Пароль не принимается</td><td>Возврат каретки в конце строки</td><td>Прогоняем файл через <code>tr -d '\r'</code></td></tr><tr><td>Программа ругается на формат хоста</td><td>Строка целиком попала в поле хоста</td><td>Разбиваем строку на поля скриптом</td></tr></tbody></table></div>
<p>Код 407 говорит о доступе. Он приходит, когда сервер ждёт учётные данные, а запрос пришёл без них, либо когда прогон идёт с машины, чей адрес в привязке не значится. Проверяется это одной командой с ключом <code>-v</code>, где видно и заголовок ответа, и адрес источника.</p>
<pre><code>curl -v -x http://185.24.87.14:8000 https://ifconfig.me 2&gt;&amp;1 | grep -i 'HTTP/1.1 407'</code></pre>
<p>Отдельно смотрим на потоки. Стандартные пакеты дают до 1000 одновременных соединений, корпоративный до 3000, пакеты по потокам не складываются, и при двух привязанных адресах общий лимит делится между ними пополам. Программа, настроенная на 800 потоков при двух привязках, упирается в потолок 500 и начинает получать отказы, которые в логах выглядят как проблемы со списком. Порядок проверки работоспособности целиком разобран в материале про <a href="/proverka/kak-proverit/">проверку прокси после подключения</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два на выбор: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Первый берут при доступе по привязке рабочего адреса, второй при доступе по учётным данным. Порт в обоих одинаковый, переключение формата делается в кабинете и повторной оплаты не требует.</p>
<h3 id="v-kakom-vide-vydaetsya-spisok-faylom">В каком виде выдаётся список, файлом?</h3>
<p>В кабинете два варианта: получить ссылку на выдачу или скачать файл. Ссылку удобно отдавать программе, которая тянет список сама перед каждым запуском. Файл удобнее для ручного импорта и раздачи внутри одного сервера.</p>
<h3 id="kak-chasto-obnovlyaetsya-spisok-adresov">Как часто обновляется список адресов?</h3>
<p>Список адресов обновляется в режиме реального времени. Онлайн пула держится в районе 12 000 адресов в сутки, ротация внутри пула автоматическая, поэтому срез, забранный неделю назад, к моменту прогона уже отличается от актуального.</p>
<h3 id="proksi-kakih-stran-prihodyat-v-spiske">Прокси каких стран приходят в списке?</h3>
<p>Пул устроен как микс со всего мира, адреса приходят из множества стран, отбор по отдельной стране не делается. Для сбора открытых данных, съёма позиций и работы с несколькими кабинетами такая схема даёт разнообразие подсетей без ручной настройки со стороны пользователя.</p>
<p>Соседние материалы раздела продолжают тему покупки: <a href="/pokupka/kakie-proxy-pokupat/">какие прокси покупать под задачу</a> с разбором по протоколам и потокам, <a href="/pokupka/kak-kupit/">как купить прокси IPv4</a> от регистрации до первого запроса, <a href="/pokupka/chto-vhodit-v-paket/">что входит в пакет</a> по адресам, трафику и привязкам. Когда список уже на руках, следующий шаг описан в разборе про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/pokupka/format-vydachi/">https://kupit-proxy-ipv4.ru/pokupka/format-vydachi/</a></p>]]></content:encoded></item>
<item><title>HTTP, HTTPS, SOCKS4 и SOCKS5: чем отличаются протоколы прокси</title><link>https://kupit-proxy-ipv4.ru/protokoly/http-https-socks/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/http-https-socks/</guid><description>Разница сидит в том, на каком уровне посредник вмешивается в обмен. HTTP и HTTPS работают на прикладном уровне и разбирают сам запрос вместе с заголовками,…</description><content:encoded><![CDATA[
<p class="vvod">Разница сидит в том, на каком уровне посредник вмешивается в обмен. HTTP и HTTPS работают на прикладном уровне и разбирают сам запрос вместе с заголовками, SOCKS4 и SOCKS5 работают на уровне соединения и передают байты дальше, не заглядывая внутрь.</p>
<p>Отсюда вытекает всё остальное: какие программы примут какой вариант, как выглядит строка подключения, где резолвится доменное имя и что посредник вообще способен увидеть по дороге. Ниже разобраны четыре протокола по порядку, показаны схемы строк <code>http://</code>, <code>https://</code>, <code>socks4://</code>, <code>socks5://</code> и <code>socks5h://</code>, приведены рабочие команды curl и сведена сравнительная таблица по всем признакам сразу.</p>
<h2 id="urovni-gde-imenno-stoit-posrednik">Уровни: где именно стоит посредник</h2>
<p>Сетевой обмен удобно разложить на слои. Внизу лежит TCP: он отвечает за то, чтобы поток байтов дошёл от одной точки до другой в правильном порядке. Наверху лежит прикладной протокол, который придаёт этим байтам смысл: HTTP описывает метод, путь, заголовки и тело.</p>
<p>Посредник встраивается либо в верхний слой, либо в нижний. HTTP-прокси встраивается в верхний: он принимает от программы полноценный HTTP-запрос, читает его, при необходимости меняет и отправляет на целевой сервер от своего адреса. SOCKS-прокси встраивается в нижний: он принимает короткую служебную преамбулу с адресом назначения, открывает TCP-соединение туда и дальше просто перекладывает байты в обе стороны.</p>
<div class="tabl"><table><thead><tr><th>Протокол</th><th>Уровень работы</th><th>Что посредник разбирает</th><th>Что видит внутри</th></tr></thead><tbody><tr><td>HTTP</td><td>Прикладной</td><td>Метод, путь, заголовки, тело</td><td>Весь запрос целиком</td></tr><tr><td>HTTPS через туннель</td><td>Транспортный после установки</td><td>Только адрес и порт назначения</td><td>Зашифрованный поток</td></tr><tr><td>SOCKS4</td><td>Уровень соединения</td><td>Адрес и порт в бинарной преамбуле</td><td>Поток байтов без разбора</td></tr><tr><td>SOCKS5</td><td>Уровень соединения</td><td>Адрес, порт, метод доступа</td><td>Поток байтов без разбора</td></tr></tbody></table></div>
<p>Разница уровня объясняет странность, которая сбивает новичков. Один и тот же адрес и порт из списка работает и как HTTP-посредник, и как SOCKS5: сервер понимает, чего от него хотят, по первым байтам соединения. Мы выдаём в пакете сразу IPv4 с HTTP и HTTPS плюс SOCKS4 и SOCKS5, поэтому переключение протокола в программе не требует ни новых адресов, ни доплаты.</p>
<h2 id="http-proksi-posrednik-chitaet-zapros">HTTP-прокси: посредник читает запрос</h2>
<p>При работе по HTTP программа отправляет посреднику запрос с абсолютным адресом в стартовой строке. Выглядит это так:</p>
<pre><code>GET http://example.com/catalog/page-2 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk
Accept-Encoding: gzip, deflate</code></pre>
<p>Посредник видит здесь всё: метод, полный путь, строку агента, кодировки, cookie, тело POST-запроса. Он способен добавить свои заголовки, снять свои служебные поля перед отправкой и вернуть ответ обратно программе. Именно поэтому у HTTP-варианта есть собственный код отказа: <code>407 Proxy Authentication Required</code> приходит от посредника, целевой сервер о запросе при этом даже не узнаёт.</p>
<p>Такая осведомлённость даёт удобства. HTTP-прокси умеет кешировать ответы, писать журнал по адресам, работать с заголовком <code>Proxy-Authorization</code> отдельно от авторизации на целевом сайте. Браузеры и парсеры выросли вокруг этого протокола, поэтому поддержка у него самая широкая: поле «HTTP-прокси» есть буквально везде.</p>
<pre><code># обычный запрос через HTTP-посредник
curl -x http://185.24.87.14:8000 http://example.com/robots.txt

# то же самое с учётными данными пакета
curl -x http://user5521:pf39kd@185.24.87.14:8000 http://example.com/robots.txt

# посмотреть служебный обмен целиком
curl -v -x http://185.24.87.14:8000 http://example.com/ 2&gt;&amp;1 | head -n 25</code></pre>
<p>Обратите внимание на схему в ключе <code>-x</code>. Она описывает протокол обращения к посреднику, целевой адрес при этом остаётся обычным. Пакет с широкой поддержкой прикладного варианта оформляется там, где мы <a href="https://iprazon.com/products/kupit-proxy-http">даём доступ по HTTP для браузеров и парсеров</a>.</p>
<h2 id="https-cherez-proksi-tunnel-poverh-togo-zhe-p">HTTPS через прокси: туннель поверх того же порта</h2>
<p>Зашифрованный трафик посредник разобрать не может по определению: ключи сессии знают только браузер и целевой сервер. Поэтому для HTTPS схема меняется. Программа сначала просит посредника открыть сквозной канал методом <code>CONNECT</code>, получает подтверждение и дальше гонит по этому каналу байты TLS, которые посредник переносит вслепую.</p>
<pre><code>CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk

HTTP/1.1 200 Connection established</code></pre>
<p>После строки <code>200 Connection established</code> посредник теряет доступ к содержимому. Он знает имя хоста и порт из преамбулы, знает объём переданных байтов и длительность сессии. Пути, заголовки, cookie и тело ответа остаются внутри шифрования. Механика самого туннеля разобрана отдельно в материале про <a href="/protokoly/tunnel-connect/">туннель CONNECT и работу с шифрованием</a>, здесь достаточно самого факта.</p>
<p>Практический вывод для настройки: отдельного «HTTPS-порта» у посредника обычно нет. Тот же адрес и тот же порт принимают и обычные запросы, и запросы на открытие туннеля, сервер различает их по методу. Именно поэтому в конфигах библиотек ключ <code>https</code> часто указывает на строку со схемой <code>http</code>, и это правильная запись.</p>
<pre><code># HTTPS-адрес через тот же HTTP-посредник, туннель поднимается сам
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# увидеть строку установки туннеля
curl -v -x http://185.24.87.14:8000 https://example.com/ 2&gt;&amp;1 | grep -i 'CONNECT\|established'</code></pre>
<p>Схема <code>https://</code> в самом ключе <code>-x</code> означает другое: шифрование самого канала до посредника. Такой режим поддерживают немногие программы, и в списке адресов он отражается настройкой на стороне сервера, схема строки при этом остаётся прежней. Состав пакета с шифрованным вариантом описан на странице, где собран <a href="https://iprazon.com/products/kupit-proxy-https">доступ по HTTPS с туннелем до целевого узла</a>.</p>
<h2 id="socks-posrednik-na-urovne-soedineniya">SOCKS: посредник на уровне соединения</h2>
<p>SOCKS работает иначе с первой же секунды. Программа открывает TCP-соединение с посредником и отправляет короткую бинарную преамбулу: версия протокола, тип запроса, адрес назначения, порт. Сервер открывает соединение туда, отвечает кодом успеха и после этого перестаёт участвовать в разговоре осмысленно. Дальше идёт поток байтов в обе стороны.</p>
<p>Из этого следуют три свойства, ради которых SOCKS и берут.</p>
<p>Первое: протокол внутри не имеет значения. По SOCKS ходят HTTP, SMTP, IMAP, POP3, FTP, обмен внутри игровых клиентов, произвольные бинарные протоколы собственной разработки. Посреднику всё равно, он переносит байты.</p>
<p>Второе: порт назначения любой. HTTP-посредник обычно ограничен разумным набором портов, сокетный вариант открывает соединение на 25, 587, 993, 5222 или 27015 без особых настроек.</p>
<p>Третье: заголовков он не добавляет никаких, потому что заголовков в его картине мира просто нет. Всё, что уходит на целевой сервер, приходит от программы и остаётся в том виде, в каком она это отправила.</p>
<pre><code># SOCKS5 с учётными данными
curl -x socks5://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# SOCKS4, учётных данных в протоколе нет
curl -x socks4://185.24.87.14:8000 http://example.com/

# проверка произвольного порта, который HTTP-вариант обычно не пропускает
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 -v smtp://smtp.example.com:587</code></pre>
<p>Сокетный доступ к пулу открыт в том же пакете: адреса те же самые, меняется только схема в строке. Подробный состав собран там, где мы <a href="https://iprazon.com/products/kupit-proxy-socks5">выдаём SOCKS5 для программ и почтовых клиентов</a>.</p>
<h2 id="socks4-i-socks5-tri-realnyh-otlichiya">SOCKS4 и SOCKS5: три реальных отличия</h2>
<p>Версии различаются тремя вещами, и все три ощущаются в работе.</p>
<h3 id="dostup-po-loginu-i-parolyu">Доступ по логину и паролю</h3>
<p>SOCKS4 умеет передавать только идентификатор пользователя, поле в преамбуле короткое и проверку пароля не подразумевает. SOCKS5 описывает отдельный этап согласования метода: клиент перечисляет, что умеет, сервер выбирает, и при выборе метода с учётными данными идёт обмен парой логина и пароля. Поэтому строка <code>socks5://user:pass@host:port</code> работает, а <code>socks4://user:pass@host:port</code> пару молча теряет.</p>
<h3 id="domennye-imena">Доменные имена</h3>
<p>SOCKS4 принимает в преамбуле адрес в виде четырёх байтов, то есть готовый IPv4. Программа обязана разрешить имя сама. SOCKS5 добавил тип адреса «доменное имя», и клиент отправляет строку <code>example.com</code> целиком, а разрешением занимается сервер на выходе. Это меняет картину запросов к службе имён и закрывает целый класс расхождений между тем, что видит программа, и тем, куда она реально попадает.</p>
<h3 id="udp">UDP</h3>
<p>SOCKS4 переносит только TCP. SOCKS5 описывает отдельную команду <code>UDP ASSOCIATE</code>, через которую можно переносить датаграммы. Что именно из этого работает на практике и какие программы умеют пользоваться этим механизмом, разобрано отдельно в материале про <a href="/protokoly/tcp-i-udp/">TCP и UDP через SOCKS5</a>.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>SOCKS4</th><th>SOCKS5</th></tr></thead><tbody><tr><td>Согласование метода доступа</td><td>Отсутствует</td><td>Есть, включая пару логина и пароля</td></tr><tr><td>Идентификатор пользователя</td><td>Одно поле без проверки</td><td>Полноценный обмен учётными данными</td></tr><tr><td>Адрес назначения</td><td>Только четыре байта IPv4</td><td>IPv4, доменное имя, IPv6-адрес</td></tr><tr><td>Разрешение имени</td><td>На стороне программы</td><td>Возможно на стороне сервера</td></tr><tr><td>Транспорт</td><td>TCP</td><td>TCP плюс механизм для UDP</td></tr><tr><td>Схема в строке</td><td><code>socks4://</code></td><td><code>socks5://</code> и <code>socks5h://</code></td></tr></tbody></table></div>
<p>Мы держим в пакете обе версии и рекомендуем брать SOCKS5: он умеет всё то же самое плюс доступ по паре логина и пароля и разрешение доменных имён на выходе. Держать SOCKS4 в настройках стоит там, где программа старая и пятую версию попросту не знает: такой софт встречается среди самописных утилит и старых сборок парсеров.</p>
<p>Проверить, какая версия реально согласовалась, проще всего подробным выводом curl. При SOCKS5 в логе видна строка о выборе метода доступа, при SOCKS4 сразу идёт запрос соединения. Мы смотрим на эту строку каждый раз, когда пара логина и пароля вроде бы указана верно, а сервер отвечает отказом: половина таких случаев объясняется схемой <code>socks4://</code>, оставшейся в конфиге с прошлого прогона. Обе версии открыты в пакете, где мы <a href="https://iprazon.com/products/kupit-proxy-socks5">держим сокетный доступ к пулу IPv4</a>.</p>
<h2 id="shemy-strok-podklyucheniya-i-raznica-mezhdu-">Схемы строк подключения и разница между socks5 и socks5h</h2>
<p>Схема в начале строки задаёт способ разговора с посредником. Пять вариантов покрывают всё, что встречается в настройках программ.</p>
<div class="tabl"><table><thead><tr><th>Схема</th><th>Что означает</th><th>Где вводится</th></tr></thead><tbody><tr><td><code>http://</code></td><td>Обращение к посреднику по HTTP, туннель для HTTPS поднимается методом CONNECT</td><td>curl, requests, браузеры, парсеры</td></tr><tr><td><code>https://</code></td><td>Канал до самого посредника зашифрован</td><td>Отдельные библиотеки и системные клиенты</td></tr><tr><td><code>socks4://</code></td><td>Сокетный обмен старой версии, имя разрешает программа</td><td>Старый софт, простые скрипты</td></tr><tr><td><code>socks5://</code></td><td>Сокетный обмен с доступом по паре логина и пароля</td><td>Почтовые клиенты, антидетект-браузеры, парсеры</td></tr><tr><td><code>socks5h://</code></td><td>То же самое, имя разрешается на стороне посредника</td><td>curl, python-скрипты, всё, где важна картина запросов к DNS</td></tr></tbody></table></div>
<p>Буква <code>h</code> в конце <code>socks5h</code> расшифровывается как hostname и означает ровно одно: доменное имя уезжает на сервер строкой и разрешается там. При схеме <code>socks5://</code> библиотека сначала спрашивает у своей службы имён, какой адрес стоит за <code>example.com</code>, и только потом просит посредника соединиться с полученным адресом.</p>
<p>Разница видна в двух местах. Во-первых, запрос к службе имён уходит с рабочей машины, поэтому картина обращений на стороне провайдера отличается от картины соединений через пул. Во-вторых, целевой домен может отдавать разные адреса в зависимости от того, откуда пришёл вопрос: имя разрешается рядом с машиной, соединение открывается из пула, и программа попадает не на тот узел, который отвечает посреднику.</p>
<pre><code># имя разрешает локальная машина
curl -x socks5://user5521:pf39kd@185.24.87.14:8000 https://example.com/

# имя разрешает сервер на выходе
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://example.com/

# короткая проверка: совпадает ли адрес на выходе с ожидаемым
curl -s -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>В python отличие выражается той же буквой внутри словаря схем.</p>
<pre><code>proxies_local = {'https': 'socks5://user5521:pf39kd@185.24.87.14:8000'}
proxies_remote = {'https': 'socks5h://user5521:pf39kd@185.24.87.14:8000'}</code></pre>
<p>Мы советуем ставить <code>socks5h</code> везде, где программа это принимает. Стоит это ничего, поведение становится предсказуемее, и вопрос «почему адрес показывается верно, а сайт ведёт себя странно» снимается сам собой.</p>
<h2 id="polnaya-sravnitelnaya-tablica-po-chetyrem-pr">Полная сравнительная таблица по четырём протоколам</h2>
<p>Ниже сведены все признаки, по которым протоколы расходятся в реальной настройке.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>HTTP</th><th>HTTPS (туннель)</th><th>SOCKS4</th><th>SOCKS5</th></tr></thead><tbody><tr><td>Уровень работы</td><td>Прикладной</td><td>Прикладной до установки, дальше транспортный</td><td>Уровень соединения</td><td>Уровень соединения</td></tr><tr><td>Видит заголовки запроса</td><td>Да</td><td>Только преамбулу CONNECT</td><td>Нет</td><td>Нет</td></tr><tr><td>Может менять заголовки</td><td>Да</td><td>Нет</td><td>Нет</td><td>Нет</td></tr><tr><td>Свой код отказа</td><td><code>407</code></td><td><code>407</code> при отказе на CONNECT</td><td>Байт кода в ответе</td><td>Байт кода в ответе</td></tr><tr><td>Доступ по паре логина и пароля</td><td>Есть, заголовком</td><td>Есть, заголовком</td><td>Отсутствует</td><td>Есть, отдельным этапом</td></tr><tr><td>Доступ по привязке адреса</td><td>Есть</td><td>Есть</td><td>Есть</td><td>Есть</td></tr><tr><td>Разрешение доменных имён</td><td>На стороне посредника</td><td>На стороне посредника</td><td>На стороне программы</td><td>На выбор, <code>socks5h</code> отдаёт серверу</td></tr><tr><td>Произвольные порты назначения</td><td>Ограниченно</td><td>Ограниченно</td><td>Свободно</td><td>Свободно</td></tr><tr><td>Почтовые протоколы SMTP, IMAP, POP3</td><td>Обычно нет</td><td>Обычно нет</td><td>Проходят</td><td>Проходят</td></tr><tr><td>Поддержка UDP</td><td>Нет</td><td>Нет</td><td>Нет</td><td>Есть механизм</td></tr><tr><td>Кеширование ответов</td><td>Возможно</td><td>Невозможно</td><td>Невозможно</td><td>Невозможно</td></tr><tr><td>Схема в строке</td><td><code>http://</code></td><td><code>https://</code></td><td><code>socks4://</code></td><td><code>socks5://</code>, <code>socks5h://</code></td></tr><tr><td>Типичное применение</td><td>Браузеры, парсеры, сбор страниц</td><td>Обращение к сайтам с шифрованием</td><td>Старые программы</td><td>Почта, антидетект, произвольный софт</td></tr></tbody></table></div>
<p>Одна строка таблицы заслуживает пояснения. Кеширование доступно только прикладному варианту, потому что кешировать можно то, что посредник понимает. Для сбора данных это иногда экономит обращения к целевому серверу, для работы с кабинетами такой режим обычно отключают.</p>
<p>Строку про коды отказа тоже стоит прочитать внимательно. У прикладного варианта отказ приходит текстом со статусом <code>407</code> и заголовком <code>Proxy-Authenticate</code>, его видно в любом логе и в любой панели разработчика. У сокетного варианта ответ бинарный, один байт кода, и программы переводят его в собственные сообщения вида «connection refused by proxy» либо «general SOCKS server failure». Из-за этого одна и та же причина отказа выглядит по-разному в зависимости от схемы, и мы всегда просим уточнять протокол, когда разбираем обращение по конкретному прогону.</p>
<p>Ещё один практический момент касается заголовков. Прикладной посредник способен добавить служебные поля вроде <code>Via</code> или <code>X-Forwarded-For</code>, сокетный такой возможности лишён по устройству протокола. Что именно уходит на целевой сервер в каждом режиме, проверяется одним обращением к сервису, который печатает полученные заголовки обратно.</p>
<h2 id="chto-vybirat-pod-brauzer-parser-pochtu-i-pro">Что выбирать под браузер, парсер, почту и произвольную программу</h2>
<p>Выбор сводится к тому, что принимает софт и какой порт ему нужен.</p>
<p><strong>Браузер.</strong> Настройки браузера принимают оба варианта. HTTP покрывает обычный сёрфинг и любые обращения к сайтам, включая HTTPS через туннель. SOCKS5 берут, когда важно, чтобы имена разрешались на выходе: в Chromium это включается ключом запуска, в Firefox галочкой в окне настроек.</p>
<pre><code># Chromium через SOCKS5 с разрешением имён на выходе
chromium --proxy-server="socks5://185.24.87.14:8000" \
  --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 185.24.87.14"</code></pre>
<p><strong>Парсер.</strong> A-Parser, Key Collector и подобные программы работают по HTTP и HTTPS, потому что собирают именно веб-страницы. Список подставляется целиком, потоки считаются по пакету, схема остаётся <code>http://</code>. Сокетный вариант там тоже принимается, выигрыша в скорости он не даёт, зато закрывает вопрос с обращениями к службе имён.</p>
<p><strong>Почтовый клиент.</strong> SMTP, IMAP и POP3 ходят по своим портам, поэтому здесь берут SOCKS5. Прикладной посредник почтовые протоколы не понимает: он разбирает HTTP, и байты SMTP для него бессмысленны. Порядок отправки писем через сокетный доступ подробно разобран в материале про <a href="/protokoly/smtp-cherez-proxy/">отправку почты через прокси</a>.</p>
<p><strong>Произвольная программа.</strong> Всё, что открывает TCP-соединение на нестандартный порт, идёт через SOCKS5. Игровые клиенты, обменники сообщений, самописные сервисы, клиенты баз данных. Если у программы есть поле «SOCKS-прокси», туда кладётся хост, порт и пара логина и пароля из списка.</p>
<div class="tabl"><table><thead><tr><th>Потребитель</th><th>Рабочая схема</th><th>Почему так</th></tr></thead><tbody><tr><td>Браузер</td><td><code>http://</code> или <code>socks5://</code></td><td>Оба принимаются настройками, выбор по картине DNS</td></tr><tr><td>A-Parser, Key Collector</td><td><code>http://</code></td><td>Собираются веб-страницы, поддержка максимально широкая</td></tr><tr><td>ZennoPoster</td><td><code>http://</code> или <code>socks5://</code></td><td>Зависит от кубика и целевого протокола</td></tr><tr><td>Антидетект-браузер</td><td><code>socks5://</code></td><td>Профиль ждёт четыре поля, сокетный обмен привычнее</td></tr><tr><td>Почтовый клиент</td><td><code>socks5://</code></td><td>Нужны порты 25, 465, 587, 993, 995</td></tr><tr><td>Скрипт на python</td><td><code>socks5h://</code></td><td>Имя разрешается на выходе, поведение предсказуемо</td></tr><tr><td>Системные утилиты сервера</td><td><code>http://</code></td><td>Читают переменные окружения со схемой</td></tr></tbody></table></div>
<p>Все четыре протокола входят в один пакет и работают на одном пуле примерно из 12 000 адресов, поэтому смена протокола в софте не требует ни новой покупки, ни нового списка. Состав пакета целиком описан на странице, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 с полным набором протоколов</a>.</p>
<h2 id="kak-proverit-chto-vybrannyy-protokol-realno-">Как проверить, что выбранный протокол реально работает</h2>
<p>Проверка занимает три команды. Сначала обращение к сервису, который возвращает адрес: ответ должен показать адрес из пула. Затем то же самое по второй схеме, чтобы убедиться, что оба режима подняты. Наконец обращение к целевому домену с выводом кода ответа.</p>
<pre><code># адрес на выходе по HTTP
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# адрес на выходе по SOCKS5
curl -s -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# код ответа целевого домена, без тела
curl -s -o /dev/null -w '%{http_code}\n' \
  -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://example.com/</code></pre>
<p>Ответы должны совпасть между собой по адресу и отличаться от адреса рабочей машины. Для массовой проверки списка мы рекомендуем чекер от Zennolab: у него есть демонстрационная версия, он проходит строки пачкой и показывает тип посредника вместе со временем отклика.</p>
<p>Если по HTTP запрос проходит, а по SOCKS отваливается, смотрим на схему и на порт: часть программ подставляет собственный порт по умолчанию при смене схемы. Если по SOCKS5 приходит отказ на этапе согласования, проверяем пару логина и пароля: SOCKS4 её игнорирует и создаёт ложное впечатление рабочей настройки. Серверная природа адресов при этом одинакова для всех четырёх протоколов, подробности собраны на странице про <a href="https://iprazon.com/proxy/servernye">серверные адреса собственного оборудования</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-vy-daete">Какой тип прокси вы даёте?</h3>
<p>В пакете IPv4 и SOCKS5 доступны SOCKS-4 и SOCKS-5 на выбор, рекомендуем SOCKS-5. Прикладные варианты HTTP и HTTPS работают на тех же адресах, поэтому переключение протокола делается настройкой в программе.</p>
<h3 id="nuzhno-li-pokupat-otdelnyy-paket-pod-socks5">Нужно ли покупать отдельный пакет под SOCKS5?</h3>
<p>Отдельная покупка не требуется. Протоколы IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5 входят в один пакет, список адресов при смене протокола остаётся прежним, меняется только схема в строке подключения.</p>
<h3 id="chem-proveryat-proksi-posle-nastroyki">Чем проверять прокси после настройки?</h3>
<p>Рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой, показывает отвечающие строки, тип посредника и время отклика. Одиночную проверку удобно делать командой curl с ключом <code>-x</code> и нужной схемой.</p>
<h3 id="chto-vhodit-v-proksi-pul">Что входит в прокси-пул?</h3>
<p>Около 12 000 активных IPv4 и SOCKS5. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, доступ к пулу открыт клиентам сервиса. Список адресов обновляется в режиме реального времени и забирается ссылкой или файлом.</p>
<p>Разбор протоколов продолжается в соседних материалах раздела: <a href="/protokoly/chto-takoe-smtp/">как устроен протокол SMTP</a> с разбором пути письма, <a href="/protokoly/pochtovye-porty/">порты 25, 465 и 587</a> и выбор между ними, <a href="/protokoly/imap-i-pop3/">приём почты по IMAP и POP3</a> через сокетный доступ. Когда протокол выбран, поля строки подключения разложены по частям в материале про <a href="/podklyuchenie/stroka-podklyucheniya/">разбор строки подключения</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/http-https-socks/">https://kupit-proxy-ipv4.ru/protokoly/http-https-socks/</a></p>]]></content:encoded></item>
<item><title>Туннель CONNECT: как работает прокси с шифрованием и что видит посредник</title><link>https://kupit-proxy-ipv4.ru/protokoly/tunnel-connect/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/tunnel-connect/</guid><description>Метод CONNECT просит прокси открыть TCP-соединение до указанного узла и порта, после чего посредник перестаёт разбирать содержимое и просто перекладывает…</description><content:encoded><![CDATA[
<p class="vvod">Метод CONNECT просит прокси открыть TCP-соединение до указанного узла и порта, после чего посредник перестаёт разбирать содержимое и просто перекладывает байты в обе стороны. Клиент шлёт одну строку <code>CONNECT example.com:443 HTTP/1.1</code>, получает в ответ <code>200 Connection established</code>, и уже внутри этого канала браузер договаривается о шифровании напрямую с целевым сервером.</p>
<p>Ниже разобрано, откуда взялся такой порядок, как выглядит обмен на уровне байтов, где внутри туннеля живёт заголовок <code>Proxy-Authorization</code>, какие коды приходят на этапе установки и почему через тот же механизм проходит не только HTTPS. Команды даны такие, чтобы обмен можно было посмотреть своими глазами за минуту.</p>
<h2 id="otkuda-vzyalsya-metod-connect">Откуда взялся метод CONNECT</h2>
<p>Обычный HTTP через посредник устроен прямолинейно. Клиент отправляет прокси полную строку с абсолютным адресом, <code>GET http://example.com/page HTTP/1.1</code>, посредник читает её целиком, сам идёт на целевой сервер, забирает ответ и отдаёт его обратно. Пока содержимое открыто, схема работает без оговорок: прокси видит путь, заголовки, тело и коды ответа.</p>
<p>С шифрованием схема упирается в стену. TLS поднимается между браузером и целевым сервером, сессионные ключи считают только эти две стороны, и промежуточный узел получает поток, который ему нечем разобрать. Попытка вклиниться в такой обмен ломает проверку сертификата на стороне клиента, и браузер закрывает соединение с ошибкой.</p>
<p>Выход описали отдельным методом. CONNECT переводит посредника из режима разбора запросов в режим транспорта: прокси открывает TCP-соединение до узла, подтверждает готовность и дальше работает как труба. Метод закреплён в RFC 7231 и уточнён в RFC 9110, поддержка есть у всех распространённых прокси-серверов и у любого браузера. Мы держим этот механизм включённым на всех адресах пула, поэтому <a href="https://iprazon.com/products/kupit-proxy-https">прокси HTTPS с поддержкой туннеля CONNECT</a> работают с браузерами и парсерами без дополнительной настройки на стороне сервера.</p>
<p>Разница между обычным проксированием и туннелем определяет всё остальное: объём того, что посредник может прочитать, момент, когда авторизация ещё возможна, и набор протоколов, которые пройдут поверх.</p>
<h2 id="kak-vyglyadit-obmen-na-ustanovku-tunnelya-i-">Как выглядит обмен на установку туннеля и что идёт дальше</h2>
<p>Обмен занимает две строки плюс пустая строка на каждой стороне. Клиент открывает TCP-соединение с прокси и отправляет:</p>
<pre><code>CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/5.0
</code></pre>
<p>Первая строка содержит метод, целевой узел с портом через двоеточие и версию протокола. Путь тут отсутствует: посреднику незачем знать, какая страница будет запрошена внутри, ему нужен адрес и порт для установки соединения. Заголовок <code>Host</code> дублирует ту же пару. Дальше идут заголовки уровня посредника, которые до целевого сервера не доедут.</p>
<p>Прокси разрешает имя <code>example.com</code> в адрес, открывает к нему TCP-соединение на порт 443 и, если всё сложилось, отвечает:</p>
<pre><code>HTTP/1.1 200 Connection established
Proxy-Agent: proxy/1.1
</code></pre>
<p>Слово в статусной строке может отличаться: встречаются <code>200 Connection established</code>, <code>200 OK</code> и <code>200 Tunnel established</code>. Значение одно, клиент смотрит на код. После пустой строки соединение перестаёт быть HTTP-обменом, и первым байтом от клиента идёт уже <code>ClientHello</code> протокола TLS.</p>
<div class="tabl"><table><thead><tr><th>Часть обмена</th><th>Кто отправляет</th><th>Что несёт</th></tr></thead><tbody><tr><td><code>CONNECT host:port HTTP/1.1</code></td><td>Клиент</td><td>Целевой узел и порт для установки соединения</td></tr><tr><td><code>Host: host:port</code></td><td>Клиент</td><td>Та же пара, дублируется по требованию протокола</td></tr><tr><td><code>Proxy-Authorization</code></td><td>Клиент</td><td>Учётные данные для доступа к посреднику</td></tr><tr><td><code>200 Connection established</code></td><td>Прокси</td><td>Подтверждение, что соединение до узла открыто</td></tr><tr><td>Байты после пустой строки</td><td>Обе стороны</td><td>Содержимое туннеля, посредник его не трогает</td></tr></tbody></table></div>
<p>Момент отправки <code>200</code> меняет роль прокси-сервера полностью. До подтверждения он работал разборщиком HTTP: читал строку запроса, проверял заголовки, проверял право доступа. После подтверждения он держит два сокета и копирует байты между ними, пока одна из сторон не закроет соединение.</p>
<p>Внутри туннеля идёт TLS-рукопожатие. Браузер отправляет <code>ClientHello</code>, сервер отвечает <code>ServerHello</code> и цепочкой сертификатов, стороны согласуют шифры и считают общий ключ. Посредник видит эти пакеты как поток произвольных байтов. Разобрать их он не сможет: ключ считался по обмену, в котором прокси не участвовал.</p>
<p>Отсюда практическое следствие, ради которого туннель и придумали. Заголовки прикладного уровня, куки, тело POST-запроса, путь до страницы и коды ответа целевого сервера остаются внутри шифрования. В логах посредника от всей сессии осядут четыре величины: время, имя узла с портом, объём переданных байтов в каждую сторону и длительность соединения.</p>
<p>Одно соединение туннеля обслуживает всю сессию с узлом. Браузер открывает CONNECT к <code>example.com:443</code> один раз, поднимает TLS и дальше гоняет внутри десятки HTTP-запросов по тому же каналу. Когда параллельно нужен второй узел, поднимается второй туннель со своей строкой CONNECT. При работе в много потоков это стоит держать в голове: число одновременных туннелей равно числу открытых соединений, и оно упирается в лимит потоков пакета.</p>
<h2 id="gde-zhivet-proxy-authorization-i-pochemu-on-">Где живёт Proxy-Authorization и почему он уходит один раз</h2>
<p>Заголовок <code>Proxy-Authorization</code> относится к отрезку между клиентом и посредником. Он несёт пару логина и пароля в виде <code>Basic</code> с кодированием base64 и обрабатывается прокси-сервером. До целевого сервера он не доходит никогда: посредник снимает его при обработке, а в туннельном режиме он физически не может попасть дальше, потому что после подтверждения посредник уже ничего не пишет в поток.</p>
<p>Отсюда правило, которое объясняет половину вопросов по настройке. Учётные данные уходят ровно один раз, в самом запросе CONNECT. Всё, что клиент отправит после <code>200 Connection established</code>, зашифровано и адресовано целевому серверу. Прокси не разберёт эти байты и не найдёт там никаких заголовков, поэтому авторизоваться внутри поднятого туннеля невозможно по устройству механизма.</p>
<p>Практика из этого вытекает такая:</p>
<pre><code># curl подставляет Proxy-Authorization в CONNECT самостоятельно
curl -v -x http://user5521:pf39kd@185.24.87.14:8000 https://example.com

# та же пара отдельным ключом, результат идентичный
curl -v --proxy 185.24.87.14:8000 --proxy-user user5521:pf39kd https://example.com</code></pre>
<p>Если пакет работает по привязке своего адреса, заголовок не нужен вообще: посредник узнаёт клиента по адресу источника и отвечает подтверждением сразу. Оба варианта доступа включены в пакет, переключение идёт в кабинете. Подробный разбор форматов строки подключения собран в материале про <a href="/osnovy/avtorizaciya/">два способа доступа к прокси</a>.</p>
<p>Вторая тонкость касается программ, которые умеют HTTP, но путаются в туннеле. Часть библиотек шлёт <code>Authorization</code> вместо <code>Proxy-Authorization</code>, и тогда посредник не находит учётных данных и отвечает отказом. Имя заголовка проверяется первым, когда доступ по логину отбивается при рабочей привязке.</p>
<h2 id="kody-otveta-na-etape-ustanovki-tunnelya">Коды ответа на этапе установки туннеля</h2>
<p>До подтверждения посредник отвечает обычными кодами HTTP, и каждый несёт свою причину. Разбор занимает секунды, если знать, что означает конкретная цифра.</p>
<div class="tabl"><table><thead><tr><th>Код</th><th>Строка ответа</th><th>Что произошло</th><th>Что делать</th></tr></thead><tbody><tr><td>200</td><td><code>Connection established</code></td><td>TCP-соединение до узла открыто, туннель поднят</td><td>Ничего, дальше идёт TLS</td></tr><tr><td>403</td><td><code>Forbidden</code></td><td>Посредник отказал в доступе к узлу или порту</td><td>Проверить порт назначения и права пакета</td></tr><tr><td>407</td><td><code>Proxy Authentication Required</code></td><td>Учётные данные отсутствуют или не подошли</td><td>Сверить логин, пароль и привязанный адрес</td></tr><tr><td>502</td><td><code>Bad Gateway</code></td><td>Посредник не смог открыть соединение до узла</td><td>Проверить имя узла, порт и доступность цели</td></tr><tr><td>504</td><td><code>Gateway Timeout</code></td><td>Целевой узел не ответил за отведённое время</td><td>Повторить запрос, проверить порт на цели</td></tr></tbody></table></div>
<p>Код 407 приходит с заголовком <code>Proxy-Authenticate: Basic realm="proxy"</code>, который подсказывает клиенту нужную схему. Браузер на этот код показывает окно с полями логина и пароля, <code>curl</code> печатает ответ и завершает работу. Причина обычно сидит в одном из трёх мест: опечатка в паре, привязка оформлена на прежний адрес машины, программа отправила заголовок под неправильным именем. Мы разбираем такие обращения по логину и типу прокси, ответ приходит одним сообщением.</p>
<p>Код 403 на этапе CONNECT чаще всего означает запрет порта. Многие посредники пропускают через туннель только 443 и несколько известных портов, поэтому попытка открыть канал на нестандартный порт заканчивается отказом ещё до соединения. Наш пул пропускает произвольные порты, поэтому такой код тут указывает на другое: доступ к конкретному узлу закрыт или пакет неактивен.</p>
<p>Код 502 говорит о том, что посредник сделал свою часть работы и получил отказ от целевой стороны. Внутри него прячутся три разных случая: имя узла не разрешилось, порт закрыт, узел разорвал соединение сразу после установки. Отличить их помогает прямая проверка того же узла без посредника.</p>
<pre><code># смотрим, отвечает ли цель напрямую с этой машины
curl -v --connect-timeout 5 https://example.com -o /dev/null

# проверяем порт отдельно, без TLS и без HTTP
nc -vz example.com 443</code></pre>
<h2 id="chto-vidit-posrednik-do-i-posle-tunnelya">Что видит посредник до и после туннеля</h2>
<p>Разделение по времени тут строгое: до отправки <code>200</code> посредник читает открытый текст, после подтверждения он копирует байты. Таблица показывает, что остаётся доступным на каждом отрезке.</p>
<div class="tabl"><table><thead><tr><th>Данные</th><th>До установки туннеля</th><th>После установки туннеля</th></tr></thead><tbody><tr><td>Имя целевого узла</td><td>Видно в строке CONNECT</td><td>Видно из уже установленного соединения</td></tr><tr><td>Порт назначения</td><td>Видно в строке CONNECT</td><td>Видно</td></tr><tr><td>Путь до страницы</td><td>Отсутствует в обмене</td><td>Зашифрован</td></tr><tr><td>Заголовки запроса</td><td>Видны только заголовки посредника</td><td>Зашифрованы</td></tr><tr><td>Куки и токены сессии</td><td>Не передаются на этом этапе</td><td>Зашифрованы</td></tr><tr><td>Тело запроса и ответа</td><td>Отсутствует</td><td>Зашифровано</td></tr><tr><td>Код ответа целевого сервера</td><td>Отсутствует</td><td>Зашифрован</td></tr><tr><td>Объём переданных байтов</td><td>Ещё нулевой</td><td>Виден как число</td></tr></tbody></table></div>
<p>Имя узла попадает в лог посредника всегда: без него открыть соединение невозможно. Всё остальное содержимое сессии закрыто шифрованием. Именно поэтому туннельный режим считается основным для работы с личными кабинетами, панелями и любыми сервисами, где внутри ходят токены.</p>
<p>Отдельно смотрим на разрешение имён. При работе через CONNECT имя узла разрешает посредник, поэтому запрос к DNS уходит с его стороны, и локальный резолвер машины про целевой домен ничего не узнаёт. Такое поведение отличает туннель от схемы, где программа сама резолвит имя и передаёт готовый адрес. Проверять его удобно сразу после первой удачной установки туннеля.</p>
<p>Заголовки, которые видны посреднику до туннеля, тоже стоит держать под контролем. <code>User-Agent</code> в запросе CONNECT отправляют не все клиенты, <code>Proxy-Connection</code> встречается у браузеров, <code>Via</code> и <code>X-Forwarded-For</code> добавляет уже сам посредник, если настроен так. Мы служебных пометок в туннель не подмешиваем, и <a href="https://iprazon.com/proxy/anonimnye">анонимные адреса без служебных заголовков</a> отдают целевому серверу ровно то, что отправил клиент.</p>
<h2 id="pochemu-cherez-connect-prohodit-ne-tolko-htt">Почему через CONNECT проходит не только HTTPS</h2>
<p>Метод не привязан к TLS ни одной строкой. В запросе указывается пара из имени узла и номера порта, посредник открывает TCP-соединение и передаёт байты. Что именно поедет внутри, механизму безразлично: там может идти TLS, открытый текст, бинарный протокол или обмен, придуманный самим приложением.</p>
<p>Отсюда список того, что реально ходит через туннель на практике:</p>
<div class="tabl"><table><thead><tr><th>Протокол</th><th>Порт</th><th>Что идёт внутри туннеля</th></tr></thead><tbody><tr><td>HTTPS</td><td>443</td><td>TLS-рукопожатие и HTTP-запросы поверх него</td></tr><tr><td>SMTP с STARTTLS</td><td>587</td><td>Открытый диалог SMTP с переходом на шифрование</td></tr><tr><td>SMTPS</td><td>465</td><td>TLS сразу после установки соединения</td></tr><tr><td>IMAP over TLS</td><td>993</td><td>Обмен почтового клиента с сервером</td></tr><tr><td>WebSocket over TLS</td><td>443</td><td>Апгрейд соединения внутри уже поднятого TLS</td></tr><tr><td>Собственный протокол приложения</td><td>Любой</td><td>Произвольный поток байтов</td></tr></tbody></table></div>
<p>Ограничение тут ставит сам посредник списком разрешённых портов. Классическая настройка Squid разрешает CONNECT только на 443 и 563, поэтому почтовый клиент через такой прокси не пройдёт. Наш пул работает с произвольными портами, и почтовые задачи закрываются тем же способом, что и веб: разбор отправки писем собран в материале про <a href="/protokoly/smtp-cherez-proxy/">SMTP через прокси</a>.</p>
<p>Один момент туннель не покрывает: транспорт остаётся строго TCP. Обмен по UDP через CONNECT провести нельзя, потому что механизм построен на установленном TCP-соединении. Программам, которым нужен UDP, подходит сокетный протокол с отдельной командой, и там работает <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для произвольных портов и протоколов</a>.</p>
<h2 id="kak-posmotret-obmen-svoimi-glazami">Как посмотреть обмен своими глазами</h2>
<p>Первый инструмент это <code>curl</code> с ключом <code>-v</code>. Он печатает обе стороны обмена с посредником, включая строку CONNECT и ответ на неё. Строки с <code>&gt;</code> идут от клиента, строки с <code>&lt;</code> приходят от прокси.</p>
<pre><code>curl -v -x http://185.24.87.14:8000 https://example.com -o /dev/null</code></pre>
<p>Полезная часть вывода выглядит так:</p>
<pre><code>* Connected to 185.24.87.14 (185.24.87.14) port 8000
* allocate connect buffer
* Establish HTTP proxy tunnel to example.com:443
&gt; CONNECT example.com:443 HTTP/1.1
&gt; Host: example.com:443
&gt; User-Agent: curl/8.5.0
&gt; Proxy-Connection: Keep-Alive
&gt;
&lt; HTTP/1.1 200 Connection established
&lt;
* CONNECT phase completed
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* Server certificate: example.com</code></pre>
<p>Строка <code>Establish HTTP proxy tunnel</code> отмечает начало установки, <code>CONNECT phase completed</code> отмечает конец. Всё, что идёт после неё, относится уже к обмену с целевым сервером через поднятый канал. Если туннель не поднялся, вместо <code>200</code> в этом месте будет код отказа, и дальше вывод оборвётся.</p>
<p>Второй инструмент показывает сторону TLS подробнее. <code>openssl s_client</code> умеет ходить через посредника ключом <code>-proxy</code> и печатает цепочку сертификатов, версию протокола и выбранный шифр:</p>
<pre><code>openssl s_client -proxy 185.24.87.14:8000 -connect example.com:443 -servername example.com</code></pre>
<p>В выводе смотрим на четыре вещи: строку <code>CONNECTED</code>, цепочку <code>Certificate chain</code>, поле <code>Verify return code: 0 (ok)</code> и согласованную версию <code>TLSv1.3</code>. Нулевой код проверки подтверждает, что сертификат целевого сервера дошёл до клиента без подмены, и туннель отработал честной трубой. Когда пакет требует авторизации по логину, к команде добавляется ключ <code>-proxy_user</code>:</p>
<pre><code>openssl s_client -proxy 185.24.87.14:8000 -proxy_user user5521 -connect example.com:443</code></pre>
<p>Третий способ пригодится, когда нужно увидеть сами пакеты. <code>tcpdump</code> на интерфейсе машины покажет, что до посредника уходит открытая строка CONNECT, а весь остальной обмен идёт нечитаемым потоком:</p>
<pre><code>tcpdump -i any -A -n 'host 185.24.87.14 and port 8000' -c 40</code></pre>
<h2 id="razbor-sluchaev-kogda-tunnel-ne-podnimaetsya">Разбор случаев, когда туннель не поднимается</h2>
<p>Первый случай простой: <code>curl</code> печатает код отказа сразу после строки CONNECT. Тут причина лежит на стороне посредника, и код указывает на неё напрямую по таблице выше. Проверяем доступ, порт и активность пакета.</p>
<p>Второй случай интереснее. Туннель поднялся, <code>200</code> пришло, а дальше соединение обрывается на TLS-рукопожатии с сообщением вроде <code>SSL routines::unexpected eof while reading</code>. Тут посредник свою часть выполнил, и разбираться нужно с целевым узлом: он может отвечать на 443 чем-то отличным от TLS, требовать SNI или закрывать соединения от незнакомых сетей.</p>
<p>Третий случай встречается у программ со своим сетевым стеком. Клиент отправляет вместо CONNECT обычный <code>GET https://example.com/</code>, посредник получает запрос с абсолютным адресом на схеме <code>https</code> и отвечает отказом. Лечится настройкой: в программе указывается прокси именно как HTTP-посредник для схемы HTTPS, тогда библиотека сама переключится на туннельный режим. Мы проверяем эту настройку первой, когда программа отказывается работать по шифрованной схеме.</p>
<p>Четвёртый случай связан с числом одновременных туннелей. Каждый CONNECT удерживает соединение, пока клиент его не закроет, и при агрессивных настройках парсера открытых каналов набирается больше, чем даёт лимит пакета. Стандартные пакеты держат до 1000 потоков, корпоративный до 3000, при двух привязанных адресах общее число делится пополам. Когда прогон упирается в потолок, часть запросов повисает в ожидании, и в логах это выглядит как таймауты без кода ответа.</p>
<div class="tabl"><table><thead><tr><th>Что видно в выводе</th><th>Где искать причину</th><th>Первый шаг</th></tr></thead><tbody><tr><td>Код 407 сразу после CONNECT</td><td>Доступ к посреднику</td><td>Сверить пару логина или адрес привязки</td></tr><tr><td>Код 502 после CONNECT</td><td>Целевой узел</td><td>Проверить имя и порт прямой командой</td></tr><tr><td>Обрыв на TLS-рукопожатии</td><td>Целевой сервер или SNI</td><td>Повторить с ключом <code>-servername</code></td></tr><tr><td>Программа шлёт GET вместо CONNECT</td><td>Настройка клиента</td><td>Указать посредника для схемы HTTPS</td></tr><tr><td>Таймауты без кода ответа</td><td>Число открытых туннелей</td><td>Снизить потоки в настройках прогона</td></tr></tbody></table></div>
<p>Отдельно проверяем сам факт, что запросы идут через пул. Быстрый способ занимает одну команду и показывает выходной адрес, который увидел целевой сервер. Мы держим около 12 000 активных адресов, ротация внутри пула автоматическая, поэтому выходной адрес от прогона к прогону меняется, и это нормальная картина. Работают такие адреса на собственном оборудовании, и <a href="https://iprazon.com/proxy/servernye">серверные адреса с постоянным откликом</a> держат туннель ровно столько, сколько нужно программе.</p>
<h2 id="tunnel-v-brauzere-i-v-programmah">Туннель в браузере и в программах</h2>
<p>Браузер выбирает режим сам по схеме адреса. Ввод <code>http://</code> даёт обычное проксирование с абсолютным адресом в строке запроса, ввод <code>https://</code> включает CONNECT. Никаких отдельных галочек для этого нет: один и тот же прокси в настройках обслуживает обе схемы, порт тоже один.</p>
<p>В программах картина зависит от библиотеки. Python с <code>requests</code> берёт адрес посредника из переменных окружения и переключается на туннель для схемы <code>https</code> автоматически:</p>
<pre><code>export http_proxy=http://user5521:pf39kd@185.24.87.14:8000
export https_proxy=http://user5521:pf39kd@185.24.87.14:8000
python -c "import requests; print(requests.get('https://example.com').status_code)"</code></pre>
<p>Обратите внимание на строку <code>https_proxy</code>: схема внутри неё остаётся <code>http</code>, потому что она описывает протокол общения с посредником. Само шифрование поднимется внутри туннеля. Эта деталь путает многих, и попытка написать там <code>https://</code> заканчивается ошибкой подключения.</p>
<p>Парсеры и прикладные программы обычно предлагают выбор типа посредника списком. Вариант с пометкой HTTP или HTTPS означает туннельный режим для шифрованных адресов, и он подходит для сбора страниц, работы с кабинетами и проверки выдачи. Состав пакета с потоками, форматами выдачи и безлимитным трафиком описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-https">пакет с поддержкой HTTPS и туннельного режима</a>, а разбор обычных запросов без шифрования собран на странице <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP для открытых запросов</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydet-li-tunnel-connect-pod-moyu-programm">Подойдёт ли туннель CONNECT под мою программу?</h3>
<p>Заранее предугадать поведение каждой библиотеки и каждого целевого сайта нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Проверять стоит той же программой с теми же настройками, которая пойдёт в работу: вывод <code>curl -v</code> покажет строку CONNECT и код ответа за первые секунды.</p>
<h3 id="kakoy-tip-proksi-vybrat-esli-nuzhen-i-https-">Какой тип прокси выбрать, если нужен и HTTPS, и произвольный порт?</h3>
<p>В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, переключение идёт строкой подключения без доплат. Для веба и кабинетов берут туннельный режим по HTTPS, для программ с нестандартными портами и собственным транспортом рекомендуется SOCKS5. Адреса при этом одни и те же, меняется только протокол общения с посредником.</p>
<h3 id="pochemu-vyhodnoy-adres-vnutri-tunnelya-kazhd">Почему выходной адрес внутри туннеля каждый раз другой?</h3>
<p>Пул держится в районе 12 000 активных адресов, ротация внутри него автоматическая, список обновляется в реальном времени. География это микс со всего мира, выборка по отдельной стране не делается. Для сбора открытых данных, проверки выдачи и работы с кабинетами такая схема даёт разнообразие подсетей без ручной настройки.</p>
<h3 id="skolko-tunneley-mozhno-derzhat-odnovremenno">Сколько туннелей можно держать одновременно?</h3>
<p>Число открытых туннелей упирается в лимит потоков пакета: стандартные пакеты дают до 1000, корпоративный до 3000. Пакеты по потокам не складываются. При двух привязанных адресах общее число делится между ними пополам. Считать нагрузку удобнее по цифре из теста, увеличенной примерно на треть.</p>
<p>Соседние разборы по протоколам собраны отдельно: <a href="/protokoly/http-https-socks/">чем отличаются HTTP, HTTPS, SOCKS4 и SOCKS5</a> с таблицей по возможностям каждого, <a href="/protokoly/tcp-i-udp/">как проходят TCP и UDP через SOCKS5</a> с разбором команд сокетного протокола, <a href="/protokoly/pochtovye-porty/">какой почтовый порт выбрать</a> под отправку писем через посредника. Когда туннель поднимается, а доступ отбивается кодом авторизации, порядок разбора описан в материале про <a href="/proverka/oshibka-407/">ошибку 407 при подключении</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/tunnel-connect/">https://kupit-proxy-ipv4.ru/protokoly/tunnel-connect/</a></p>]]></content:encoded></item>
<item><title>TCP и UDP через SOCKS5: что проходит через прокси и что остаётся на машине</title><link>https://kupit-proxy-ipv4.ru/protokoly/tcp-i-udp/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/tcp-i-udp/</guid><description>Через SOCKS5 без оговорок проходит весь трафик по TCP: браузеры, парсеры, почтовые клиенты и любые программы, которые открывают соединение командой CONNECT…</description><content:encoded><![CDATA[
<p class="vvod">Через SOCKS5 без оговорок проходит весь трафик по TCP: браузеры, парсеры, почтовые клиенты и любые программы, которые открывают соединение командой CONNECT сокетного протокола. UDP протоколом тоже описан, команда называется UDP ASSOCIATE, но поддержка на стороне клиентских программ встречается редко, поэтому игровой трафик, часть голосовых сессий и QUIC либо откатываются на TCP, либо уходят мимо посредника напрямую.</p>
<p>Ниже разобрано, чем два транспорта отличаются на уровне практики, как выглядит каждая команда протокола внутри, почему браузеры при включённом посреднике перестают пользоваться QUIC, что делать программе, которой UDP нужен по-настоящему, и какими командами проверить, каким транспортом реально идёт трафик прямо сейчас.</p>
<h2 id="tcp-i-udp-raznica-na-urovne-praktiki">TCP и UDP: разница на уровне практики</h2>
<p>TCP держит соединение. Стороны сначала договариваются трёхшаговым рукопожатием, потом обмениваются данными с нумерацией сегментов, подтверждениями и повторной отправкой потерянного. Порядок байтов на приёме совпадает с порядком отправки, потерянный кусок дойдёт со второй попытки, и приложение получает ровный поток. Плата за это простая: пока соединение живёт, обе стороны хранят его состояние, и любой промежуточный узел тоже держит запись о нём. Именно наличие состояния делает TCP удобным для посредника: прокси открывает своё соединение до цели и склеивает два потока.</p>
<p>UDP состояния не держит. Программа складывает данные в датаграмму, указывает адрес с портом и отправляет её в сеть. Подтверждений нет, нумерации нет, повторной отправки нет, порядок прихода может отличаться от порядка отправки, часть датаграмм теряется по дороге без всякого сигнала. Такой транспорт выбирают там, где задержка важнее полноты: запрос к DNS уложится в одну датаграмму и повторится сам, кадр голосового потока устареет раньше, чем дойдёт повторная копия, позиция игрока обновится следующим пакетом. Посреднику тут склеивать нечего, и работать с UDP приходится через отдельный механизм пересылки датаграмм.</p>
<div class="tabl"><table><thead><tr><th>Свойство</th><th>TCP</th><th>UDP</th></tr></thead><tbody><tr><td>Установка связи</td><td>Трёхшаговое рукопожатие</td><td>Отправка сразу, без подготовки</td></tr><tr><td>Порядок данных</td><td>Восстанавливается по номерам</td><td>Какой пришёл, такой и есть</td></tr><tr><td>Потери</td><td>Отправляются повторно</td><td>Теряются молча</td></tr><tr><td>Состояние соединения</td><td>Хранится на обеих сторонах</td><td>Отсутствует</td></tr><tr><td>Типичные задачи</td><td>Веб, почта, передача файлов, парсинг</td><td>Запросы к DNS, голос, игры, QUIC</td></tr><tr><td>Работа через посредника</td><td>Команда CONNECT, поддержка везде</td><td>Команда UDP ASSOCIATE, поддержка редкая</td></tr></tbody></table></div>
<h2 id="kak-socks5-otkryvaet-soedinenie-po-tcp">Как SOCKS5 открывает соединение по TCP</h2>
<p>Сокетный протокол начинается с короткого приветствия. Клиент подключается к посреднику по TCP на его порт и отправляет байт версии <code>0x05</code>, число предлагаемых способов проверки доступа и их коды. Способа два: <code>0x00</code> без проверки, для пакетов с привязкой своего адреса, и <code>0x02</code> с парой логина и пароля. Посредник отвечает двумя байтами и называет выбранный способ.</p>
<pre><code>клиент -&gt; 05 02 00 02          версия 5, два способа: без проверки и пара
прокси -&gt; 05 02                выбран способ с логином и паролем
клиент -&gt; 01 08 user5521 06 pf39kd    подстрока проверки доступа
прокси -&gt; 01 00                пара принята</code></pre>
<p>После проверки идёт сам запрос. Он занимает от 10 байтов и состоит из версии, кода команды, резервного нуля, типа адреса, самого адреса и порта в двух байтах:</p>
<pre><code>клиент -&gt; 05 01 00 03 0B example.com 01 BB
          |  |  |  |  |              |
          |  |  |  |  |              порт 443 (0x01BB)
          |  |  |  |  длина имени и само имя
          |  |  |  тип адреса: 03 это доменное имя
          |  |  резерв
          |  команда CONNECT
          версия протокола
прокси -&gt; 05 00 00 01 B9 18 57 0E 1F 40   успех, адрес и порт на стороне выхода</code></pre>
<p>Ответный байт <code>0x00</code> означает успех. Дальше то же самое TCP-соединение превращается в двусторонний канал: клиент шлёт байты, посредник перекладывает их на своё соединение с целью и возвращает ответ обратно. Разбора содержимого тут нет вообще, потому что сокетный протокол работает уровнем ниже прикладных заголовков. Мы держим оба способа доступа на одних и тех же адресах, поэтому <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a> подключаются и по привязке, и парой логина с паролем без смены списка.</p>
<p>Тип адреса <code>0x03</code> заслуживает отдельной строки. С ним посреднику уходит доменное имя вместо готового адреса, и тогда имя разрешает выходная сторона. Локальный резолвер машины при этом про целевой домен ничего не узнаёт, и запрос к DNS уходит вместе с трафиком. Это ровно тот случай, когда UDP-запрос к серверу имён вообще не покидает машину клиента отдельным пакетом.</p>
<h2 id="komandy-protokola-i-chto-kazhdaya-delaet">Команды протокола и что каждая делает</h2>
<p>Команд в сокетном протоколе три, и они закрывают три разных сценария работы. Байт команды стоит вторым в запросе.</p>
<div class="tabl"><table><thead><tr><th>Байт</th><th>Команда</th><th>Что делает</th><th>Поддержка в программах</th></tr></thead><tbody><tr><td><code>0x01</code></td><td>CONNECT</td><td>Открывает TCP-соединение до узла и порта</td><td>Есть везде, основной режим</td></tr><tr><td><code>0x02</code></td><td>BIND</td><td>Просит посредника принять входящее соединение</td><td>Встречается у активного режима FTP</td></tr><tr><td><code>0x03</code></td><td>UDP ASSOCIATE</td><td>Открывает канал пересылки датаграмм</td><td>Реализована у части клиентов</td></tr></tbody></table></div>
<p>Ответный код посредника тоже стоит разобрать: по нему видно, где именно оборвалась установка.</p>
<div class="tabl"><table><thead><tr><th>Код</th><th>Значение</th><th>Что проверить</th></tr></thead><tbody><tr><td><code>0x00</code></td><td>Успех, канал открыт</td><td>Ничего, работа пошла</td></tr><tr><td><code>0x01</code></td><td>Общая ошибка посредника</td><td>Активность пакета и доступ</td></tr><tr><td><code>0x02</code></td><td>Соединение запрещено правилами</td><td>Порт назначения и права доступа</td></tr><tr><td><code>0x03</code></td><td>Сеть недоступна</td><td>Доступность цели с выходной стороны</td></tr><tr><td><code>0x04</code></td><td>Узел недоступен</td><td>Имя узла и его адрес</td></tr><tr><td><code>0x05</code></td><td>Целевой узел отклонил соединение</td><td>Открыт ли порт на цели</td></tr><tr><td><code>0x07</code></td><td>Команда не поддерживается</td><td>Не пытается ли программа звать UDP ASSOCIATE</td></tr><tr><td><code>0x08</code></td><td>Тип адреса не поддерживается</td><td>Формат адреса в настройках программы</td></tr></tbody></table></div>
<p>Мы смотрим на этот байт первым, когда программа отказывается работать через сокетного посредника. Код <code>0x07</code> встречается чаще остальных при разборе обращений по UDP. Программа просит канал для датаграмм, получает отказ по команде и дальше ведёт себя по-разному: одна откатывается на TCP молча, другая пишет в лог ошибку сокета, третья продолжает слать датаграммы напрямую с адреса машины.</p>
<h2 id="kak-ustroen-udp-associate">Как устроен UDP ASSOCIATE</h2>
<p>Механизм пересылки датаграмм устроен сложнее обычного соединения, и в этой сложности прячется ответ на вопрос, почему поддержка встречается редко.</p>
<p>Разбираем порядок по шагам. Клиент открывает управляющее TCP-соединение с посредником и отправляет команду <code>0x03</code>. В полях адреса он указывает ту пару адреса и порта, с которой сам будет слать датаграммы, либо нули, если заранее её не знает. Посредник отвечает успехом и называет собственный адрес и порт для приёма датаграмм. Дальше клиент шлёт UDP-пакеты на этот порт, причём каждая датаграмма получает служебную приставку: два нулевых байта резерва, байт номера фрагмента, тип адреса, адрес цели, порт цели и уже потом сами данные.</p>
<pre><code>+-----+------+------+----------+----------+----------+
| RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |
+-----+------+------+----------+----------+----------+
|  2  |  1   |  1   | по типу  |    2     | переменн |
+-----+------+------+----------+----------+----------+</code></pre>
<p>Отсюда четыре требования, которые программа обязана выполнить. Первое: держать управляющее TCP-соединение открытым всё время работы, потому что его закрытие рвёт канал датаграмм. Второе: заворачивать каждую датаграмму в приставку и снимать её с ответных пакетов. Третье: слать датаграммы на адрес и порт, которые назвал посредник, вместо адреса цели. Четвёртое: обрабатывать поле фрагментации, которое почти нигде не реализовано и обычно остаётся нулевым.</p>
<p>Обычный сетевой стек операционной системы всего этого не умеет. Приложение вызывает <code>sendto</code> и ждёт, что датаграмма уйдёт по указанному адресу. Чтобы включить сокетного посредника, разработчику приходится переписывать работу с сокетами вручную или подключать библиотеку-обёртку. Поэтому поддержка живёт точечно: она есть у части торрент-клиентов, у отдельных сетевых утилит и у прослоек, которые перехватывают трафик целиком. Браузеры, парсеры и почтовые клиенты обходятся TCP и команду <code>0x03</code> не зовут.</p>
<h2 id="chto-voobsche-probuet-hodit-po-udp">Что вообще пробует ходить по UDP</h2>
<div class="tabl"><table><thead><tr><th>Вид трафика</th><th>Транспорт</th><th>Что происходит при работе через посредника</th></tr></thead><tbody><tr><td>Веб-страницы по HTTP и HTTPS</td><td>TCP</td><td>Проходят полностью, командой CONNECT</td></tr><tr><td>Почта SMTP, IMAP, POP3</td><td>TCP</td><td>Проходит полностью</td></tr><tr><td>Запросы к DNS</td><td>UDP по умолчанию</td><td>Уходят на сторону выхода, если имя передано типом <code>0x03</code></td></tr><tr><td>QUIC и HTTP третьей версии</td><td>UDP на порту 443</td><td>Браузер откатывается на TCP при включённом посреднике</td></tr><tr><td>Игровой трафик</td><td>UDP на своих портах</td><td>Проходит только у клиентов с поддержкой UDP ASSOCIATE</td></tr><tr><td>Голос и видео в мессенджерах</td><td>UDP с откатом на TCP</td><td>Обычно переключаются на TCP и работают</td></tr><tr><td>Торренты</td><td>TCP плюс UDP для обмена узлами</td><td>Соединения идут по TCP, обмен узлами частично</td></tr><tr><td>Проверка узла командой ping</td><td>ICMP</td><td>Через сокетный протокол не передаётся</td></tr></tbody></table></div>
<p>Запросы к DNS стоят в этом списке первыми по частоте. Программа резолвит имя, получает адрес и только потом открывает соединение. Сокетный протокол умеет забирать этот шаг себе: клиент передаёт имя типом адреса <code>0x03</code>, и разрешение уходит на выходную сторону вместе с трафиком. Когда программа резолвит сама, датаграмма к серверу имён покидает машину напрямую, и картина по адресу выходит неполной. Разбор этого случая с проверкой собран в статье про <a href="/proverka/utechka-dns/">утечку запросов к DNS</a>.</p>
<p>Игровой трафик через сокетного посредника проходит редко и упирается ровно в то, о чём написано выше: клиент игры пользуется системным стеком и про команду <code>0x03</code> не знает. Голосовые и видеозвонки в мессенджерах устроены дружелюбнее, потому что почти все они умеют откатываться на TCP при недоступности датаграмм. Обмен узлами в торрентах работает частично: соединения с пирами идут по TCP, а часть служебного обмена по UDP остаётся за бортом.</p>
<h2 id="pochemu-brauzery-otkatyvayutsya-s-quic-na-tc">Почему браузеры откатываются с QUIC на TCP</h2>
<p>QUIC несёт HTTP третьей версии поверх UDP на том же порту 443. Сервер объявляет о поддержке заголовком <code>alt-svc: h3=":443"; ma=86400</code>, браузер запоминает объявление и следующую сессию пробует поднять по датаграммам. Выигрыш там в скорости установки: рукопожатие транспорта и шифрования складываются в один обмен.</p>
<p>Включённый посредник эту схему выключает. Chromium при заданном прокси перестаёт пробовать QUIC для проксируемых адресов, потому что канал датаграмм через посредника ему недоступен. Firefox ведёт себя так же. Результат один: браузер игнорирует объявление <code>alt-svc</code>, открывает обычное TCP-соединение и работает по HTTP второй версии внутри туннеля. Для сбора страниц, работы с кабинетами и проверки выдачи разницы в результате нет, отличается только время установки первой сессии.</p>
<p>В логах откат виден по трём признакам. В <code>chrome://net-export</code> при включённом посреднике отсутствуют события <code>QUIC_SESSION</code>, зато присутствуют <code>HTTP2_SESSION</code>. На вкладке сети инструментов разработчика колонка протокола показывает <code>h2</code> вместо <code>h3</code>. На стороне машины <code>tcpdump</code> не видит исходящих датаграмм на порт 443 в сторону целевых узлов.</p>
<pre><code># при работе без посредника исходящий QUIC видно сразу
tcpdump -n -i any 'udp and port 443' -c 20

# при включённом посреднике этот фильтр остаётся пустым,
# зато соединение до прокси видно обычным фильтром
tcpdump -n -i any 'tcp and port 1080' -c 20</code></pre>
<p>Иногда браузер всё же пробует датаграммы в обход настроек, и тогда часть трафика уходит с адреса машины. Проверяется это тем же фильтром <code>tcpdump</code>. Если исходящие датаграммы на 443 есть, QUIC выключается флагом запуска или настройкой профиля, после чего весь веб идёт через посредника по TCP. Мы держим адреса на собственном оборудовании с постоянным откликом, и <a href="https://iprazon.com/proxy/servernye">серверные адреса для длинных сессий</a> выдерживают долгие TCP-соединения без разрывов, которые обычно и толкают браузер пробовать другой транспорт.</p>
<h2 id="chto-delat-esli-prilozheniyu-nuzhen-udp">Что делать, если приложению нужен UDP</h2>
<p>Первый путь самый прямой: проверить настройки самой программы. Часть клиентов имеет отдельную галочку вроде «использовать прокси для UDP» или «резолвить имена через прокси». Когда такая галочка есть, поддержка команды <code>0x03</code> в клиенте реализована, и работа пойдёт без обходных манёвров.</p>
<p>Второй путь это перевод задачи на TCP. Многие протоколы имеют TCP-вариант, и включается он одной настройкой. Запросы к DNS ходят по TCP на том же порту 53 и через DoH по HTTPS. Голосовые сессии в мессенджерах переключаются сами. Игровые клиенты иногда предлагают запасной режим соединения. Такой перевод закрывает большую часть задач, потому что рабочие сценарии со сбором данных, кабинетами и почтой построены на TCP целиком. Мы держим сокетный режим на всех адресах пула, и <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с доступом по SOCKS5</a> обслуживает эти сценарии тем же списком, что и веб.</p>
<p>Третий путь для веба: туннельный режим по HTTPS. Он устроен на TCP по определению и пропускает произвольные порты, что закрывает почтовые и прикладные протоколы поверх шифрования. Разбор механизма собран в материале про <a href="/protokoly/tunnel-connect/">туннель CONNECT и работу с шифрованием</a>, а сам режим включён на всех адресах пакета, где доступны <a href="https://iprazon.com/products/kupit-proxy-https">прокси HTTPS с туннельным режимом</a>.</p>
<p>Четвёртый путь подходит там, где переписать программу нельзя. Локальная прослойка принимает трафик приложения и сама говорит с посредником по сокетному протоколу, разворачивая приставки датаграмм. Настройка занимает время и требует прав на машине, зато приложение при этом не меняется ни строкой.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Что сделать</th><th>Результат</th></tr></thead><tbody><tr><td>В клиенте есть галочка UDP через прокси</td><td>Включить её</td><td>Датаграммы идут через посредника</td></tr><tr><td>Протокол имеет TCP-вариант</td><td>Переключить транспорт в настройках</td><td>Трафик проходит обычной командой CONNECT</td></tr><tr><td>Нужен веб с произвольными портами</td><td>Взять туннельный режим по HTTPS</td><td>Работает поверх TCP, порт любой</td></tr><tr><td>Программу менять нельзя</td><td>Поставить локальную прослойку</td><td>Приложение работает без правок</td></tr><tr><td>Нужны только запросы к DNS</td><td>Передавать имя типом адреса <code>0x03</code></td><td>Разрешение уходит на выходную сторону</td></tr></tbody></table></div>
<h2 id="kak-proverit-kakim-transportom-idet-trafik">Как проверить, каким транспортом идёт трафик</h2>
<p>Проверка занимает одну команду и отвечает точнее любых предположений. Мы берём её за первый шаг разбора, потому что она сразу отделяет вопросы транспорта от вопросов доступа. На Windows список соединений с разбивкой по транспорту выдаёт <code>netstat</code>:</p>
<pre><code>:: соединения по TCP с номерами процессов
netstat -ano -p TCP | findstr :1080

:: слушающие и активные сокеты UDP
netstat -ano -p UDP</code></pre>
<p>На Linux и macOS то же самое короче делает <code>ss</code>. Ключ <code>-t</code> показывает TCP, ключ <code>-u</code> показывает UDP, ключ <code>-p</code> добавляет имя процесса:</p>
<pre><code># что открыто по TCP в сторону посредника
ss -tnp | grep 1080

# какие сокеты UDP держит машина прямо сейчас
ss -unap

# сводка по числу соединений каждого транспорта
ss -s</code></pre>
<p>Полную картину даёт <code>tcpdump</code>: он показывает реальные пакеты на интерфейсе, включая те, что программа отправила мимо настроек. Три фильтра закрывают типовой разбор:</p>
<pre><code># всё, что уходит с машины по UDP, кроме запросов к серверу имён
tcpdump -n -i any 'udp and not port 53' -c 40

# запросы к DNS отдельно: видно, резолвит машина сама или нет
tcpdump -n -i any 'udp port 53' -c 20

# трафик до посредника: тут должно быть видно основной поток
tcpdump -n -i any 'host 185.24.87.14 and port 1080' -c 40</code></pre>
<p>Читается вывод так. Строки с <code>IP ... &gt; ...: UDP, length</code> означают датаграммы, ушедшие напрямую. Строки с флагами <code>Flags [S]</code>, <code>[.]</code>, <code>[P.]</code> относятся к TCP. Если весь основной обмен виден на адресе посредника, а датаграмм наружу нет, трафик идёт через пул полностью. Мы проверяем это первым делом, когда программа ведёт себя странно при рабочем на вид подключении.</p>
<div class="tabl"><table><thead><tr><th>Инструмент</th><th>Команда</th><th>Что показывает</th></tr></thead><tbody><tr><td>netstat</td><td><code>netstat -ano -p UDP</code></td><td>Сокеты UDP и процессы на Windows</td></tr><tr><td>ss</td><td><code>ss -tnp</code> и <code>ss -unap</code></td><td>Разбивка соединений по транспорту</td></tr><tr><td>ss сводкой</td><td><code>ss -s</code></td><td>Число соединений каждого вида</td></tr><tr><td>tcpdump</td><td><code>tcpdump -n 'udp and not port 53'</code></td><td>Датаграммы, ушедшие мимо посредника</td></tr><tr><td>curl</td><td><code>curl -v --socks5-hostname ...</code></td><td>Работу команды CONNECT сокетного протокола</td></tr></tbody></table></div>
<p>Отдельно проверяем сам факт работы через сокетный протокол. Ключ <code>--socks5-hostname</code> заставляет <code>curl</code> передать имя посреднику типом <code>0x03</code>, и в подробном выводе видно строку <code>SOCKS5 request granted</code>:</p>
<pre><code>curl -v --socks5-hostname user5521:pf39kd@185.24.87.14:1080 https://example.com -o /dev/null</code></pre>
<h2 id="nagruzka-i-chislo-soedineniy-pri-rabote-po-t">Нагрузка и число соединений при работе по TCP</h2>
<p>Раз основной трафик идёт по TCP, планирование нагрузки строится вокруг числа одновременных соединений. Каждый вызов команды CONNECT в сокетном протоколе занимает один поток, и парсер с настройкой в 200 потоков держит до 200 открытых каналов через пул. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, пакеты по потокам не складываются. При двух привязанных адресах общее число делится между ними пополам, и этот момент забывают чаще остальных.</p>
<p>Трафик считать не нужно вовсе: он безлимитный на всех вариантах, поэтому объём выкачанных страниц на выбор пакета не влияет. Для долгих прогонов, где заранее неизвестно, сколько данных придёт, спокойнее всего работают <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a>.</p>
<p>Число адресов в работе тоже стоит прикинуть заранее. Пул держится в районе 12 000 активных адресов, ротация внутри него автоматическая, список обновляется в реальном времени. Один и тот же наш список одинаково подходит и для сокетного режима, и для обычного веба, потому что протокол выбирается строкой подключения. Состав пакета целиком описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<p>Для сокетного режима порт в строке подключения обычно отличается от порта HTTP-режима, и это единственное, что меняется при переключении. Логин и пароль остаются прежними, адреса те же, список перечитывать не нужно. Программа, которая умеет и то, и другое, переключается правкой одного поля в настройках, и работа продолжается без паузы.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-vybrat-esli-programma-umeet">Какой тип прокси выбрать, если программа умеет и HTTP, и SOCKS?</h3>
<p>В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, выбор идёт строкой подключения. Мы рекомендуем SOCKS5: он работает уровнем ниже прикладных заголовков, умеет передавать доменное имя на выходную сторону и подходит для произвольных портов. Доплачивать за протокол не нужно, адреса используются одни и те же.</p>
<h3 id="poydet-li-moya-programma-po-udp-cherez-vashi">Пойдёт ли моя программа по UDP через ваши прокси?</h3>
<p>Заранее предугадать поведение каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Проверка занимает несколько минут: запускается тот же клиент с теми же настройками, а <code>tcpdump</code> с фильтром по датаграммам показывает, зовёт ли программа команду <code>0x03</code> или обходится соединениями по TCP.</p>
<h3 id="chem-otlichaetsya-socks4-ot-socks5-v-chasti-">Чем отличается SOCKS4 от SOCKS5 в части транспорта?</h3>
<p>SOCKS4 работает только с соединениями по TCP и принимает адрес в числовом виде. SOCKS5 добавляет проверку доступа парой логина и пароля, приём доменных имён отдельным типом адреса и команду для пересылки датаграмм. Оба варианта включены в пакет, рекомендуется пятая версия.</p>
<h3 id="skolko-soedineniy-mozhno-derzhat-odnovremenn">Сколько соединений можно держать одновременно?</h3>
<p>Число упирается в лимит потоков пакета: стандартные пакеты дают до 1000, корпоративный до 3000. Пакеты по потокам не складываются. При двух привязанных адресах общее число делится между ними пополам, поэтому вторую привязку разумно держать пустой, пока она реально не понадобится.</p>
<p>Остальные разборы по протоколам собраны рядом: <a href="/protokoly/http-https-socks/">чем отличаются HTTP, HTTPS, SOCKS4 и SOCKS5</a> с таблицей по каждому режиму, <a href="/protokoly/chto-takoe-smtp/">как идёт письмо по протоколу SMTP</a> от команды до кода ответа, <a href="/protokoly/imap-i-pop3/">как принимать почту по IMAP и POP3</a> через посредника. Разбор полей строки подключения, включая порт сокетного режима, собран в материале про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения по полям</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/tcp-i-udp/">https://kupit-proxy-ipv4.ru/protokoly/tcp-i-udp/</a></p>]]></content:encoded></item>
<item><title>Что такое протокол SMTP и как идёт письмо от отправителя до ящика получателя</title><link>https://kupit-proxy-ipv4.ru/protokoly/chto-takoe-smtp/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/chto-takoe-smtp/</guid><description>SMTP это текстовый протокол передачи почты поверх TCP: программа с письмом на руках открывает соединение с почтовым сервером и короткими командами сообщает,…</description><content:encoded><![CDATA[
<p class="vvod">SMTP это текстовый протокол передачи почты поверх TCP: программа с письмом на руках открывает соединение с почтовым сервером и короткими командами сообщает, от кого письмо, кому его отдать и что лежит внутри. Дальше сервер отправителя находит по MX-записи сервер домена получателя, открывает к нему уже своё соединение и передаёт письмо, после чего оно ложится в ящик.</p>
<p>Дальше разобран весь путь по порядку: кто участвует в доставке, из каких команд состоит сеанс, что означают трёхзначные коды ответов, чем конверт письма отличается от заголовков, что записывается в Received и зачем домену три подписи SPF, DKIM и DMARC. Настройка отправки через посредника вынесена в отдельный материал про <a href="/protokoly/smtp-cherez-proxy/">SMTP через прокси и выбор исходящего адреса</a>, а разбор портов лежит в материале про <a href="/protokoly/pochtovye-porty/">почтовые порты 25, 465 и 587</a>.</p>
<h2 id="smtp-prostymi-slovami-chto-beret-na-sebya-pr">SMTP простыми словами: что берёт на себя протокол</h2>
<p>Аббревиатура раскрывается как Simple Mail Transfer Protocol, простой протокол передачи почты. Слово «простой» здесь честное. Весь обмен состоит из строк ASCII, которые читаются глазами без декодера: клиент пишет команду, сервер отвечает трёхзначным числом и пояснением на английском. Именно поэтому почтовый сеанс до сих пор разбирают вручную через <code>telnet</code> или <code>openssl s_client</code>, и половина отказов становится понятной за пару минут наблюдения.</p>
<p>Протокол занят одной работой: передвинуть письмо на шаг вперёд. Он принимает письмо у отправителя и сдаёт следующему серверу по цепочке. Забор почты из ящика к SMTP отношения не имеет, этим заняты IMAP и POP3. Хранение писем, папки, флаги прочтения и поиск по ящику тоже живут вне протокола, их обслуживает почтовая система на стороне получателя.</p>
<p>Второе свойство важнее первого. SMTP работает по схеме push: соединение всегда открывает тот, у кого письмо на руках. Сервер получателя сидит и слушает порт, ничего сам не запрашивает и никуда не ходит. Отсюда следует практический вывод, который потом всплывает в каждом разборе доставки: адрес, с которого открыто соединение, виден принимающей стороне всегда и записывается в служебные заголовки письма. Когда отправка идёт через посредника, подходит сокетный туннель, потому что <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 пропускают произвольный TCP-порт</a> без разбора того, что внутри соединения.</p>
<p>Третье свойство: SMTP не гарантирует мгновенности. Сервер обязан либо принять письмо на себя и отвечать за него дальше, либо честно отказать. Приняв письмо, он ставит его в очередь и повторяет попытки доставки часами. Поэтому фраза «письмо отправлено» означает лишь то, что первый сервер взял ответственность на себя. Мы разбираем этот момент отдельно, потому что половина вопросов про доставку упирается именно в него.</p>
<h2 id="put-pisma-uchastniki-dostavki-i-chetyre-ucha">Путь письма: участники доставки и четыре участка</h2>
<p>Между кнопкой «Отправить» и папкой «Входящие» письмо проходит через четыре роли. У каждой роли есть устоявшееся сокращение, и в логах почтовых серверов эти сокращения встречаются постоянно.</p>
<div class="tabl"><table><thead><tr><th>Роль</th><th>Расшифровка</th><th>Что делает</th><th>Пример программы</th></tr></thead><tbody><tr><td>MUA</td><td>Mail User Agent</td><td>Пишет письмо и сдаёт его на сервер отправки</td><td>Thunderbird, The Bat, Outlook, скрипт на python</td></tr><tr><td>MSA</td><td>Mail Submission Agent</td><td>Принимает письмо от автора после авторизации, порт 587</td><td>Postfix в режиме submission, почтовый сервис</td></tr><tr><td>MTA</td><td>Mail Transfer Agent</td><td>Ищет MX получателя и передаёт письмо дальше, порт 25</td><td>Postfix, Exim, Sendmail</td></tr><tr><td>MDA</td><td>Mail Delivery Agent</td><td>Кладёт письмо в ящик, раскладывает по папкам</td><td>Dovecot LDA, procmail</td></tr></tbody></table></div>
<p>Первый участок это авторизованная сдача письма. Клиент соединяется со своим сервером по порту 587, представляется логином и паролем и отдаёт письмо. Здесь работает авторизация, здесь же почтовая система подставляет недостающие заголовки и присваивает письму идентификатор Message-ID.</p>
<p>Второй участок это межсерверная передача. Сервер отправителя выясняет, кто принимает почту для домена получателя, и открывает к нему соединение по порту 25. Авторизации на этом участке нет: любой сервер интернета имеет право принести письмо любому другому. Отсюда растут все проверки подлинности, потому что доверие приходится строить поверх открытой двери.</p>
<p>Третий участок это внутренняя доставка. Принимающий сервер прогоняет письмо через фильтры, сверяет подписи и передаёт агенту доставки. Четвёртый участок это уже забор письма из ящика клиентом, и он идёт по совсем другим протоколам.</p>
<p>Мы держим этот список ролей перед глазами при любом разборе, потому что почти каждый вопрос вида «почему письмо не дошло» решается определением участка, на котором оно остановилось.</p>
<h2 id="mx-zapis-kak-server-otpravitelya-nahodit-ser">MX-запись: как сервер отправителя находит сервер получателя</h2>
<p>Домен получателя в адресе выглядит как <code>example.org</code>, при этом почту для него может принимать совсем другая машина. Связь задаётся записью MX в DNS. Сервер отправителя берёт часть адреса после знака <code>@</code>, запрашивает у DNS записи типа MX и получает список имён с числовыми приоритетами.</p>
<pre><code>$ dig +short MX example.org
10 mx1.mailhost.example.
20 mx2.mailhost.example.
30 backup.mailhost.example.</code></pre>
<p>Меньшее число означает более высокий приоритет. Сервер отправителя сначала пробует <code>mx1</code>, при отказе переходит к <code>mx2</code> и дальше вниз по списку. Имена из ответа резолвятся в адреса записями A, и уже к ним открывается TCP-соединение. Если MX-записей у домена нет вовсе, работает запасное правило: почта идёт на адрес из записи A самого домена.</p>
<p>Одинаковые приоритеты у нескольких записей означают распределение нагрузки: отправитель выбирает из них произвольно. Такая конструкция часто встречается у крупных почтовых систем, где десяток машин принимает поток параллельно. Мы проверяем MX первым делом, когда письма к одному домену уходят в никуда: устаревшая запись объясняет отказ быстрее логов.</p>
<div class="tabl"><table><thead><tr><th>Что запрашиваем</th><th>Тип записи</th><th>Что получаем</th><th>Зачем</th></tr></thead><tbody><tr><td><code>example.org</code></td><td>MX</td><td>Имена принимающих серверов с приоритетами</td><td>Определить, куда нести письмо</td></tr><tr><td><code>mx1.mailhost.example</code></td><td>A</td><td>Адрес IPv4 принимающей машины</td><td>Открыть TCP-соединение</td></tr><tr><td><code>example.org</code></td><td>TXT</td><td>Запись SPF со списком отправителей</td><td>Проверить право адреса на отправку</td></tr><tr><td><code>selector._domainkey.example.org</code></td><td>TXT</td><td>Открытый ключ DKIM</td><td>Проверить подпись письма</td></tr><tr><td><code>_dmarc.example.org</code></td><td>TXT</td><td>Политика DMARC</td><td>Понять, что делать при провале проверок</td></tr></tbody></table></div>
<p>Сама сеть, из которой уходит соединение, на выбор MX никак не влияет: список принимающих серверов одинаков для всех. Влияет она на другое, на то, какой адрес увидит принимающая сторона. Тем, кто разводит отправку по разным сетям, подходит вариант, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к общему пулу</a> и держать соединения через него.</p>
<h2 id="seans-smtp-po-komandam-ot-ehlo-do-quit">Сеанс SMTP по командам: от EHLO до QUIT</h2>
<p>Сеанс устроен как диалог. Клиент отправляет одну команду строкой, сервер отвечает одной или несколькими строками с трёхзначным кодом впереди. Набор команд короткий, и рабочая отправка укладывается в шесть штук.</p>
<div class="tabl"><table><thead><tr><th>Команда</th><th>Что означает</th><th>Типичный ответ</th></tr></thead><tbody><tr><td><code>EHLO имя</code></td><td>Клиент представляется и просит список расширений</td><td><code>250-</code> со списком возможностей</td></tr><tr><td><code>HELO имя</code></td><td>Устаревшая форма приветствия без расширений</td><td><code>250 OK</code></td></tr><tr><td><code>STARTTLS</code></td><td>Перевести открытое соединение в шифрованное</td><td><code>220 Ready to start TLS</code></td></tr><tr><td><code>AUTH LOGIN</code></td><td>Начать авторизацию логином и паролем</td><td><code>334</code> с запросом строки base64</td></tr><tr><td><code>MAIL FROM:&lt;адрес&gt;</code></td><td>Задать обратный адрес конверта</td><td><code>250 Sender OK</code></td></tr><tr><td><code>RCPT TO:&lt;адрес&gt;</code></td><td>Добавить получателя в конверт</td><td><code>250 Recipient OK</code></td></tr><tr><td><code>DATA</code></td><td>Начать передачу заголовков и тела</td><td><code>354 End data with &lt;CRLF&gt;.&lt;CRLF&gt;</code></td></tr><tr><td><code>RSET</code></td><td>Сбросить текущий конверт, соединение остаётся</td><td><code>250 Reset state</code></td></tr><tr><td><code>NOOP</code></td><td>Пустая команда, держит соединение живым</td><td><code>250 OK</code></td></tr><tr><td><code>QUIT</code></td><td>Закрыть сеанс корректно</td><td><code>221 Bye</code></td></tr></tbody></table></div>
<p>Живой обмен по порту 587 выглядит так. Строки клиента помечены стрелкой, строки сервера идут без пометки.</p>
<pre><code>220 mail.example.org ESMTP Postfix
&gt; EHLO client.example.net
250-mail.example.org
250-PIPELINING
250-SIZE 26214400
250-STARTTLS
250-AUTH PLAIN LOGIN
250-8BITMIME
250 SMTPUTF8
&gt; STARTTLS
220 2.0.0 Ready to start TLS
&gt; EHLO client.example.net
250-mail.example.org
250-AUTH PLAIN LOGIN
250 SMTPUTF8
&gt; AUTH LOGIN
334 VXNlcm5hbWU6
&gt; c2VuZGVyQGV4YW1wbGUub3Jn
334 UGFzc3dvcmQ6
&gt; cGFzc3dvcmQxMjM=
235 2.7.0 Authentication successful
&gt; MAIL FROM:&lt;sender@example.org&gt;
250 2.1.0 Ok
&gt; RCPT TO:&lt;user@example.com&gt;
250 2.1.5 Ok
&gt; DATA
354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
&gt; From: Sender &lt;sender@example.org&gt;
&gt; To: User &lt;user@example.com&gt;
&gt; Subject: Test message
&gt; Date: Mon, 12 Aug 10:41:03 +0300
&gt;
&gt; Text of the message.
&gt; .
250 2.0.0 Ok: queued as 4A1F2C0B7E
&gt; QUIT
221 2.0.0 Bye</code></pre>
<p>Ответ на <code>EHLO</code> заслуживает отдельного внимания: сервер перечисляет расширения ESMTP, и по этому списку сразу понятно, чего от него ждать. <code>SIZE 26214400</code> задаёт потолок письма в байтах, около 25 мегабайт. <code>PIPELINING</code> разрешает слать команды пачкой без ожидания каждого ответа. <code>8BITMIME</code> и <code>SMTPUTF8</code> отвечают за восьмибитные тела и адреса с национальными символами. <code>STARTTLS</code> показывает готовность поднять шифрование поверх открытого порта. <code>AUTH PLAIN LOGIN</code> перечисляет доступные способы авторизации.</p>
<p>Разбирая чужой сеанс, мы сначала смотрим на этот перечень: он говорит про сервер больше, чем документация к нему. Тело письма завершается строкой с единственной точкой. Отсюда старое правило: строку внутри письма, которая сама состоит из точки, отправитель обязан удвоить, иначе сеанс оборвётся на середине. Библиотеки делают это сами, ручные скрипты на сокетах иногда забывают.</p>
<h2 id="kody-otvetov-servera-2xx-4xx-5xx-i-chto-dela">Коды ответов сервера: 2xx, 4xx, 5xx и что делать с временным отказом</h2>
<p>Каждый ответ начинается с трёх цифр. Первая цифра задаёт класс и отвечает на вопрос «что дальше», вторая и третья уточняют причину. Класс читается мгновенно, и этого хватает, чтобы понять, повторять попытку или прекращать.</p>
<div class="tabl"><table><thead><tr><th>Класс</th><th>Значение</th><th>Примеры</th><th>Что делает отправитель</th></tr></thead><tbody><tr><td>2xx</td><td>Команда принята и выполнена</td><td><code>250 Ok</code>, <code>221 Bye</code>, <code>235 Authentication successful</code></td><td>Идёт к следующей команде</td></tr><tr><td>3xx</td><td>Команда принята, сервер ждёт продолжения</td><td><code>354 End data</code>, <code>334</code> запрос логина</td><td>Передаёт данные, которых ждут</td></tr><tr><td>4xx</td><td>Временный отказ, ошибка на стороне сервера</td><td><code>421 Service not available</code>, <code>450 Mailbox busy</code>, <code>451 Local error</code>, <code>452 Insufficient storage</code></td><td>Ставит письмо в очередь и повторяет позже</td></tr><tr><td>5xx</td><td>Постоянный отказ, повтор бессмысленен</td><td><code>550 No such user</code>, <code>552 Message too large</code>, <code>554 Transaction failed</code></td><td>Прекращает попытки и отдаёт отчёт о недоставке</td></tr></tbody></table></div>
<p>Разница между 4xx и 5xx определяет всю логику очереди. Код <code>450</code> говорит «сейчас нельзя, приходите позже», и правильно настроенный сервер отправителя тут же ставит письмо в очередь. Повторы идут по нарастающему интервалу: сначала через несколько минут, потом через полчаса, дальше через час и реже. Общий срок жизни письма в очереди у Postfix задаётся параметром <code>maximal_queue_lifetime</code> и по умолчанию равен пяти суткам. Всё это время отправитель продолжает стучаться.</p>
<p>Отдельного разбора заслуживает грейлистинг. Принимающая сторона отвечает <code>450</code> на первую попытку от незнакомой связки адреса, отправителя и получателя, запоминает её и принимает письмо со второй попытки через несколько минут. Массовые рассыльщики часто не повторяют, поэтому приём с задержкой отсекает изрядную долю мусора. Настоящий почтовый сервер повторит и доставит письмо с опозданием.</p>
<p>Отказ <code>421</code> означает, что сервер закрывает соединение прямо сейчас: перегрузка, перезапуск, слишком много параллельных подключений с одного адреса. Реакция та же: очередь и повтор. Смысл в том, что временный отказ обрабатывается терпением, при этом стоит смотреть на частоту таких ответов. Если 4xx приходят постоянно с одной сети, разговор идёт уже про репутацию исходящего адреса, и здесь помогают <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a> с предсказуемым поведением.</p>
<h2 id="konvert-pisma-i-zagolovki-pochemu-adresa-ras">Конверт письма и заголовки: почему адреса расходятся</h2>
<p>Письмо состоит из двух слоёв, и они живут независимо. Первый слой это конверт: значения из команд <code>MAIL FROM</code> и <code>RCPT TO</code>. Второй слой это сам текст письма, который начинается после <code>DATA</code> и содержит заголовки <code>From:</code>, <code>To:</code>, <code>Subject:</code>, <code>Date:</code>.</p>
<p>Почтовые серверы маршрутизируют письмо по конверту. Заголовки внутри <code>DATA</code> для них обычный текст, который они передают дальше и показывают пользователю. Отсюда две вещи, которые удивляют новичков.</p>
<p>Первая: адрес в <code>RCPT TO</code> и адрес в <code>To:</code> совпадать не обязаны. Скрытая копия работает именно так. Получатель добавляется командой <code>RCPT TO</code>, при этом в заголовки его адрес не пишется, поэтому остальные адресаты его не видят. Рассылки по спискам устроены тем же приёмом: в <code>To:</code> стоит имя списка, в конверте перечислены реальные ящики.</p>
<p>Вторая: адрес в <code>MAIL FROM</code> и адрес в <code>From:</code> тоже расходятся. Конвертный отправитель отвечает за возвраты, и принимающий сервер записывает его в заголовок <code>Return-Path</code> при доставке. Сервисы рассылок ставят туда служебный адрес вида <code>bounce-4f2a@mail.sender.example</code>, чтобы отчёты о недоставке падали в автоматический обработчик. Видимый <code>From:</code> при этом остаётся человеческим.</p>
<div class="tabl"><table><thead><tr><th>Поле</th><th>Где живёт</th><th>Кто читает</th><th>Пример значения</th></tr></thead><tbody><tr><td><code>MAIL FROM</code></td><td>Конверт</td><td>Почтовые серверы, проверка SPF</td><td><code>bounce-4f2a@mail.sender.example</code></td></tr><tr><td><code>RCPT TO</code></td><td>Конверт</td><td>Почтовые серверы, маршрутизация</td><td><code>user@example.com</code></td></tr><tr><td><code>From:</code></td><td>Заголовки</td><td>Пользователь, проверка DMARC</td><td><code>Отдел продаж &lt;sales@example.org&gt;</code></td></tr><tr><td><code>To:</code></td><td>Заголовки</td><td>Пользователь</td><td><code>Клиент &lt;user@example.com&gt;</code></td></tr><tr><td><code>Return-Path</code></td><td>Заголовки, ставит получатель</td><td>Обработчик возвратов</td><td>Копия значения <code>MAIL FROM</code></td></tr></tbody></table></div>
<p>Расхождение этих двух слоёв породило почти все схемы подделки писем. Проверить конверт легко, потому что адрес соединения виден. Проверить заголовок <code>From:</code> без криптографии невозможно, ведь это просто строка текста. Три механизма, разобранные ниже, закрывают именно этот разрыв.</p>
<h2 id="zagolovok-received-chto-po-nemu-vidno">Заголовок Received: что по нему видно</h2>
<p>Каждый сервер, через который прошло письмо, дописывает сверху свою строку <code>Received</code>. Получается стек: самая верхняя строка добавлена последним сервером, самая нижняя относится к моменту, когда письмо только сдали в отправку. Читать письмо по этим строкам нужно снизу вверх.</p>
<pre><code>Received: from mx1.mailhost.example (mx1.mailhost.example [203.0.113.24])
        by mail.example.com (Postfix) with ESMTPS id 4A1F2C0B7E
        for &lt;user@example.com&gt;; Mon, 12 Aug 10:41:07 +0300
Received: from client.example.net (unknown [198.51.100.77])
        by mail.example.org (Postfix) with ESMTPSA id 9D3B1A5C42
        for &lt;user@example.com&gt;; Mon, 12 Aug 10:41:03 +0300</code></pre>
<p>Нижняя строка рассказывает о сдаче письма. <code>from client.example.net</code> это имя, которым клиент представился в <code>EHLO</code>, оно задаётся программой и легко ставится любым. В скобках стоит правда: <code>unknown</code> означает, что обратной записи PTR у адреса нет, а <code>198.51.100.77</code> это реальный адрес, с которого пришло соединение, его подставил сам сервер. Метка <code>ESMTPSA</code> расшифровывается как ESMTP с шифрованием и авторизацией, буква <code>A</code> в конце подтверждает, что клиент прошёл <code>AUTH</code>.</p>
<p>Верхняя строка описывает межсерверную передачу: письмо принесла машина <code>mx1.mailhost.example</code> с адреса <code>203.0.113.24</code>, приняла его <code>mail.example.com</code>, протокол <code>ESMTPS</code> без буквы <code>A</code>, потому что авторизации на порту 25 нет. Идентификатор очереди в поле <code>id</code> пригодится, когда придётся искать письмо в логах конкретного сервера.</p>
<p>Практический вывод простой. Адрес в самой нижней строке <code>Received</code> показывает, откуда физически ушло письмо. Именно его мы смотрим первым делом, когда проверяем, что отправка идёт по задуманному маршруту. Имя из <code>EHLO</code> при таком разборе доверия не заслуживает, потому что клиент вписывает туда что угодно. Шифрование канала на этом участке разбирается тем же способом, что и обычный <a href="https://iprazon.com/products/kupit-proxy-https">прокси HTTPS с туннелем CONNECT</a>, где посредник передаёт байты, ничего не читая.</p>
<p>Ещё один заголовок стоит рядом: <code>Message-ID</code>. Его ставит первый сервер, дальше он идёт с письмом неизменным и служит ключом поиска в логах всей цепочки. Наш обычный порядок разбора такой: сначала нижний <code>Received</code>, затем <code>Message-ID</code>, затем логи сервера отправки по этому идентификатору.</p>
<h2 id="spf-dkim-i-dmarc-tri-proverki-na-storone-pol">SPF, DKIM и DMARC: три проверки на стороне получателя</h2>
<p>SPF отвечает на вопрос, имел ли адрес соединения право отправлять почту от имени домена. Владелец домена публикует запись TXT со списком разрешённых отправителей, например <code>v=spf1 ip4:203.0.113.0/24 include:_spf.mailhost.example -all</code>. Принимающий сервер берёт домен из конверта, из <code>MAIL FROM</code>, запрашивает эту запись и сверяет с ней адрес, с которого открыто соединение. Хвост <code>-all</code> означает жёсткий отказ всем остальным, <code>~all</code> мягкую пометку. Проверка привязана к конверту, поэтому пересылка письма через промежуточный ящик её ломает: адрес соединения меняется, домен остаётся прежним.</p>
<p>DKIM отвечает на вопрос, менялось ли письмо в пути и подписал ли его домен. Отправляющий сервер считает подпись по телу письма и части заголовков, кладёт её в заголовок <code>DKIM-Signature</code> и указывает там селектор. Получатель забирает открытый ключ записью TXT по адресу <code>селектор._domainkey.домен</code>, пересчитывает подпись и сверяет. Ключевое отличие от SPF: проверка не зависит от адреса соединения, поэтому переживает пересылку, пока текст письма и подписанные заголовки остаются нетронутыми.</p>
<p>DMARC связывает первые две проверки с видимым адресом в <code>From:</code>. Запись публикуется в TXT по имени <code>_dmarc.домен</code> и выглядит как <code>v=DMARC1; p=quarantine; rua=mailto:reports@example.org; pct=100</code>. Политика <code>p=</code> говорит принимающей стороне, что делать с письмом, которое провалило и SPF, и DKIM: <code>none</code> только наблюдать, <code>quarantine</code> класть в спам, <code>reject</code> отбивать на уровне SMTP кодом 5xx. Дополнительно DMARC требует выравнивания: домен из <code>From:</code> должен совпадать с доменом, который прошёл проверку. Параметр <code>rua</code> задаёт адрес для сводных отчётов, и они показывают владельцу домена, кто отправляет почту от его имени.</p>
<div class="tabl"><table><thead><tr><th>Механизм</th><th>Что проверяет</th><th>Где лежит запись</th><th>С чем сверяется</th></tr></thead><tbody><tr><td>SPF</td><td>Право адреса отправлять от имени домена</td><td>TXT на домене</td><td>Адрес соединения и домен из <code>MAIL FROM</code></td></tr><tr><td>DKIM</td><td>Целостность письма и подпись домена</td><td>TXT на <code>селектор._domainkey</code></td><td>Заголовок <code>DKIM-Signature</code></td></tr><tr><td>DMARC</td><td>Согласование проверок с видимым <code>From:</code></td><td>TXT на <code>_dmarc</code></td><td>Итоги SPF и DKIM плюс выравнивание доменов</td></tr></tbody></table></div>
<p>Все три записи живут в DNS и настраиваются владельцем домена. Отправляющая сторона на них влияет косвенно: подписи ставит почтовый сервер, а адрес соединения определяется тем, откуда открыт сокет. Мы держим все три записи в одном текстовом файле рядом с настройками почтового сервера, потому что при переезде домена их правят одновременно, и забытая строка проявляется через сутки.</p>
<h2 id="kak-posmotret-seans-svoimi-rukami">Как посмотреть сеанс своими руками</h2>
<p>Ручной сеанс остаётся самым быстрым способом понять, что происходит. Для порта 587 с переходом в TLS подходит <code>openssl s_client</code> с ключом <code>-starttls smtp</code>, для порта 465 тот же инструмент без ключа, потому что там шифрование поднимается сразу.</p>
<pre><code># порт 587, шифрование поднимается командой STARTTLS
openssl s_client -connect mail.example.org:587 -starttls smtp -crlf

# порт 465, соединение шифруется с первого байта
openssl s_client -connect mail.example.org:465 -crlf

# быстрый просмотр списка расширений без ручного ввода
printf 'EHLO test.example\r\nQUIT\r\n' | nc mail.example.org 25</code></pre>
<p>Утилита <code>swaks</code> делает то же самое одной строкой и печатает весь диалог, включая коды ответов. Она удобна, когда нужно проверить связку логина, пароля и порта, ничего не настраивая в почтовом клиенте.</p>
<pre><code>swaks --to user@example.com \
      --from sender@example.org \
      --server mail.example.org:587 \
      --auth LOGIN --auth-user sender@example.org \
      --tls</code></pre>
<p>Что мы смотрим в выводе по порядку. Первое: пришло ли приветствие <code>220</code>, потому что его отсутствие означает проблему с самим соединением. Второе: какие расширения перечислены в ответе на <code>EHLO</code>. Третье: прошла ли авторизация, код <code>235</code> подтверждает успех. Четвёртое: приняты ли <code>MAIL FROM</code> и <code>RCPT TO</code>. Пятое: какой код пришёл после точки, завершающей <code>DATA</code>.</p>
<p>Когда отправка идёт с нескольких машин или через посредника, к этому списку добавляется шестой пункт: адрес, который увидела принимающая сторона. Он читается по нижней строке <code>Received</code> в доставленном письме. Схему с сокетным туннелем и разными исходящими адресами закрывает <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с SOCKS4 и SOCKS5 на выбор</a>, а доступ к самому пулу оформляется как <a href="https://iprazon.com/proxy/privatnye">приватный доступ к общему списку адресов</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chem-smtp-otlichaetsya-ot-imap-i-pop3">Чем SMTP отличается от IMAP и POP3?</h3>
<p>SMTP занимается только передачей письма вперёд по цепочке: от клиента на сервер и от сервера к серверу. Забор писем из ящика идёт по IMAP или POP3, это отдельные протоколы со своими портами и своей логикой. Почтовый клиент держит оба направления одновременно: по SMTP отправляет, по IMAP читает.</p>
<h3 id="pochemu-pismo-prinyali-s-kodom-250-no-ono-ne">Почему письмо приняли с кодом 250, но оно не появилось у получателя?</h3>
<p>Код <code>250</code> после завершения <code>DATA</code> означает, что сервер взял письмо в очередь и отвечает за него дальше. Что произойдёт потом, зависит от следующих участков: письмо может уйти в спам по итогам проверок DKIM и DMARC, попасть под фильтр содержимого или вернуться отчётом о недоставке. Разбор идёт по логам сервера, где письмо ищется по идентификатору очереди из ответа.</p>
<h3 id="podoydut-li-vashi-proksi-pod-moyu-pochtovuyu">Подойдут ли ваши прокси под мою почтовую задачу?</h3>
<p>Заранее предугадать поведение каждого почтового сервера и каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем софте, и его результат отвечает на вопрос точнее любого описания. Порядок запуска короткий: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси.</p>
<h3 id="kakoy-tip-proksi-vy-daete-dlya-raboty-s-poch">Какой тип прокси вы даёте для работы с почтовыми портами?</h3>
<p>В пакете IPv4 и SOCKS5 доступны SOCKS4 и SOCKS5 на выбор, рекомендуем SOCKS5. Пул держится в районе 12 000 активных адресов, список обновляется в реальном времени и выдаётся в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code> ссылкой или файлом. Трафик безлимитный, пакет включается примерно за 5 минут после оформления.</p>
<p>Соседние разборы по протоколам собраны рядом: <a href="/protokoly/imap-i-pop3/">приём почты по IMAP и POP3</a> с разбором папок и флагов, <a href="/protokoly/tunnel-connect/">туннель CONNECT для шифрованных соединений</a> и сравнение вариантов в материале <a href="/protokoly/http-https-socks/">HTTP, HTTPS, SOCKS4 и SOCKS5</a>. Практическая настройка почтовых программ и серверных скриптов описана отдельно в разделе про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/chto-takoe-smtp/">https://kupit-proxy-ipv4.ru/protokoly/chto-takoe-smtp/</a></p>]]></content:encoded></item>
<item><title>SMTP через прокси: как отправлять почту с нужного адреса</title><link>https://kupit-proxy-ipv4.ru/protokoly/smtp-cherez-proxy/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/smtp-cherez-proxy/</guid><description>Отправка почты через посредника работает по SOCKS5: почтовый клиент или скрипт открывает TCP-соединение до порта 587, 465 или 25 внутри сокетного туннеля, и…</description><content:encoded><![CDATA[
<p class="vvod">Отправка почты через посредника работает по SOCKS5: почтовый клиент или скрипт открывает TCP-соединение до порта 587, 465 или 25 внутри сокетного туннеля, и принимающая сторона видит адрес прокси. HTTP-прокси для этого не подходит по устройству, поэтому в настройках почтовых программ поле называется именно SOCKS.</p>
<p>Ниже собран рабочий порядок: почему сокетный туннель обязателен, что происходит на уровне рукопожатия SOCKS5, как прописать посредника в Thunderbird и The Bat, как отправить письмо из кода на python и PHP, как поднять локальный туннель для программы без поддержки посредника, что смотреть при отказе соединения и как убедиться по заголовку Received, что письмо ушло с ожидаемого адреса. Сам протокол разобран отдельно в материале про <a href="/protokoly/chto-takoe-smtp/">устройство SMTP и путь письма</a>.</p>
<h2 id="pochemu-dlya-smtp-berut-socks5">Почему для SMTP берут SOCKS5</h2>
<p>SOCKS5 работает на уровне TCP-сокета. Клиент говорит посреднику одну вещь: «соедини меня с этим хостом на этом порту», и дальше байты идут в обе стороны без разбора. Что внутри туннеля, посреднику безразлично: почтовые команды, поток IMAP, произвольный двоичный обмен. Для протокола вроде SMTP такая прозрачность и нужна, потому что почтовый сеанс начинается с приветствия сервера, которое приходит до всякой команды клиента.</p>
<p>Второй довод касается портов. Почтовые порты 587, 465 и 25 к веб-трафику отношения не имеют, и посредник, который умеет работать только по знакомым ему схемам, туда не пойдёт. SOCKS5 принимает номер порта параметром запроса и открывает соединение на любой из них. Разбор самих портов и того, какой выбрать под задачу, лежит в отдельном материале про <a href="/protokoly/pochtovye-porty/">выбор почтового порта 25, 465 или 587</a>.</p>
<p>Третий довод про имена. В SOCKS5 клиент вправе передать посреднику доменное имя вместо адреса, и резолвинг произойдёт на стороне прокси. В библиотеках это включается флагом <code>rdns</code>, в схемах curl буквой <code>h</code> в конце: <code>socks5h://</code>. Для почты это удобно, потому что запросы к DNS уходят по тому же маршруту, что и соединение.</p>
<p>Мы отдаём пакеты, где на одних и тех же адресах доступны SOCKS4 и SOCKS5, и для почтовых задач рекомендуем пятую версию: она умеет авторизацию логином и паролем и принимает доменные имена. Пакет оформляется там, где описаны <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для почтовых программ</a>.</p>
<div class="tabl"><table><thead><tr><th>Свойство</th><th>SOCKS5</th><th>SOCKS4</th><th>HTTP-прокси</th></tr></thead><tbody><tr><td>Произвольный TCP-порт</td><td>Да</td><td>Да</td><td>Только через <code>CONNECT</code>, и порт часто ограничен</td></tr><tr><td>Передача доменного имени посреднику</td><td>Да</td><td>Нет, требует адрес</td><td>Да</td></tr><tr><td>Авторизация логином и паролем</td><td>Да</td><td>Только идентификатор пользователя</td><td>Да, через <code>Proxy-Authorization</code></td></tr><tr><td>Ждёт первым байт от клиента</td><td>Нет</td><td>Нет</td><td>Да, ждёт строку запроса</td></tr><tr><td>Пригоден для сеанса SMTP</td><td>Да</td><td>Частично</td><td>Нет</td></tr></tbody></table></div>
<h2 id="kak-ustroen-http-proksi-i-pochemu-pochtovyy-">Как устроен HTTP-прокси и почему почтовый сеанс идёт мимо него</h2>
<p>HTTP-прокси разбирает то, что через него проходит. Клиент присылает строку запроса вида <code>GET http://example.org/page HTTP/1.1</code>, посредник читает её, вынимает адрес, ставит свои заголовки и делает запрос сам. Работа идёт с сообщениями протокола HTTP, и без такой строки посредник не понимает, что от него хотят.</p>
<p>SMTP устроен наоборот. Первым говорит сервер: сразу после установки TCP-соединения он присылает приветствие <code>220 mail.example.org ESMTP</code>. Клиент молчит, пока не увидит эту строку. HTTP-прокси в этот момент сидит и ждёт от клиента запрос, которого никогда не будет, и через несколько десятков секунд соединение закрывается по таймауту. Даже если клиент заговорит первым, команда <code>EHLO client.example.net</code> для разборщика HTTP выглядит мусором, и в ответ прилетает <code>400 Bad Request</code>.</p>
<p>Остаётся вариант с методом <code>CONNECT</code>, тем самым, которым HTTP-прокси открывает туннель для HTTPS. Технически туннель получается сырым, и почтовый сеанс по нему пройти способен. Практически почти все реализации ограничивают список портов, куда <code>CONNECT</code> разрешён, обычно это 443 и иногда 563, поэтому запрос на 587 отбивается кодом <code>403 Forbidden</code>. Устройство этого метода подробно разобрано в статье про <a href="/protokoly/tunnel-connect/">туннель CONNECT и шифрованные соединения</a>.</p>
<p>Вывод прямой: почтовый клиент, в настройках которого стоит HTTP-посредник, письмо не отправит. Поле SOCKS в тех же настройках закрывает задачу сразу. Мы держим на одних и тех же адресах все четыре схемы, поэтому переезд почтовой задачи на сокетный туннель не требует нового пакета. Отдельно отметим, что <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP для браузеров и парсеров</a> остаются удобным вариантом для веб-запросов, и в пакете доступны обе схемы на одних адресах, поэтому переключение занимает одну строку в настройках.</p>
<h2 id="rukopozhatie-socks5-chto-proishodit-do-pervo">Рукопожатие SOCKS5: что происходит до первой команды SMTP</h2>
<p>Между открытием сокета и приветствием почтового сервера проходит короткий обмен. Понимание его структуры экономит время при разборе отказов, потому что ошибка возвращается одним байтом с понятным значением.</p>
<p>Сначала клиент присылает список способов авторизации: версия <code>0x05</code>, число способов, сами способы. Значение <code>0x00</code> означает работу без логина, <code>0x02</code> авторизацию логином и паролем. Посредник выбирает один и отвечает двумя байтами. Если выбран <code>0x02</code>, следом идёт отдельный обмен по подпротоколу авторизации: версия <code>0x01</code>, длина логина, логин, длина пароля, пароль. Ответ <code>0x01 0x00</code> подтверждает успех. Мы советуем смотреть именно на эти два байта, когда клиент молча закрывает соединение.</p>
<p>Дальше идёт сам запрос: версия, команда <code>0x01</code> для CONNECT, зарезервированный ноль, тип адреса, адрес и порт двумя байтами. Тип <code>0x01</code> это адрес IPv4, тип <code>0x03</code> доменное имя с длиной впереди. Посредник открывает соединение до цели и отвечает кодом результата. Только после этого в туннель приходит <code>220</code> от почтового сервера, и начинается обычный сеанс SMTP.</p>
<div class="tabl"><table><thead><tr><th>Код ответа</th><th>Значение</th><th>Что означает на практике</th></tr></thead><tbody><tr><td><code>0x00</code></td><td>Успех</td><td>Туннель открыт, дальше идёт почтовый сеанс</td></tr><tr><td><code>0x01</code></td><td>Общий отказ посредника</td><td>Внутренняя ошибка, стоит повторить на другом адресе из списка</td></tr><tr><td><code>0x02</code></td><td>Соединение запрещено правилами</td><td>Логин и пароль не приняты либо адрес машины не привязан</td></tr><tr><td><code>0x03</code></td><td>Сеть недоступна</td><td>Маршрута до сети почтового сервера нет</td></tr><tr><td><code>0x04</code></td><td>Хост недоступен</td><td>Имя резолвится, машина не отвечает</td></tr><tr><td><code>0x05</code></td><td>Целевой хост отклонил соединение</td><td>Порт закрыт на стороне почтового сервера</td></tr><tr><td><code>0x07</code></td><td>Команда не поддерживается</td><td>Клиент пробует <code>BIND</code> или <code>UDP ASSOCIATE</code> вместо <code>CONNECT</code></td></tr><tr><td><code>0x08</code></td><td>Тип адреса не поддерживается</td><td>Клиент шлёт адрес формата, который посредник не принимает</td></tr></tbody></table></div>
<p>Быстрая проверка туннеля до почтового порта делается одной командой. Ответ с приветствием <code>220</code> подтверждает, что путь открыт целиком.</p>
<pre><code># проверяем, что через SOCKS5 доходим до порта 587
curl -v --socks5-hostname user5521:pf39kd@185.24.87.14:8000 \
     smtp://mail.example.org:587 --mail-rcpt user@example.com \
     --mail-from sender@example.org --upload-file /dev/null

# и заодно смотрим, какой адрес видит внешний сервис
curl -s -x socks5h://185.24.87.14:8000 https://ifconfig.me</code></pre>
<h2 id="nastroyka-v-pochtovom-kliente-thunderbird-i-">Настройка в почтовом клиенте: Thunderbird и The Bat</h2>
<p>В Thunderbird посредник задаётся один на всю программу и действует на отправку и приём сразу. Путь такой: «Настройки», раздел «Основные», в самом низу страницы блок «Прокси-сервер», кнопка «Настроить». В открывшемся окне выбирается «Ручная настройка», заполняется поле «Узел SOCKS» и порт, ставится переключатель «SOCKS v5». Ниже стоит включить пункт про запросы к DNS через SOCKS v5, тогда имена почтовых серверов резолвятся на стороне посредника.</p>
<p>Отдельного поля под логин и пароль в этом окне нет: при первом соединении Thunderbird спрашивает их всплывающим окном и запоминает в хранилище паролей. Спокойнее работает другая схема, без ввода вовсе. В кабинете указывается адрес рабочей машины, доступ открывается по привязке, и список берётся в формате <code>IP:PORT</code>. В пакет входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках, поэтому переезд на другую машину занимает минуту.</p>
<p>The Bat держит настройки посредника отдельно для каждого ящика, и это удобнее при работе с несколькими адресами отправки. Путь: «Ящик», «Свойства почтового ящика», раздел «Транспорт». В блоке отправки рядом с адресом сервера SMTP стоит кнопка настроек соединения, внутри выбирается тип «SOCKS v5», вписываются адрес посредника, порт, логин и пароль. Приём настраивается тем же порядком в блоке получения, и там же выбирается схема для IMAP.</p>
<div class="tabl"><table><thead><tr><th>Программа</th><th>Где искать настройку</th><th>Область действия</th><th>Логин и пароль</th></tr></thead><tbody><tr><td>Thunderbird</td><td>Настройки, Основные, блок прокси внизу</td><td>Вся программа целиком</td><td>Запрашивается окном при первом соединении</td></tr><tr><td>The Bat</td><td>Свойства ящика, Транспорт</td><td>Отдельно для каждого ящика</td><td>Поля прямо в окне настройки</td></tr><tr><td>Outlook</td><td>Встроенного поля нет</td><td>Через локальный туннель или системный посредник</td><td>Задаётся в туннеле</td></tr><tr><td>Почтовые скрипты</td><td>Библиотека или переменные окружения</td><td>Отдельно для каждого процесса</td><td>В коде или в конфиге</td></tr></tbody></table></div>
<p>Порядок проверки после настройки одинаков для любой программы, и мы проходим его целиком даже на знакомом софте: отправить письмо на свой второй ящик, открыть исходный текст письма и прочитать нижнюю строку <code>Received</code>. Разбор строки подключения по полям, включая порядок логина, пароля и порта, лежит в материале про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения по полям</a>.</p>
<h2 id="python-pysocks-i-smtplib">Python: PySocks и smtplib</h2>
<p>Стандартный <code>smtplib</code> про посредников ничего не знает, поэтому туннель подставляется на уровне сокета. Библиотека PySocks ставится как <code>pip install PySocks</code> и даёт класс <code>socksocket</code>, совместимый с обычным сокетом.</p>
<p>Первый способ подменяет сокет глобально для всего модуля. Он короткий и подходит скрипту, который занят одной отправкой.</p>
<pre><code>import smtplib, socks, ssl
from email.message import EmailMessage

socks.set_default_proxy(socks.SOCKS5, "185.24.87.14", 8000,
                        rdns=True, username="user5521", password="pf39kd")
socks.wrap_module(smtplib)

msg = EmailMessage()
msg["From"] = "sender@example.org"
msg["To"] = "user@example.com"
msg["Subject"] = "Proxy test"
msg.set_content("Sent through a SOCKS5 tunnel.")

with smtplib.SMTP("mail.example.org", 587, timeout=30) as srv:
    srv.ehlo()
    srv.starttls(context=ssl.create_default_context())
    srv.ehlo()
    srv.login("sender@example.org", "mailpassword")
    srv.send_message(msg)
    print("queued")</code></pre>
<p>Второй способ аккуратнее: посредник задаётся только для своего соединения, остальной код процесса работает напрямую. Достаточно переопределить метод <code>_get_socket</code> у класса <code>SMTP</code>.</p>
<pre><code>import smtplib, socks, ssl
from email.message import EmailMessage

PROXY = ("185.24.87.14", 8000, "user5521", "pf39kd")

class ProxiedSMTP(smtplib.SMTP):
    def _get_socket(self, host, port, timeout):
        s = socks.socksocket()
        s.set_proxy(socks.SOCKS5, PROXY[0], PROXY[1],
                    rdns=True, username=PROXY[2], password=PROXY[3])
        s.settimeout(timeout)
        s.connect((host, port))
        return s

msg = EmailMessage()
msg["From"] = "sender@example.org"
msg["To"] = "user@example.com"
msg["Subject"] = "Proxy test 2"
msg.set_content("Second variant, per-connection proxy.")

srv = ProxiedSMTP("mail.example.org", 587, timeout=30)
srv.set_debuglevel(1)
srv.starttls(context=ssl.create_default_context())
srv.login("sender@example.org", "mailpassword")
srv.send_message(msg)
srv.quit()</code></pre>
<p>Строка <code>set_debuglevel(1)</code> печатает весь диалог с сервером, включая коды ответов. Мы держим её включённой при первой отладке и убираем, когда сеанс проходит ровно. Для порта 465 класс берётся другой, <code>SMTP_SSL</code>, и метод <code>starttls</code> не вызывается, потому что шифрование там поднимается с первого байта.</p>
<p>Отдельно про таймауты: значение <code>timeout=30</code> относится к операциям с сокетом уже после установки туннеля. Само рукопожатие SOCKS5 идёт быстро, при этом задержка посредника складывается с задержкой почтового сервера, поэтому значения ниже десяти секунд на реальных отправках лучше не ставить.</p>
<h2 id="php-otpravka-cherez-socks5">PHP: отправка через SOCKS5</h2>
<p>В PHP потоковые функции про SOCKS ничего не знают, поэтому прямой путь идёт через расширение cURL: оно умеет протокол SMTP и умеет ходить через сокетный туннель. Получается компактный отправщик без внешних зависимостей.</p>
<pre><code>&lt;?php
$body = "From: Sender &lt;sender@example.org&gt;\r\n"
      . "To: User &lt;user@example.com&gt;\r\n"
      . "Subject: Proxy test\r\n"
      . "\r\n"
      . "Sent through a SOCKS5 tunnel.\r\n";

$fp = fopen('php://temp', 'r+');
fwrite($fp, $body);
rewind($fp);

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            =&gt; 'smtp://mail.example.org:587',
    CURLOPT_PROXY          =&gt; '185.24.87.14:8000',
    CURLOPT_PROXYTYPE      =&gt; CURLPROXY_SOCKS5_HOSTNAME,
    CURLOPT_PROXYUSERPWD   =&gt; 'user5521:pf39kd',
    CURLOPT_USE_SSL        =&gt; CURLUSESSL_ALL,
    CURLOPT_USERNAME       =&gt; 'sender@example.org',
    CURLOPT_PASSWORD       =&gt; 'mailpassword',
    CURLOPT_MAIL_FROM      =&gt; '&lt;sender@example.org&gt;',
    CURLOPT_MAIL_RCPT      =&gt; ['&lt;user@example.com&gt;'],
    CURLOPT_UPLOAD         =&gt; true,
    CURLOPT_READDATA       =&gt; $fp,
    CURLOPT_INFILESIZE     =&gt; strlen($body),
    CURLOPT_TIMEOUT        =&gt; 45,
    CURLOPT_VERBOSE        =&gt; true,
]);

curl_exec($ch);
if (curl_errno($ch)) {
    echo 'ошибка: ' . curl_error($ch) . PHP_EOL;
} else {
    echo 'код ответа: ' . curl_getinfo($ch, CURLINFO_RESPONSE_CODE) . PHP_EOL;
}
curl_close($ch);
fclose($fp);</code></pre>
<p>Константа <code>CURLPROXY_SOCKS5_HOSTNAME</code> включает резолвинг на стороне посредника, <code>CURLUSESSL_ALL</code> требует обязательного перехода в TLS командой <code>STARTTLS</code>. Для порта 465 схема в адресе меняется на <code>smtps://</code>, и параметр <code>CURLOPT_USE_SSL</code> тогда не нужен.</p>
<p>Популярные библиотеки вроде PHPMailer и Symfony Mailer собственной поддержки SOCKS не имеют: они работают через потоковые сокеты PHP. Их подключают к посреднику вторым способом, через локальный туннель, и в настройках библиотеки указывают адрес <code>127.0.0.1</code> с локальным портом. Такая схема разобрана в следующем разделе, и она же выручает с готовым софтом, где полей посредника попросту нет.</p>
<h2 id="lokalnyy-tunnel-dlya-programm-bez-podderzhki">Локальный туннель для программ без поддержки посредника</h2>
<p>Идея простая. На рабочей машине поднимается слушающий порт, всё пришедшее на него уходит через SOCKS5 до почтового сервера. Программа настраивается на <code>127.0.0.1</code> с этим портом и про посредника ничего не знает.</p>
<p>Самый короткий вариант на Linux и macOS даёт <code>socat</code> начиная с версии 1.7.4, где появилась поддержка пятой версии SOCKS.</p>
<pre><code># слушаем 2587 локально, ведём на порт 587 почтового сервера через SOCKS5
socat TCP4-LISTEN:2587,bind=127.0.0.1,reuseaddr,fork \
  SOCKS5-CONNECT:185.24.87.14:8000:mail.example.org:587

# проверяем туннель, приветствие 220 должно прийти сразу
printf 'EHLO test.example\r\nQUIT\r\n' | nc 127.0.0.1 2587</code></pre>
<p>Второй вариант заворачивает в туннель весь процесс целиком, включая запросы к DNS. Утилита <code>proxychains4</code> читает конфиг и подменяет системные вызовы сети у запущенной под ней программы.</p>
<pre><code># proxychains.conf
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks5 185.24.87.14 8000 user5521 pf39kd</code></pre>
<pre><code>proxychains4 -f ./proxychains.conf php send.php
proxychains4 -f ./proxychains.conf python mailer.py</code></pre>
<p>На Windows ту же работу берут на себя программы вроде Proxifier: в них задаётся правило по имени исполняемого файла, и весь трафик выбранного приложения уходит в туннель. Так подключают Outlook и старые почтовые программы без полей посредника. Адреса для туннеля мы берём из общей выдачи: они одинаковы для любой схемы, и <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет прокси IPv4 с доступом к пулу</a> обслуживает и почту, и остальные задачи машины.</p>
<p>Один момент про TLS. Когда программа ходит на локальный порт, имя сервера в сертификате останется прежним, потому что туннель передаёт байты без вмешательства. Некоторые клиенты сверяют имя с тем, что вписано в настройках, и тогда в поле сервера ставится настоящее имя, а маршрут до <code>127.0.0.1</code> задаётся строкой в файле <code>hosts</code>.</p>
<h2 id="otkaz-soedineniya-na-port-chto-smotret-po-po">Отказ соединения на порт: что смотреть по порядку</h2>
<p>Разбор идёт снизу вверх, от сети к почтовому серверу. Порядок проверок такой.</p>
<p>Первое: доходит ли соединение до самого посредника. Команда <code>curl -s -x socks5h://адрес:порт https://ifconfig.me</code> возвращает адрес из пула, если туннель жив. Пустой ответ или таймаут означают, что дальше идти незачем.</p>
<p>Второе: принята ли авторизация. Отказ <code>0x02</code> в рукопожатии SOCKS5 указывает на пару логина и пароля либо на непривязанный адрес машины. Мы проверяем это по кабинету: список выдаётся в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, и второй формат нужен там, где адрес машины меняется. Если привязано два адреса, лимит потоков делится между ними пополам, это отдельно учитывается при массовых отправках.</p>
<p>Третье: открыт ли целевой порт. Ответ <code>0x05</code> от посредника означает, что почтовый сервер отклонил соединение, ответ <code>0x04</code> что машина не отвечает. Порт 25 у части почтовых систем закрыт для входящих соединений от кого попало, поэтому отправка с авторизацией идёт на 587 или 465.</p>
<p>Четвёртое: доходит ли приветствие. Туннель открылся, приветствия <code>220</code> нет: почти всегда это неверный порт или требование немедленного TLS на порту, где ожидался открытый старт.</p>
<div class="tabl"><table><thead><tr><th>Что видно</th><th>Вероятная причина</th><th>Что делаем</th></tr></thead><tbody><tr><td>Таймаут до посредника</td><td>Адрес из старого списка</td><td>Перечитываем выдачу, список обновляется в реальном времени</td></tr><tr><td>Ответ <code>0x02</code> в рукопожатии</td><td>Логин, пароль или привязка</td><td>Сверяем формат строки и адрес в настройках кабинета</td></tr><tr><td>Ответ <code>0x05</code> от посредника</td><td>Целевой порт закрыт</td><td>Пробуем 587 и 465 вместо 25</td></tr><tr><td>Туннель есть, <code>220</code> нет</td><td>Порт ждёт TLS с первого байта</td><td>Переходим на <code>SMTP_SSL</code> или схему <code>smtps://</code></td></tr><tr><td><code>535 Authentication failed</code></td><td>Пара для почтового ящика</td><td>Проверяем логин ящика, туннель тут ни при чём</td></tr><tr><td><code>550</code> после <code>RCPT TO</code></td><td>Отказ почтового сервера</td><td>Разбираем по кодам ответа на стороне почты</td></tr></tbody></table></div>
<p>Отдельная строка про потоки. Массовая отправка открывает много параллельных соединений, и стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются, поэтому рост нагрузки закрывается переходом на старший вариант. Трафик безлимитный, объём писем на выбор пакета не влияет, и удобнее всего работать через <a href="https://iprazon.com/proxy/servernye">приватные серверные адреса из общего пула</a>.</p>
<h2 id="proverka-po-received-pismo-ushlo-s-ozhidaemo">Проверка по Received: письмо ушло с ожидаемого адреса</h2>
<p>Финальная проверка делается на живом письме. Отправляем письмо на ящик, к которому есть доступ, открываем исходный текст и читаем самую нижнюю строку <code>Received</code>: она относится к моменту, когда письмо приняли от нашего клиента.</p>
<pre><code>Received: from client.example.net (unknown [185.24.87.14])
        by mail.example.org (Postfix) with ESMTPSA id 7C4E2B9A15
        for &lt;user@example.com&gt;; Tue, 13 Aug 09:22:41 +0300</code></pre>
<p>В квадратных скобках стоит адрес, с которого пришло соединение, и его подставляет сам почтовый сервер. Именно он должен совпасть с адресом посредника из списка. Имя перед скобками берётся из команды <code>EHLO</code> и задаётся клиентом, поэтому доверять ему нельзя. Метка <code>ESMTPSA</code> подтверждает, что сеанс шёл с шифрованием и авторизацией.</p>
<p>Где смотреть исходный текст: в Thunderbird сочетание клавиш открывает исходник письма, в веб-интерфейсах пункт меню называется «Показать оригинал» или «Свойства письма». Некоторые почтовые сервисы прячут нижние строки <code>Received</code> у писем, отправленных через их же веб-интерфейс, поэтому проверять удобнее на ящике другого домена.</p>
<p>Три величины, которые мы фиксируем при проверке: адрес в нижней строке <code>Received</code>, время сеанса и идентификатор очереди из поля <code>id</code>. По этой тройке письмо потом находится в логах почтового сервера за секунды. Если адрес совпал с ожидаемым, настройка закончена, и дальше остаётся следить за самими адресами: пул держится в районе 12 000 активных, ротация внутри него автоматическая, поэтому перед крупной рассылкой список перечитывается заново. Доступ ко всему пулу оформляется на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-socks5">оформить пакет IPv4 и SOCKS5</a>, а список выдаётся ссылкой или файлом.</p>
<p>Заголовки, которые уходят от клиента, проверяются тем же способом. Полезно посмотреть, что видно принимающей стороне помимо адреса, и здесь пригодятся <a href="https://iprazon.com/proxy/anonimnye">адреса без служебных следов посредника</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="pochemu-otpravka-ne-idet-cherez-http-proksi-">Почему отправка не идёт через HTTP-прокси, ведь порт указан верно?</h3>
<p>HTTP-прокси разбирает запросы протокола HTTP и ждёт от клиента строку запроса с заголовками. Почтовый сеанс начинается с приветствия сервера, никакой строки запроса в нём нет, поэтому соединение зависает до таймаута. Сокетный туннель SOCKS5 передаёт байты без разбора, и почтовый сеанс проходит через него целиком.</p>
<h3 id="kakoy-tip-proksi-vy-daete-i-chto-vybrat-dlya">Какой тип прокси вы даёте и что выбрать для почты?</h3>
<p>В пакете IPv4 и SOCKS5 доступны SOCKS4 и SOCKS5 на выбор, рекомендуем пятую версию. Она принимает логин с паролем и умеет резолвить доменные имена на своей стороне. Протоколы HTTP и HTTPS в пакете тоже есть и работают на тех же адресах, их берут под браузерные задачи.</p>
<h3 id="kak-poluchit-spisok-adresov-i-v-kakom-on-vid">Как получить список адресов и в каком он виде?</h3>
<p>Два формата на выбор: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. В кабинете список забирается ссылкой или скачивается файлом, обновление идёт в режиме реального времени. Формат без логина работает вместе с привязкой адреса рабочей машины, в пакет входит одновременная привязка 2 адресов со свободной сменой.</p>
<h3 id="mozhno-li-proverit-svoyu-pochtovuyu-otpravku">Можно ли проверить свою почтовую отправку до покупки?</h3>
<p>Заранее предугадать поведение каждого почтового сервера нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Порядок такой: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси. Пакет после оформления включается примерно за 5 минут.</p>
<p>Рядом лежат соседние разборы по протоколам: <a href="/protokoly/imap-i-pop3/">приём почты по IMAP и POP3 через посредника</a>, <a href="/protokoly/tcp-i-udp/">что проходит по TCP и UDP через SOCKS5</a> и сравнение схем в материале про <a href="/protokoly/http-https-socks/">различия HTTP, HTTPS, SOCKS4 и SOCKS5</a>. Подключение обычных программ и серверных сервисов описано в разделе про <a href="/podklyuchenie/v-programmah/">настройку в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/smtp-cherez-proxy/">https://kupit-proxy-ipv4.ru/protokoly/smtp-cherez-proxy/</a></p>]]></content:encoded></item>
<item><title>Порты 25, 465 и 587: какой выбрать для отправки почты</title><link>https://kupit-proxy-ipv4.ru/protokoly/pochtovye-porty/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/pochtovye-porty/</guid><description>Для отправки писем со стороны клиента берут порт 587 с переходом в шифрование по команде STARTTLS либо порт 465, где шифрование поднимается сразу после…</description><content:encoded><![CDATA[
<p class="vvod">Для отправки писем со стороны клиента берут порт 587 с переходом в шифрование по команде STARTTLS либо порт 465, где шифрование поднимается сразу после установки соединения. Порт 25 закреплён за передачей писем между почтовыми серверами, и у большинства провайдеров и хостеров исходящие соединения на него для клиентов закрыты.</p>
<p>Ниже разобрано, за что отвечает каждый номер, как выглядит обмен на 465 и на 587 построчно, чем implicit TLS отличается от STARTTLS на уровне команд, как проверить доступность порта тремя разными командами и что делать, когда соединение отбивается. В конце порты приёма почты и то, как номер записывается в настройках программы.</p>
<h2 id="za-chto-otvechaet-kazhdyy-port">За что отвечает каждый порт</h2>
<p>Мы разбираем три номера в том порядке, в каком они встречаются на пути письма. Все три закреплены за разными участками этого пути. Порт 25 обслуживает перегон между почтовыми серверами: отправляющий сервер находит MX-запись домена получателя и стучится на 25 к тому хосту, который в ней указан. Порты 465 и 587 обслуживают submission, то есть сдачу письма от программы пользователя своему серверу. Разница по смыслу простая: на 25 сервер разговаривает с сервером, на 465 и 587 программа разговаривает со своим сервером и предъявляет логин.</p>
<div class="tabl"><table><thead><tr><th>Порт</th><th>Назначение</th><th>Шифрование</th><th>Кто им пользуется</th></tr></thead><tbody><tr><td>25</td><td>Передача письма между почтовыми серверами по MX</td><td>Открытое начало, STARTTLS по согласию сторон</td><td>Почтовые серверы MTA между собой</td></tr><tr><td>465</td><td>Сдача письма от клиента, имя службы submissions</td><td>TLS поднимается сразу, implicit TLS</td><td>Почтовые программы, скрипты рассылок, CRM</td></tr><tr><td>587</td><td>Сдача письма от клиента, имя службы submission</td><td>Открытое начало, переход по команде STARTTLS</td><td>Почтовые программы, серверные скрипты, панели</td></tr><tr><td>2525</td><td>Запасной номер для сдачи писем у части сервисов</td><td>Обычно STARTTLS, реже открытое соединение</td><td>Клиенты, у которых 587 прикрыт хостером</td></tr></tbody></table></div>
<p>Разделение на submission и перегон между серверами придумано ради того, чтобы сервер мог по номеру порта понять, с кем говорит. На 587 и 465 он ждёт авторизацию и принимает письма только от своих пользователей. На 25 он принимает почту для собственных доменов от кого угодно снаружи, поэтому там действуют совсем другие проверки: обратная зона, SPF, ограничение частоты, серые списки.</p>
<p>Порт 2525 в реестре IANA за почтой не закреплён. Часть сервисов слушает его дополнительно, чтобы клиенты с прикрытым 587 могли отправлять письма без переезда. Обмен на нём идёт по тем же правилам, что и на 587.</p>
<h2 id="port-25-peredacha-mezhdu-pochtovymi-serveram">Порт 25: передача между почтовыми серверами</h2>
<p>Сеанс на 25 начинается открытым текстом. Сервер отвечает баннером <code>220</code>, клиентская сторона представляется командой <code>EHLO</code> и получает список расширений. Если оба конца поддерживают <code>STARTTLS</code>, обмен переходит в шифрование, и дальше письмо идёт внутри туннеля. Согласие тут добровольное: когда принимающая сторона расширение не объявила, письмо уйдёт открытым текстом.</p>
<pre><code>220 mx.example.net ESMTP Postfix
EHLO relay.example.org
250-mx.example.net
250-PIPELINING
250-SIZE 52428800
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 8BITMIME
MAIL FROM:&lt;sender@example.org&gt;
250 2.1.0 Ok
RCPT TO:&lt;user@example.net&gt;
250 2.1.5 Ok
DATA
354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;</code></pre>
<p>Ключевая деталь для практика: команды <code>AUTH</code> в этом сеансе нет. Принимающий сервер берёт письмо потому, что адрес получателя относится к его домену. Попытка отправить через чужой 25 письмо на сторонний домен закончится ответом <code>554 5.7.1 Relay access denied</code>.</p>
<p>Исходящий 25 массово прикрыт у хостеров, у облачных площадок и у домашних провайдеров. Причина в борьбе с рассылками с заражённых машин. Симптом узнаваемый: соединение висит до таймаута, отказа при этом не приходит вовсе, потому что пакеты отбрасываются молча. Проверить догадку легко, достаточно попробовать 587 или 465 на том же хосте: когда они отвечают за доли секунды, а 25 висит, вопрос закрыт.</p>
<p>Поэтому серверные скрипты и почтовые программы на 25 наружу не ходят. Сдача письма идёт на submission-порт своего сервера, а уже он от своего адреса перегоняет письмо дальше по 25.</p>
<h2 id="port-465-soedinenie-srazu-v-shifrovanii">Порт 465: соединение сразу в шифровании</h2>
<p>На 465 шифрование поднимается до первой почтовой команды. TCP-соединение установилось, и клиент немедленно отправляет TLS ClientHello. Сервер отвечает своим сертификатом, стороны согласуют шифр, и только внутри готового туннеля приходит баннер <code>220</code>. Такой порядок называют implicit TLS: договариваться о шифровании не нужно, оно подразумевается самим номером порта.</p>
<pre><code>openssl s_client -connect smtp.example.net:465 -servername smtp.example.net -quiet
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
220 smtp.example.net ESMTP ready
EHLO client.example.org
250-smtp.example.net
250-AUTH PLAIN LOGIN
250-SIZE 52428800
250 8BITMIME
AUTH LOGIN
334 VXNlcm5hbWU6</code></pre>
<p>Обратите внимание на строку <code>250-AUTH</code>: сервер объявляет доступные механизмы авторизации сразу, потому что канал уже защищён. Логин и пароль уходят внутри туннеля, перехватить их по дороге нечем.</p>
<p>У 465 своя история. Номер выделяли под SMTPS, затем отзывали, затем возвращали уже под именем submissions, и в промежутке часть документации называла его устаревшим. Сегодня это полноценный порт сдачи писем, его слушают Postfix через <code>smtps</code> в <code>master.cf</code>, Exim через <code>tls_on_connect_ports</code>, Dovecot, а также крупные почтовые сервисы. При настройке нового клиента 465 удобен именно предсказуемостью: шифрование либо поднялось, либо соединения нет.</p>
<p>Единственное, что нужно проверить перед выбором 465: слушает ли его ваш сервер. Часть площадок оставляет только 587. Одна команда <code>openssl s_client</code> отвечает на этот вопрос за секунду.</p>
<h2 id="port-587-otpravka-ot-klienta-cherez-starttls">Порт 587: отправка от клиента через STARTTLS</h2>
<p>Сеанс на 587 начинается открытым текстом и переходит в шифрование по явной команде. Порядок такой: сервер шлёт баннер <code>220</code>, клиент представляется <code>EHLO</code>, сервер перечисляет расширения, клиент отправляет <code>STARTTLS</code>, сервер отвечает <code>220 2.0.0 Ready to start TLS</code>, стороны выполняют рукопожатие. После рукопожатия клиент обязан повторить <code>EHLO</code>, потому что список расширений внутри шифрования другой.</p>
<pre><code>openssl s_client -starttls smtp -connect smtp.example.net:587 -quiet
220 smtp.example.net ESMTP ready
EHLO client.example.org
250-smtp.example.net
250-PIPELINING
250-SIZE 52428800
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 8BITMIME
STARTTLS
220 2.0.0 Ready to start TLS</code></pre>
<p>Повторный <code>EHLO</code> часто пропускают при ручной отладке и потом гадают, почему <code>AUTH</code> отсутствует в списке. Механизмы авторизации многие серверы прячут до подъёма шифрования: пока канал открыт, строка <code>250-AUTH</code> в ответе отсутствует, после рукопожатия она появляется. Postfix делает это директивой <code>smtpd_tls_auth_only = yes</code>.</p>
<p>Второе поведение, о котором полезно знать: сервер на 587 обычно настроен требовать авторизацию для всех отправок. Попытка выполнить <code>MAIL FROM</code> без <code>AUTH</code> возвращает <code>530 5.7.0 Authentication required</code>. Это нормальный ответ, он говорит о правильно настроенном submission-порту.</p>
<p>Мы в своей практике держим 587 как основной вариант для почтовых программ и серверных скриптов: его поддерживают все распространённые почтовые сервисы, он редко попадает под фильтры хостеров, и большинство библиотек умеют работать с ним из коробки.</p>
<h2 id="implicit-tls-i-starttls-raznica-na-urovne-ob">Implicit TLS и STARTTLS: разница на уровне обмена</h2>
<p>Разница видна по первому пакету после установки TCP-соединения. На 465 первым идёт TLS ClientHello от клиента. На 587 первым идёт текстовый баннер от сервера, и до команды <code>STARTTLS</code> весь обмен читается любым наблюдателем на пути.</p>
<div class="tabl"><table><thead><tr><th>Шаг</th><th>Порт 465, implicit TLS</th><th>Порт 587, STARTTLS</th></tr></thead><tbody><tr><td>1</td><td>Установка TCP-соединения</td><td>Установка TCP-соединения</td></tr><tr><td>2</td><td>Клиент шлёт TLS ClientHello</td><td>Сервер шлёт баннер <code>220</code> открытым текстом</td></tr><tr><td>3</td><td>Рукопожатие TLS, проверка сертификата</td><td>Клиент шлёт <code>EHLO</code>, получает список расширений</td></tr><tr><td>4</td><td>Внутри туннеля приходит баннер <code>220</code></td><td>Клиент шлёт <code>STARTTLS</code>, получает <code>220 Ready</code></td></tr><tr><td>5</td><td><code>EHLO</code>, полный список расширений с <code>AUTH</code></td><td>Рукопожатие TLS, проверка сертификата</td></tr><tr><td>6</td><td><code>AUTH</code>, <code>MAIL FROM</code>, <code>RCPT TO</code>, <code>DATA</code></td><td>Повторный <code>EHLO</code>, затем <code>AUTH</code> и <code>MAIL FROM</code></td></tr></tbody></table></div>
<p>Из этой таблицы следуют два практических вывода. Первый: на 587 список расширений виден дважды, и содержимое двух списков отличается. Второй: на 587 объявление <code>STARTTLS</code> идёт открытым текстом, поэтому в почтовых программах существует настройка «требовать шифрование». Она заставляет клиента разорвать сеанс, когда расширение в списке отсутствует. На 465 такой настройки не требуется: там нечего подменять, шифрование начинается с первого байта.</p>
<p>Сертификат мы проверяем в обоих случаях одинаково. Имя в сертификате сверяется с тем именем хоста, которое написано в настройках, поэтому <code>openssl s_client</code> полезно запускать с ключом <code>-servername</code>: без него на площадках с несколькими доменами придёт сертификат по умолчанию, и вывод собьёт с толку.</p>
<p>Ещё один момент касается портов приёма. Пара «открытое начало плюс STARTTLS» и «шифрование сразу» повторяется у IMAP и POP3 в точности так же, поэтому, разобравшись один раз на SMTP, вы уже знаете, как устроены 143 и 993.</p>
<h2 id="kak-vybrat-port-pod-svoy-pochtovyy-servis">Как выбрать порт под свой почтовый сервис</h2>
<p>Выбор делается по трём вопросам: что слушает ваш почтовый сервер, что умеет ваша программа или библиотека и что пропускает сеть, из которой уходит соединение. Начинать удобно с документации сервиса, там номера портов указаны прямо. Дальше остаётся проверить проходимость.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Порт</th><th>Что указать в настройках</th></tr></thead><tbody><tr><td>Обычная почтовая программа на рабочей машине</td><td>587</td><td>Тип шифрования STARTTLS, авторизация по логину</td></tr><tr><td>Библиотека без явной поддержки STARTTLS</td><td>465</td><td>Тип шифрования SSL/TLS, соединение сразу шифрованное</td></tr><tr><td>Скрипт рассылки на своём сервере</td><td>587</td><td>STARTTLS плюс требование шифрования в настройках</td></tr><tr><td>Хостер прикрыл 587</td><td>465 или 2525</td><td>Уточнить номера в документации своего сервиса</td></tr><tr><td>Свой MTA перегоняет почту наружу</td><td>25</td><td>Исходящие соединения на 25 должны быть разрешены</td></tr><tr><td>Приложение сдаёт письма через посредника</td><td>587 или 465</td><td>Порт назначения плюс адрес и порт посредника</td></tr></tbody></table></div>
<p>Отправка через посредника заслуживает отдельного слова. Почтовое соединение это обычный TCP-поток, и посредник переносит его как есть. По HTTP это делается методом <code>CONNECT</code>: клиент просит открыть туннель до пары хост и порт, получает <code>200 Connection established</code> и дальше гонит по туннелю байты SMTP. Для программ, которые ходят по HTTP-схеме и умеют туннелировать произвольные порты, подойдут <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP для почтовых программ</a> с доступом по логину либо по привязке своего адреса. Механика самого туннеля разобрана отдельно, если нужны подробности рукопожатия, смотрите материал про <a href="https://iprazon.com/products/kupit-proxy-https">туннель CONNECT и работу с шифрованием</a>.</p>
<p>Второй путь, который в почте встречается чаще, это SOCKS5. Он не разбирает содержимое потока и переносит соединение на любой номер порта, поэтому 25, 465, 587, 993 и 995 проходят через него одинаково. Именно поэтому почтовые клиенты в своих настройках сети предлагают SOCKS5 первым: <a href="https://iprazon.com/products/kupit-proxy-socks5">адреса SOCKS5 для произвольных портов</a> закрывают и отправку, и приём одной настройкой. Мы выдаём один и тот же список адресов под оба варианта доступа, меняется только строка подключения в программе.</p>
<h2 id="proverka-dostupnosti-porta-telnet-nc-i-opens">Проверка доступности порта: telnet, nc и openssl s_client</h2>
<p>Проверка идёт снизу вверх: сначала TCP, потом рукопожатие TLS, потом почтовый обмен. Каждому уровню соответствует своя команда, и путать их не стоит, иначе вывод читается неправильно.</p>
<div class="tabl"><table><thead><tr><th>Команда</th><th>Что проверяет</th><th>Признак успеха</th></tr></thead><tbody><tr><td><code>telnet smtp.example.net 587</code></td><td>TCP-соединение и текстовый баннер</td><td>Строка <code>220 ... ESMTP</code> в первой секунде</td></tr><tr><td><code>nc -vz smtp.example.net 465</code></td><td>Только доступность порта</td><td>Строка <code>succeeded!</code> либо <code>open</code></td></tr><tr><td><code>nc -vz -w 5 smtp.example.net 25</code></td><td>Доступность 25 с ограничением ожидания</td><td>Ответ приходит быстрее пяти секунд</td></tr><tr><td><code>openssl s_client -connect smtp.example.net:465 -servername smtp.example.net</code></td><td>Рукопожатие implicit TLS и сертификат</td><td>Цепочка сертификатов и баннер <code>220</code></td></tr><tr><td><code>openssl s_client -starttls smtp -connect smtp.example.net:587</code></td><td>Переход в шифрование по STARTTLS</td><td>Цепочка сертификатов после <code>220 Ready</code></td></tr><tr><td><code>Test-NetConnection smtp.example.net -Port 587</code></td><td>Доступность порта из PowerShell</td><td><code>TcpTestSucceeded : True</code></td></tr><tr><td><code>curl -v --url smtp://smtp.example.net:587</code></td><td>Полный обмен глазами клиентской библиотеки</td><td>Коды <code>220</code>, <code>250</code> в подробном выводе</td></tr></tbody></table></div>
<p>Через посредника команды меняются мало. Утилита <code>nc</code> умеет ходить по SOCKS5 сама, <code>curl</code> принимает адрес посредника ключом <code>-x</code>, а для проверки TLS через туннель удобно поднять локальный проброс и уже к нему обращаться <code>openssl s_client</code>.</p>
<pre><code># доступность порта через SOCKS5
nc -X 5 -x 185.24.87.14:1080 -vz smtp.example.net 587

# полный SMTP-обмен через SOCKS5 с логином и паролем
curl -v --url smtp://smtp.example.net:587 \
     --proxy socks5h://user5521:pf39kd@185.24.87.14:1080 \
     --mail-from sender@example.org --mail-rcpt user@example.net \
     --upload-file letter.txt

# туннель CONNECT до почтового порта через HTTP-посредник
curl -v --proxy http://185.24.87.14:8000 --url smtps://smtp.example.net:465</code></pre>
<p>Отдельно про <code>telnet</code>. Утилита показывает живой текстовый диалог и потому удобна на 25 и 587, где обмен начинается открытым текстом. На 465 она бесполезна: там первым идёт двоичное рукопожатие, и на экране появится молчание либо мусор. Для 465 берём <code>openssl s_client</code>, он делает ровно то, что нужно.</p>
<h2 id="otkaz-soedineniya-na-port-chto-smotret-po-sh">Отказ соединения на порт: что смотреть по шагам</h2>
<p>Отказы делятся на два больших класса по одному признаку: скорости ответа. Мгновенный отказ приходит от сетевого стека, значит пакет дошёл и хост ответил сбросом. Долгое молчание до таймаута означает, что пакеты где-то отбрасываются без ответа, и это почти всегда фильтр по пути.</p>
<div class="tabl"><table><thead><tr><th>Симптом</th><th>Что стоит за ним</th><th>Что делать</th></tr></thead><tbody><tr><td><code>Connection refused</code> мгновенно</td><td>На хосте никто не слушает этот номер</td><td>Сверить номер порта в документации сервиса</td></tr><tr><td>Молчание до таймаута</td><td>Пакеты отбрасываются фильтром провайдера или хостера</td><td>Проверить 587 и 465 на том же хосте</td></tr><tr><td>Рукопожатие TLS падает на 465</td><td>На порту открытый SMTP, который ждёт STARTTLS</td><td>Перейти на 587 либо включить <code>smtps</code> на сервере</td></tr><tr><td>Пришёл <code>220</code>, <code>STARTTLS</code> в списке нет</td><td>Обмен идёт на 25 либо расширение отключено</td><td>Сменить порт на 587, проверить конфиг сервера</td></tr><tr><td><code>530 5.7.0 Authentication required</code></td><td>Команда <code>MAIL FROM</code> ушла без <code>AUTH</code></td><td>Выполнить <code>AUTH</code> после подъёма шифрования</td></tr><tr><td><code>535 5.7.8 Authentication credentials invalid</code></td><td>Логин или пароль не приняты</td><td>Сверить пару и механизм: <code>PLAIN</code>, <code>LOGIN</code>, <code>CRAM-MD5</code></td></tr><tr><td><code>421 4.7.0 Too many connections</code></td><td>Сервер ограничивает частоту соединений</td><td>Снизить число параллельных сеансов</td></tr><tr><td><code>554 5.7.1 Relay access denied</code></td><td>Отправка на сторонний домен без авторизации</td><td>Сдавать письмо на свой submission-порт</td></tr></tbody></table></div>
<p>Порядок разбора короткий. Первым делом проверяем TCP командой <code>nc -vz</code>, чтобы отделить сетевую часть от почтовой. Дальше смотрим, поднимается ли TLS: на 465 через прямое подключение, на 587 через ключ <code>-starttls smtp</code>. Если оба уровня прошли, дальнейшие ответы читаются по кодам из таблицы выше, и они уже говорят о настройках почтового сервера.</p>
<p>Когда соединение уходит через посредника, добавляется третий уровень проверки. Сначала убеждаемся, что сам посредник принимает соединение и отдаёт <code>200 Connection established</code> либо рукопожатие SOCKS5. Только после этого имеет значение ответ почтового сервера. Мы держим <a href="https://iprazon.com/proxy/servernye">приватные серверные адреса на собственном оборудовании</a> и рекомендуем разделять эти два шага при любом разборе: половина запутанных случаев объясняется тем, что обрыв случился на первом уровне, а искали причину на третьем.</p>
<p>Ещё одна частая причина отказа сидит в привязке. Доступ открывается либо по логину с паролем, либо по адресу машины, указанному в кабинете. Когда провайдер сменил адрес рабочей машины, соединение начинает отбрасываться молча, и картина внешне совпадает с закрытым портом. Проверяется это одной командой <code>curl</code> на эхо-сервис.</p>
<h2 id="porty-priema-pochty-i-zapis-nomera-v-nastroy">Порты приёма почты и запись номера в настройках</h2>
<p>Отправка это половина работы почтового клиента. Вторая половина, приём, устроена по той же логике портов, поэтому таблица ниже читается как продолжение первой.</p>
<div class="tabl"><table><thead><tr><th>Протокол</th><th>Порт</th><th>Шифрование</th><th>Когда берут</th></tr></thead><tbody><tr><td>SMTP submission</td><td>587</td><td>Открытое начало, STARTTLS</td><td>Отправка от клиента, основной вариант</td></tr><tr><td>SMTP submissions</td><td>465</td><td>Implicit TLS с первого байта</td><td>Отправка от клиента, библиотеки без STARTTLS</td></tr><tr><td>IMAP</td><td>143</td><td>Открытое начало, STARTTLS</td><td>Приём с папками на сервере, старые настройки</td></tr><tr><td>IMAP</td><td>993</td><td>Implicit TLS с первого байта</td><td>Приём с папками на сервере, обычный вариант</td></tr><tr><td>POP3</td><td>110</td><td>Открытое начало, STARTTLS</td><td>Скачивание писем на устройство, старые настройки</td></tr><tr><td>POP3</td><td>995</td><td>Implicit TLS с первого байта</td><td>Скачивание писем на устройство, обычный вариант</td></tr></tbody></table></div>
<p>Закономерность видна сразу: у каждого почтового протокола есть номер с открытым началом и номер с шифрованием от первого байта. Номера 993 и 995 сегодня стоят по умолчанию почти везде. Устройство самих сеансов приёма и разбор команд <code>FETCH</code>, <code>RETR</code> и <code>DELE</code> вынесены в отдельный материал про <a href="/protokoly/imap-i-pop3/">приём почты по IMAP и POP3</a>.</p>
<h3 id="kak-port-zadaetsya-v-stroke-podklyucheniya">Как порт задаётся в строке подключения</h3>
<p>В графическом клиенте порт указывается отдельным полем рядом с именем сервера, и рядом же стоит выпадающий список типа шифрования. Соответствие простое: <code>SSL/TLS</code> означает implicit TLS и идёт с 465, 993, 995. Пункт <code>STARTTLS</code> идёт с 587, 143, 110.</p>
<p>В коде и конфигах порт живёт внутри строки подключения, обычно после двоеточия за именем хоста. Схема URI при этом сама подсказывает тип шифрования.</p>
<pre><code>smtp://smtp.example.net:587     обычное начало, дальше STARTTLS
smtps://smtp.example.net:465    шифрование сразу после соединения
imap://mail.example.net:143     обычное начало, дальше STARTTLS
imaps://mail.example.net:993    шифрование сразу после соединения
pop3s://mail.example.net:995    шифрование сразу после соединения</code></pre>
<pre><code>import smtplib

# порт 587: открываем соединение, поднимаем шифрование командой
s = smtplib.SMTP('smtp.example.net', 587, timeout=20)
s.ehlo()
s.starttls()
s.ehlo()
s.login('user@example.org', 'secret')

# порт 465: шифрование поднимается вместе с соединением
s = smtplib.SMTP_SSL('smtp.example.net', 465, timeout=20)
s.login('user@example.org', 'secret')</code></pre>
<p>Строка подключения посредника устроена похоже и живёт рядом. Список выдаётся в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, забрать его можно ссылкой или файлом, обновляется он в режиме реального времени. В настройках почтовой программы адрес и порт посредника указываются в разделе сети, отдельно от адреса и порта почтового сервера. Путать два порта в одном окне легко, поэтому мы советуем выписать обе пары рядом на лист перед настройкой. Разбор полей строки собран в материале про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения по полям</a>, а состав пакета с потоками и привязками описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-http">пакет с доступом по протоколу HTTP</a>.</p>
<p>Отдельного внимания просит число одновременных сеансов. Почтовые серверы ограничивают частоту подключений с одного адреса, и при массовой работе счётчик упирается в потолок быстро. На стандартных пакетах доступно до 1000 потоков, на корпоративном до 3000, а при двух привязанных адресах общая цифра делится пополам. Пул держится в районе 12 000 активных адресов, ротация внутри него идёт автоматически. Полный состав доступа описан на странице, где можно оформить <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу адресов IPv4</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="pochemu-pisma-ne-uhodyat-cherez-port-25-s-mo">Почему письма не уходят через порт 25 с моего сервера?</h3>
<p>Исходящие соединения на 25 прикрыты у большинства хостеров и провайдеров: этот порт обслуживает перегон между почтовыми серверами, и его массово фильтруют для борьбы с рассылками. Признак фильтра узнаваемый: соединение висит до таймаута без отказа. Проверьте на том же хосте 587 и 465, обычно они отвечают сразу, и сдачу письма достаточно перевести на них.</p>
<h3 id="chto-vybrat-pri-ravnoy-dostupnosti-465-i-587">Что выбрать при равной доступности 465 и 587?</h3>
<p>Оба порта рабочие. Порт 587 удобен универсальностью: его слушают все распространённые почтовые сервисы, и библиотеки поддерживают STARTTLS из коробки. Порт 465 удобен предсказуемостью: шифрование поднимается вместе с соединением, подменить объявление расширения по дороге нечем. При настройке нового клиента мы обычно ставим 587, а 465 берём для библиотек, где STARTTLS настраивается тяжело.</p>
<h3 id="podoydut-li-vashi-proksi-pod-moyu-pochtovuyu">Подойдут ли ваши прокси под мою почтовую задачу?</h3>
<p>Заранее предугадать поведение каждого почтового сервиса и каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем софте, с вашими портами и вашим сервером, и его результат отвечает на вопрос точнее любого описания. Порядок запуска: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси.</p>
<h3 id="skolko-vremeni-zanimaet-vklyuchenie-paketa-p">Сколько времени занимает включение пакета после оплаты?</h3>
<p>Пакет включается примерно за 5 минут после подтверждения списания с баланса. После этого раздел выдачи начинает отдавать список адресов в двух форматах, <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, ссылкой либо файлом. Доступ открывается по привязке своего адреса в настройках кабинета либо по паре логина и пароля, в пакет входит две одновременные привязки со свободной сменой.</p>
<p>Порты это одна деталь почтового обмена, вокруг неё есть смежные разборы. Как устроен сам протокол и из чего складывается путь письма, описано в материале про <a href="/protokoly/chto-takoe-smtp/">устройство протокола SMTP</a>. Настройка отправки через посредника, с командами и разбором ответов сервера, собрана в заметке про <a href="/protokoly/smtp-cherez-proxy/">отправку почты через прокси</a>. Разница между HTTP, HTTPS, SOCKS4 и SOCKS5 при выборе типа доступа разобрана в сравнении <a href="/protokoly/http-https-socks/">четырёх протоколов посредника</a>. А если почтовая программа уже настроена и остаётся подключить её к пулу, начните с материала про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/pochtovye-porty/">https://kupit-proxy-ipv4.ru/protokoly/pochtovye-porty/</a></p>]]></content:encoded></item>
<item><title>IMAP и POP3 через прокси: как настроить приём почты</title><link>https://kupit-proxy-ipv4.ru/protokoly/imap-i-pop3/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/protokoly/imap-i-pop3/</guid><description>Приём почты через посредника настраивается по SOCKS5: почтовый клиент открывает обычное TCP-соединение на порт 993 или 995, и посредник переносит этот поток…</description><content:encoded><![CDATA[
<p class="vvod">Приём почты через посредника настраивается по SOCKS5: почтовый клиент открывает обычное TCP-соединение на порт 993 или 995, и посредник переносит этот поток целиком, без разбора содержимого. Разница между самими протоколами сводится к месту хранения: IMAP оставляет письма и папки на сервере и синхронизирует состояние между устройствами, POP3 скачивает письма на устройство и освобождает ящик.</p>
<p>Ниже мы разбираем оба сеанса по командам, с реальным обменом строками, показываем настройку в почтовом клиенте и в коде на Python, перечисляем порты и приводим способы убедиться, что соединение действительно идёт через посредника. Отправка писем живёт по своим правилам и вынесена в соседний материал.</p>
<h2 id="chem-imap-otlichaetsya-ot-pop3-po-ustroystvu">Чем IMAP отличается от POP3 по устройству работы</h2>
<p>IMAP держит ящик на сервере. Клиент подключается, выбирает папку, запрашивает нужные части писем и меняет флаги прочтения прямо на сервере. Состояние ящика едино для всех устройств: пометили письмо прочитанным на телефоне, и в почтовой программе на рабочей машине оно тоже отмечено.</p>
<p>POP3 работает по схеме «забрал и вышел». Клиент подключается, узнаёт число писем, скачивает их целиком на устройство и обычно помечает к удалению. Ящик после сеанса пустеет, письма живут в локальной базе программы, состояние прочтения хранится там же.</p>
<div class="tabl"><table><thead><tr><th>Свойство</th><th>IMAP</th><th>POP3</th></tr></thead><tbody><tr><td>Где хранятся письма</td><td>На сервере, клиент держит копию</td><td>На устройстве, сервер отдаёт и освобождает ящик</td></tr><tr><td>Папки</td><td>Полноценные, создаются и переименовываются командами</td><td>Только входящая корзина</td></tr><tr><td>Флаги состояния</td><td><code>\Seen</code>, <code>\Answered</code>, <code>\Flagged</code>, <code>\Deleted</code> на сервере</td><td>Флагов нет, состояние живёт в программе</td></tr><tr><td>Несколько устройств</td><td>Все видят одно состояние ящика</td><td>Каждое устройство качает свою копию</td></tr><tr><td>Частичная загрузка</td><td><code>FETCH</code> тянет заголовки, части, вложения по отдельности</td><td><code>RETR</code> тянет письмо целиком, <code>TOP</code> отдаёт заголовки</td></tr><tr><td>Поиск</td><td><code>SEARCH</code> выполняется на стороне сервера</td><td>Поиск идёт по локальной базе программы</td></tr><tr><td>Длительность сеанса</td><td>Долгий, с командой <code>IDLE</code> для мгновенной доставки</td><td>Короткий, на время выгрузки</td></tr><tr><td>Место в ящике</td><td>Занято, пока письма лежат на сервере</td><td>Освобождается после <code>DELE</code> и <code>QUIT</code></td></tr><tr><td>Порты</td><td>143 с переходом в шифрование, 993 с шифрованием сразу</td><td>110 с переходом в шифрование, 995 с шифрованием сразу</td></tr><tr><td>Расход канала</td><td>Тянется только запрошенное</td><td>Тянется весь объём писем</td></tr></tbody></table></div>
<p>Есть третье отличие, которое видно только на живом сеансе. IMAP работает с состоянием: сервер помнит выбранную папку, нумерацию сообщений в ней и может сам присылать уведомления о новых письмах внутри открытого сеанса. POP3 состояние держит минимально: номера сообщений действуют до конца сеанса, а всё остальное клиент считает сам.</p>
<p>Отсюда следует практика по разрыву связи. Порванный сеанс IMAP означает потерю нумерации, и клиент после переподключения повторяет <code>SELECT</code>. Порванный сеанс POP3 в середине выгрузки означает, что команда <code>QUIT</code> не дошла, удаление не подтвердилось и письма остались на сервере. Второй случай безопаснее по данным.</p>
<h2 id="kakoy-protokol-vybrat-pod-kakuyu-rabotu">Какой протокол выбрать под какую работу</h2>
<p>Выбор упирается в один вопрос: сколько устройств смотрит в один ящик. Когда устройств больше одного, берём IMAP. Когда ящик обслуживает одна программа и письма нужно сложить в локальную базу, POP3 закрывает задачу меньшим числом запросов.</p>
<div class="tabl"><table><thead><tr><th>Работа</th><th>Протокол</th><th>Почему так</th></tr></thead><tbody><tr><td>Почта сотрудника на компьютере и телефоне</td><td>IMAP</td><td>Общее состояние папок и флагов на всех устройствах</td></tr><tr><td>Общий ящик отдела, куда смотрит несколько человек</td><td>IMAP</td><td>Каждый видит, что письмо уже взято в работу</td></tr><tr><td>Выгрузка вложений в архив по расписанию</td><td>POP3</td><td>Скрипт забирает письма и освобождает ящик</td></tr><tr><td>Робот, который разбирает заявки с формы</td><td>POP3</td><td>Короткий сеанс, минимум состояния, простая логика</td></tr><tr><td>Мониторинг ящика с реакцией за секунды</td><td>IMAP</td><td>Команда <code>IDLE</code> держит сеанс и сообщает о новых письмах</td></tr><tr><td>Разбор больших вложений с фильтром по теме</td><td>IMAP</td><td><code>SEARCH</code> и <code>FETCH</code> тянут только подходящие письма</td></tr><tr><td>Резервная копия ящика перед переездом</td><td>IMAP</td><td>Копируются все папки, флаги сохраняются</td></tr></tbody></table></div>
<p>Смешивать протоколы на одном ящике мы советуем осторожно. Схема, где рабочая программа ходит по IMAP, а ночной скрипт по POP3 с удалением, приводит к тому, что утром половина писем пропала из папок. Когда скрипту нужен только просмотр, оставьте ему POP3 без команды <code>DELE</code>: письма останутся на месте, а выгрузка пройдёт.</p>
<h2 id="seans-imap-po-komandam-login-list-select-fet">Сеанс IMAP по командам: LOGIN, LIST, SELECT, FETCH, STORE, LOGOUT</h2>
<p>Обмен в IMAP помечен метками. Каждая команда клиента начинается с уникальной метки вида <code>a001</code>, ответ сервера с той же меткой закрывает команду. Строки, начинающиеся со звёздочки, это данные, которые сервер отдаёт по ходу.</p>
<pre><code>* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS AUTH=PLAIN] Dovecot ready.
a001 LOGIN user@example.org secret
a001 OK [CAPABILITY IMAP4rev1 IDLE NAMESPACE UIDPLUS MOVE QUOTA] Logged in
a002 LIST "" "*"
* LIST (\HasNoChildren) "/" INBOX
* LIST (\HasNoChildren \Drafts) "/" Drafts
* LIST (\HasNoChildren \Sent) "/" Sent
* LIST (\HasNoChildren \Junk) "/" Junk
a002 OK List completed (0.002 + 0.000 secs).
a003 SELECT INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* 1483 EXISTS
* 2 RECENT
* OK [UIDVALIDITY 1571234567] UIDs valid
* OK [UIDNEXT 20194] Predicted next UID
a003 OK [READ-WRITE] Select completed.
a004 SEARCH UNSEEN
* SEARCH 1482 1483
a004 OK Search completed.
a005 FETCH 1483 (FLAGS BODY.PEEK[HEADER.FIELDS (FROM SUBJECT)])
* 1483 FETCH (FLAGS () BODY[HEADER.FIELDS (FROM SUBJECT)] {74}
From: supplier@example.org
Subject: ostatki po skladu
)
a005 OK Fetch completed.
a006 STORE 1483 +FLAGS (\Seen)
* 1483 FETCH (FLAGS (\Seen))
a006 OK Store completed.
a007 LOGOUT
* BYE Logging out
a007 OK Logout completed.</code></pre>
<p>Разберём команды по назначению.</p>
<div class="tabl"><table><thead><tr><th>Команда</th><th>Что делает</th><th>На что смотреть в ответе</th></tr></thead><tbody><tr><td><code>LOGIN</code></td><td>Передаёт логин и пароль, переводит сеанс в состояние авторизации</td><td>Обновлённый список <code>CAPABILITY</code></td></tr><tr><td><code>LIST "" "*"</code></td><td>Отдаёт дерево папок с их атрибутами</td><td>Разделитель имён и флаги вида <code>\Sent</code></td></tr><tr><td><code>SELECT</code></td><td>Открывает папку и включает работу с сообщениями</td><td><code>EXISTS</code>, <code>UIDVALIDITY</code>, <code>UIDNEXT</code>, признак <code>READ-WRITE</code></td></tr><tr><td><code>SEARCH</code></td><td>Ищет письма по условию на стороне сервера</td><td>Список номеров сообщений в строке <code>* SEARCH</code></td></tr><tr><td><code>FETCH</code></td><td>Забирает флаги, заголовки, части тела, вложения</td><td>Размер части в фигурных скобках, содержимое следом</td></tr><tr><td><code>STORE</code></td><td>Меняет флаги письма прямо на сервере</td><td>Подтверждение новым набором флагов</td></tr><tr><td><code>EXPUNGE</code></td><td>Убирает из папки письма с флагом <code>\Deleted</code></td><td>Строки <code>* N EXPUNGE</code> с номерами</td></tr><tr><td><code>LOGOUT</code></td><td>Закрывает сеанс корректно</td><td><code>* BYE</code> и завершающее <code>OK</code></td></tr></tbody></table></div>
<p>Три детали из этого обмена пригодятся при отладке. Первая: <code>BODY.PEEK[]</code> забирает содержимое без установки флага <code>\Seen</code>, обычный <code>BODY[]</code> письмо помечает прочитанным. Вторая: номера сообщений в папке меняются после <code>EXPUNGE</code>, поэтому длинные скрипты работают через UID и команду <code>UID FETCH</code>. Третья: значение <code>UIDVALIDITY</code> при пересоздании папки на сервере меняется, и локальный кэш клиента после этого перестраивается целиком.</p>
<h2 id="seans-pop3-po-komandam-user-pass-stat-list-r">Сеанс POP3 по командам: USER, PASS, STAT, LIST, RETR, DELE, QUIT</h2>
<p>POP3 устроен проще: ответы состоят из <code>+OK</code> и <code>-ERR</code>, меток нет, многострочный ответ завершается точкой на отдельной строке.</p>
<pre><code>+OK POP3 ready &lt;18960.6971709@mail.example.net&gt;
USER user@example.org
+OK
PASS secret
+OK Logged in.
STAT
+OK 3 14820
LIST
+OK 3 messages:
1 4210
2 5312
3 5298
.
UIDL
+OK
1 GmM2AV4x1Q3xVQ
2 QhdPYR:00WBw1
3 hUYtQ2kLm9Vc0a
.
TOP 2 5
+OK
From: supplier@example.org
Subject: price list
Content-Type: text/plain; charset=utf-8

Dobryy den, vysylaem preys.
.
RETR 2
+OK 5312 octets
...
.
DELE 2
+OK Marked to be deleted.
QUIT
+OK Logging out, messages deleted.</code></pre>
<div class="tabl"><table><thead><tr><th>Команда</th><th>Что делает</th><th>Что вернётся</th></tr></thead><tbody><tr><td><code>USER</code></td><td>Передаёт имя ящика</td><td><code>+OK</code> без подробностей</td></tr><tr><td><code>PASS</code></td><td>Передаёт пароль, открывает сеанс работы</td><td><code>+OK Logged in</code> либо <code>-ERR</code></td></tr><tr><td><code>STAT</code></td><td>Отдаёт число писем и суммарный размер</td><td>Два числа: количество и байты</td></tr><tr><td><code>LIST</code></td><td>Перечисляет письма с размерами</td><td>Многострочный список, закрытый точкой</td></tr><tr><td><code>UIDL</code></td><td>Отдаёт постоянные идентификаторы писем</td><td>Пары «номер и идентификатор»</td></tr><tr><td><code>TOP n k</code></td><td>Отдаёт заголовки письма и первые <code>k</code> строк тела</td><td>Кусок письма без полной выгрузки</td></tr><tr><td><code>RETR</code></td><td>Забирает письмо целиком</td><td>Размер в октетах, следом содержимое</td></tr><tr><td><code>DELE</code></td><td>Помечает письмо к удалению</td><td><code>+OK Marked to be deleted</code></td></tr><tr><td><code>RSET</code></td><td>Снимает все пометки удаления в сеансе</td><td><code>+OK</code> и восстановленный счётчик</td></tr><tr><td><code>QUIT</code></td><td>Завершает сеанс и применяет пометки</td><td><code>+OK</code>, после чего письма удаляются</td></tr></tbody></table></div>
<p>Самое важное свойство POP3 сидит в паре <code>DELE</code> и <code>QUIT</code>. Команда <code>DELE</code> только ставит пометку, физически ящик очищается на выходе из сеанса. Оборванная связь до <code>QUIT</code> оставляет письма нетронутыми, и повторный запуск скрипта заберёт их снова. Настройка почтовых программ «оставлять копии на сервере» опирается на <code>UIDL</code>: программа помнит идентификаторы уже забранных писем и пропускает их при следующем сеансе.</p>
<h2 id="pochemu-priem-pochty-cherez-posrednika-idet-">Почему приём почты через посредника идёт по SOCKS5</h2>
<p>IMAP и POP3 это текстовые протоколы поверх обычного TCP, к HTTP они отношения не имеют. Посреднику для их переноса нужно уметь ровно одно: открыть соединение до пары «хост и порт» и переливать байты в обе стороны, не заглядывая внутрь. Так работает SOCKS5.</p>
<p>Рукопожатие занимает два коротких обмена. Клиент отправляет версию <code>0x05</code> и список поддерживаемых способов авторизации. Посредник выбирает способ: <code>0x00</code> при доступе по привязанному адресу либо <code>0x02</code> при доступе по логину и паролю. Затем клиент шлёт запрос <code>CONNECT</code> с типом адреса <code>0x03</code> для доменного имени, посредник открывает соединение и отвечает кодом <code>0x00</code>. Дальше по каналу идут байты IMAP или POP3 в исходном виде.</p>
<div class="tabl"><table><thead><tr><th>Что нужно почтовому клиенту</th><th>Как это даёт SOCKS5</th></tr></thead><tbody><tr><td>Произвольный номер порта назначения</td><td>Порт передаётся в запросе <code>CONNECT</code> двумя байтами</td></tr><tr><td>Двусторонний поток без разбора содержимого</td><td>Посредник переливает байты, протокол внутри ему безразличен</td></tr><tr><td>Авторизация доступа</td><td>Способ <code>0x02</code> с парой логина и пароля либо привязка адреса</td></tr><tr><td>Разрешение имени сервера на стороне посредника</td><td>Тип адреса <code>0x03</code> передаёт доменное имя целиком</td></tr><tr><td>Работа с TLS от клиента до почтового сервера</td><td>Шифрование поднимается внутри туннеля, посредник его не трогает</td></tr></tbody></table></div>
<p>Разрешение имён заслуживает отдельной строки. Когда клиент передаёт доменное имя внутри запроса <code>CONNECT</code>, имя превращается в адрес на стороне посредника, и запрос к DNS с рабочей машины наружу не уходит. В библиотеках этот режим включается схемой <code>socks5h</code> вместо <code>socks5</code>, в почтовых программах отдельной галкой в настройках сети. Мы советуем включать его сразу: <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для почтовых клиентов</a> поддерживают оба варианта, и режим с удалённым разрешением имён даёт цельную картину по маршруту.</p>
<p>По HTTP приём почты тоже переносится, если программа умеет строить туннель методом <code>CONNECT</code>. Тогда клиент просит открыть канал до <code>mail.example.net:993</code>, получает <code>200 Connection established</code> и работает внутри него. Такой путь встречается у серверных библиотек и у части утилит командной строки, поэтому <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP с методом CONNECT</a> в почтовых задачах тоже применимы. Почтовые программы с графическим интерфейсом в настройках сети предлагают именно поля SOCKS, и потому в клиентах мы идём по SOCKS5. В пакете доступны SOCKS4 и SOCKS5 на выбор, для почты берём SOCKS5: он добавляет авторизацию по паре логина и пароля и передаёт имя хоста посреднику. Про разницу транспортов есть отдельный разбор про <a href="/protokoly/tcp-i-udp/">TCP и UDP через SOCKS5</a>.</p>
<h2 id="porty-shifrovanie-i-chto-pisat-v-nastroykah">Порты, шифрование и что писать в настройках</h2>
<p>Порты приёма собраны в короткую таблицу. У каждого протокола есть номер с открытым началом и переходом в шифрование по команде и номер, где шифрование поднимается сразу после установки соединения.</p>
<div class="tabl"><table><thead><tr><th>Протокол</th><th>Порт</th><th>Шифрование</th><th>Что выбрать в клиенте</th></tr></thead><tbody><tr><td>IMAP</td><td>993</td><td>TLS с первого байта</td><td>Тип шифрования <code>SSL/TLS</code></td></tr><tr><td>IMAP</td><td>143</td><td>Открытое начало, команда <code>STARTTLS</code></td><td>Тип шифрования <code>STARTTLS</code></td></tr><tr><td>POP3</td><td>995</td><td>TLS с первого байта</td><td>Тип шифрования <code>SSL/TLS</code></td></tr><tr><td>POP3</td><td>110</td><td>Открытое начало, команда <code>STLS</code></td><td>Тип шифрования <code>STARTTLS</code></td></tr><tr><td>SOCKS5 у посредника</td><td>1080 и другие</td><td>Туннель без своего шифрования</td><td>Поле «прокси» в разделе сети</td></tr></tbody></table></div>
<p>Сегодня 993 и 995 стоят по умолчанию почти везде, и мы рекомендуем начинать с них: шифрование поднимается вместе с соединением, и настройка сводится к трём полям. Номера отправки, 587 и 465, работают по той же логике, они разобраны в материале про <a href="/protokoly/pochtovye-porty/">почтовые порты 25, 465 и 587</a>.</p>
<p>Важная деталь про порты в связке с посредником. В окне настроек почтовой программы одновременно живут два порта: порт почтового сервера и порт посредника. Первый идёт в разделе учётной записи рядом с именем сервера, второй в разделе сети рядом с адресом посредника. Мы советуем выписать обе пары рядом до начала настройки, потому что перепутанные поля дают самый запутанный класс отказов.</p>
<h2 id="nastroyka-v-pochtovom-kliente">Настройка в почтовом клиенте</h2>
<p>В Thunderbird путь короткий: раздел настроек, страница «Основные», кнопка настроек соединения внизу. Там выбирается ручная настройка прокси, в поля узла SOCKS вписывается адрес и порт из списка, включается пятая версия протокола и ставится галка передачи имён DNS через посредник. Логин и пароль программа запросит при первом соединении.</p>
<pre><code>Прокси-узел SOCKS:  185.24.87.14
Порт:               1080
Версия:             SOCKS v5
DNS через прокси:   включено</code></pre>
<p>В eM Client и в других клиентах на своём сетевом слое поля называются похоже и лежат в разделе сети. Клиенты, которые берут системные настройки, заворачиваются через Proxifier или через локальный проброс: поднимается локальный порт, он смотрит на адрес из списка, а в почтовой программе указывается <code>127.0.0.1</code> с этим номером.</p>
<p>Учётная запись при этом настраивается обычным порядком: сервер входящей почты, порт 993 для IMAP или 995 для POP3, тип шифрования <code>SSL/TLS</code>, имя пользователя целиком с доменом. После сохранения программа делает пробное соединение, и его результат сразу показывает, работает ли связка.</p>
<p>Доступ к самому посреднику открывается двумя путями. Первый: в кабинете указывается адрес машины, с которой пойдут соединения, и логин с паролем в клиенте не нужен. Второй: берётся формат <code>IP:PORT:LOGIN:PASS</code>, и пара подставляется в поля программы. В пакет входит две одновременные привязки со свободной сменой, при двух привязанных адресах общий лимит потоков делится пополам. Для команды, где почтовые клиенты стоят на нескольких машинах, ближе вариант с логином: <a href="https://iprazon.com/proxy/privatnye">приватные адреса для рабочей группы</a> настраиваются один раз и переносятся между машинами копированием строки.</p>
<h2 id="priem-pochty-v-kode-imaplib-i-poplib-cherez-">Приём почты в коде: imaplib и poplib через PySocks</h2>
<p>В Python приём почты закрывается стандартными модулями <code>imaplib</code> и <code>poplib</code>. Прокси добавляется библиотекой PySocks: она подменяет фабрику сокетов, после чего оба модуля работают без изменений в остальном коде.</p>
<pre><code>import socks, socket, imaplib, email

socks.set_default_proxy(
    socks.SOCKS5, "185.24.87.14", 1080,
    username="user5521", password="pf39kd", rdns=True)
socket.socket = socks.socksocket

m = imaplib.IMAP4_SSL("mail.example.net", 993)
m.login("user@example.org", "secret")
m.select("INBOX")

typ, data = m.search(None, "UNSEEN")
for num in data[0].split():
    typ, raw = m.fetch(num, "(BODY.PEEK[])")
    msg = email.message_from_bytes(raw[0][1])
    print(num.decode(), msg.get("Subject"))
    m.store(num, "+FLAGS", "\\Seen")

m.logout()</code></pre>
<p>Флаг <code>rdns=True</code> включает передачу доменного имени посреднику, и запрос к DNS с машины наружу не уходит. Без него имя разрешается локально, и картина по маршруту получается неполной.</p>
<pre><code>import socks, socket, poplib

socks.set_default_proxy(
    socks.SOCKS5, "185.24.87.14", 1080,
    username="user5521", password="pf39kd", rdns=True)
socket.socket = socks.socksocket

p = poplib.POP3_SSL("mail.example.net", 995, timeout=30)
p.user("user@example.org")
p.pass_("secret")

count, size = p.stat()
print(count, size)

for i in range(1, count + 1):
    resp, lines, octets = p.retr(i)
    body = b"\r\n".join(lines)
    open(f"msg-{i}.eml", "wb").write(body)
    # p.dele(i)   # пометка к удалению применится на quit()

p.quit()</code></pre>
<p>Строка <code>p.dele(i)</code> оставлена закомментированной осознанно. Пока скрипт отлаживается, ящик лучше держать нетронутым: пометки применяются на <code>quit()</code>, и одна невнимательная выгрузка уносит письма из ящика без возврата. Включать удаление стоит после того, как файлы стали появляться на диске в ожидаемом виде.</p>
<p>Подмена <code>socket.socket</code> действует на весь процесс. Когда в одном скрипте живут запросы напрямую и запросы через посредника, аккуратнее работать с <code>socks.socksocket</code> точечно: создать сокет, вызвать у него <code>set_proxy</code>, соединиться и передать готовый объект в <code>imaplib.IMAP4</code> через параметр. Состав пакета с потоками, форматами выдачи и протоколами описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с доступом по SOCKS5</a>.</p>
<h2 id="kak-ubeditsya-chto-soedinenie-idet-cherez-po">Как убедиться, что соединение идёт через посредника</h2>
<p>Проверка строится на трёх независимых наблюдениях: куда уходит соединение с машины, какой адрес видит почтовый сервер и куда уходит запрос к DNS. Совпадение всех трёх даёт полную картину.</p>
<div class="tabl"><table><thead><tr><th>Проверка</th><th>Команда или место</th><th>Что должно получиться</th></tr></thead><tbody><tr><td>Куда открыт сокет с машины</td><td>`ss -tnp \</td><td>grep imaplib<code> либо </code>netstat -ano`</td><td>Соединение на адрес и порт посредника</td></tr><tr><td>Доступность посредника</td><td><code>nc -vz 185.24.87.14 1080</code></td><td>Порт отвечает за доли секунды</td></tr><tr><td>Полный обмен IMAP через туннель</td><td><code>curl -v --url imaps://mail.example.net:993 --proxy socks5h://...</code></td><td>Строки <code>* OK</code> и список папок</td></tr><tr><td>Выходной адрес</td><td><code>curl -x socks5h://... https://ifconfig.me</code></td><td>Адрес из пула, отличный от адреса машины</td></tr><tr><td>Запросы к DNS</td><td><code>tcpdump -n port 53</code> во время сеанса</td><td>Обращений к имени почтового сервера нет</td></tr><tr><td>Отрицательный контроль</td><td>Указать заведомо неверный порт посредника</td><td>Клиент перестаёт соединяться совсем</td></tr></tbody></table></div>
<p>Отрицательный контроль мы считаем самым честным способом. Пока программа продолжает получать почту при заведомо нерабочем посреднике, она ходит мимо него. Проверка занимает полминуты: поменяли порт на несуществующий, нажали «получить почту», получили отказ соединения, вернули верный порт.</p>
<pre><code># полный сеанс IMAP через SOCKS5 глазами curl
curl -v --url "imaps://mail.example.net:993/INBOX?UNSEEN" \
     --user "user@example.org:secret" \
     --proxy socks5h://user5521:pf39kd@185.24.87.14:1080

# то же самое для POP3
curl -v --url "pop3s://mail.example.net:995/1" \
     --user "user@example.org:secret" \
     --proxy socks5h://user5521:pf39kd@185.24.87.14:1080

# выходной адрес того же канала
curl -s -x socks5h://user5521:pf39kd@185.24.87.14:1080 https://ifconfig.me</code></pre>
<p>Пул держится в районе 12 000 активных адресов, ротация внутри него автоматическая, список обновляется в режиме реального времени. Отсюда практический вывод для почты: соседние сеансы штатно уходят с разных выходов, и удивляться смене адреса между проверками не нужно. Когда почтовому серверу нужна ровная картина по адресам, соединения стоит держать длинными: один сеанс IMAP с командой <code>IDLE</code> живёт часами и остаётся на одном канале. Полный состав доступа с протоколами IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5 описан на странице, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<p>Отдельно смотрим на ошибки авторизации. Отказ посредника и отказ почтового сервера выглядят в интерфейсе программы похоже, поэтому разделяем их порядком проверки: сначала <code>nc -vz</code> до посредника, затем <code>curl</code> с полным сеансом. Первый шаг отвечает за канал, второй за учётные данные ящика.</p>
<p>Стабильность канала для почты значит больше, чем пиковая скорость. Выгрузка ящика идёт короткими порциями, а сеанс IMAP с командой <code>IDLE</code> живёт часами и болезненно переносит обрывы: клиент после разрыва повторяет <code>SELECT</code>, заново сверяет <code>UIDVALIDITY</code> и перечитывает список писем. Мы держим <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a> и потому время отклика внутри пула ровное от сеанса к сеансу. Трафик безлимитный, поэтому объём выгруженных вложений на работу канала не влияет и считать его не нужно.</p>
<p>Ещё один способ увидеть маршрут снаружи это журнал самого почтового сервера. Dovecot пишет строку входа с адресом клиента в формате <code>imap-login: Login: user=&lt;...&gt;, rip=185.24.87.14, lip=...</code>, и значение <code>rip</code> показывает тот адрес, который сервер увидел на входе. Когда у вас есть доступ к журналам своего почтового сервера, эта строка закрывает вопрос быстрее любых команд на клиентской машине.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-brat-pod-pochtovyy-klient">Какой тип прокси брать под почтовый клиент?</h3>
<p>В пакете IPv4 и SOCKS5 доступны SOCKS-4 и SOCKS-5 на выбор, и для почты мы рекомендуем SOCKS-5. Он передаёт произвольный номер порта, поддерживает авторизацию по паре логина и пароля и разрешает доменное имя на своей стороне. Почтовые программы в разделе сетевых настроек предлагают именно поля SOCKS, поэтому настройка сводится к четырём значениям: адрес, порт, версия и галка передачи имён.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi-i-ka">В каком формате выдаётся список прокси и как его получить?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Первый подходит при доступе по привязанному адресу, второй при доступе по логину и паролю, который удобно вписывать в поля почтовой программы. Забрать список можно двумя путями: получить ссылку в кабинете либо скачать файл. Список обновляется в режиме реального времени, поэтому перед настройкой новой машины его стоит перечитать.</p>
<h3 id="podoydut-li-proksi-pod-moy-pochtovyy-servis">Подойдут ли прокси под мой почтовый сервис?</h3>
<p>Каждый почтовый сервер ведёт себя по-своему, и предсказать это со стороны не выйдет, поэтому до покупки открыт бесплатный тест до 2 часов под ваш запрос. Шаги такие: подобрать тип прокси под свой софт, завести кабинет, отправить из меню запрос теста, вписать свой адрес в настройках, активировать доступ и сообщить оператору логин вместе с типом прокси. Дальше два часа идут на вашей программе и вашем ящике.</p>
<h3 id="skolko-odnovremennyh-seansov-priema-vyderzhi">Сколько одновременных сеансов приёма выдержит пакет?</h3>
<p>Лимит потоков на стандартных пакетах доходит до 1000, на корпоративном до 3000. Складывать потоки нескольких пакетов нельзя, каждый работает со своим лимитом, а при двух привязках цифра делится надвое. Для приёма почты запаса хватает с большим ходом: один почтовый клиент держит от одного до пяти соединений на ящик, и даже сотня ящиков под наблюдением укладывается в сотни соединений.</p>
<p>Вокруг приёма почты собрано несколько смежных разборов. Обратная сторона ящика, то есть путь письма от программы отправителя до сервера получателя, описана в материале про <a href="/protokoly/chto-takoe-smtp/">протокол SMTP и путь письма</a>. Что переписать в настройках, когда наружу уходят письма, показано в заметке про <a href="/protokoly/smtp-cherez-proxy/">настройку отправки по SMTP через прокси</a>. Выбор типа доступа под конкретную программу разложен в сравнении <a href="/protokoly/http-https-socks/">HTTP, HTTPS, SOCKS4 и SOCKS5</a>. Настроенный клиент полезно один раз прогнать по общему порядку диагностики, он собран в материале про <a href="/proverka/kak-proverit/">проверку работы прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/protokoly/imap-i-pop3/">https://kupit-proxy-ipv4.ru/protokoly/imap-i-pop3/</a></p>]]></content:encoded></item>
<item><title>Первое подключение прокси IPv4: от включённого пакета до рабочего запроса</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/pervoe-podklyuchenie/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/pervoe-podklyuchenie/</guid><description>Первое подключение укладывается в пять действий: забрать список адресов в кабинете, выбрать способ доступа, собрать строку подключения, отправить один запрос…</description><content:encoded><![CDATA[
<p class="vvod">Первое подключение укладывается в пять действий: забрать список адресов в кабинете, выбрать способ доступа, собрать строку подключения, отправить один запрос через <code>curl</code> и увидеть в ответе адрес из пула. Занимает это около десяти минут, после чего та же строка переносится в браузер и в рабочую программу.</p>
<p>Ниже разобран каждый шаг с командами и ответами, которые они возвращают. Отдельно идёт разбор ситуации, когда первый запрос не прошёл: проверки выстроены по порядку от доступности порта до поведения целевого сайта, и порядок тут экономит больше времени, чем любая догадка наугад.</p>
<h2 id="chto-uzhe-est-na-rukah-k-etomu-momentu">Что уже есть на руках к этому моменту</h2>
<p>К первому подключению у нас есть три вещи: активный пакет, доступ в кабинет и понимание, с какой машины пойдут запросы. Пакет включается примерно за 5 минут после оформления, статус меняется в списке пакетов, и раздел выдачи начинает отдавать адреса. Сам порядок оформления разобран в материале про <a href="/pokupka/kak-kupit/">покупку пакета по шагам</a>, здесь мы стартуем с готового доступа.</p>
<p>Третий пункт важнее, чем кажется. Машина, с которой пойдут запросы, определяет способ доступа: это может быть рабочий ноутбук, арендованный сервер, домашний компьютер или машина коллеги. От выбора зависит формат списка, который мы забираем на следующем шаге, поэтому вопрос закрывается до всего остального.</p>
<div class="tabl"><table><thead><tr><th>Что нужно</th><th>Где смотреть</th><th>Что означает готовность</th></tr></thead><tbody><tr><td>Активный пакет</td><td>Список пакетов в кабинете</td><td>Статус активен, срок идёт</td></tr><tr><td>Раздел выдачи</td><td>Меню списка прокси</td><td>Ссылка и файл доступны для скачивания</td></tr><tr><td>Настройки доступа</td><td>Раздел привязки адресов</td><td>Поле под адрес машины открыто</td></tr><tr><td>Рабочая машина</td><td>Своя сторона</td><td>Известен внешний адрес, с которого пойдут запросы</td></tr></tbody></table></div>
<p>Ещё одна мелочь: понадобится консоль. На Linux и macOS это терминал, на Windows подойдёт PowerShell или встроенный <code>curl</code>. Первый запрос мы делаем командой, потому что она отвечает однозначно и не тянет за собой настройки браузера, расширений и профилей.</p>
<h2 id="shag-pervyy-zabiraem-spisok-adresov-iz-kabin">Шаг первый: забираем список адресов из кабинета</h2>
<p>Раздел выдачи отдаёт список двумя путями: ссылкой и файлом. Ссылка удобна там, где программа умеет подтягивать адреса сама, файл проще открыть глазами и взять из него одну строку для первой проверки. На первое подключение берём файл: для одной строки этого хватает, механику автообновления подключим позже.</p>
<p>Форматов тоже два. <code>IP:PORT</code> подходит тем, кто открывает доступ привязкой своей машины. <code>IP:PORT:LOGIN:PASS</code> содержит пару учётных данных прямо в строке и работает с любой машины. Выбор формата на этом шаге равен выбору способа доступа на следующем, поэтому оба вопроса закрываются вместе.</p>
<pre><code># формат из двух полей
185.24.87.14:8000
185.24.87.15:8000
91.208.132.77:8000

# формат из четырёх полей
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<p>Пул держится в районе 12 000 активных адресов, список обновляется в реальном времени. Для первого запроса это значит одно: берём строку из свежескачанного файла. Список недельной давности отдаст часть адресов, которых в пуле уже нет, и мы начнём разбор с ложного отказа, хотя доступ настроен верно.</p>
<p>Из файла копируем первую строку целиком. Дальше она превращается в строку подключения, и все поля в ней уже есть: адрес выхода, порт, при выборе второго формата ещё логин и пароль.</p>
<h2 id="shag-vtoroy-vybiraem-sposob-dostupa">Шаг второй: выбираем способ доступа</h2>
<p>Способов два, и оба входят в пакет. Первый: указываем внешний адрес своей машины в настройках кабинета, после чего прокси пропускают запросы с него без учётных данных. Второй: берём формат с логином и паролем, тогда доступ открывается с любой машины, где эту пару введут.</p>
<p>Для первого подключения проще тот, что соответствует вашей ситуации. Стационарная рабочая машина или сервер с постоянным внешним адресом: берём привязку. Ноутбук, который завтра окажется в другой сети, или сразу несколько машин: берём формат с учётными данными. Механика привязки со всеми тонкостями разобрана в материале про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса</a>.</p>
<div class="tabl"><table><thead><tr><th>Способ</th><th>Формат списка</th><th>Что вводим</th><th>Когда удобнее</th></tr></thead><tbody><tr><td>Привязка адреса</td><td><code>IP:PORT</code></td><td>Внешний адрес машины в кабинете</td><td>Постоянный адрес, сервер, офис</td></tr><tr><td>Логин и пароль</td><td><code>IP:PORT:LOGIN:PASS</code></td><td>Пару прямо в строке подключения</td><td>Меняющийся адрес, несколько машин</td></tr></tbody></table></div>
<p>Один момент влияет на нагрузку. В пакет входит одновременная привязка 2 адресов, при двух привязках общий лимит потоков делится между ними пополам. Пакет на 1000 потоков с двумя привязками даёт по 500 на каждую сторону, и если первый прогон идёт с одной машины, вторую привязку разумнее оставить пустой до момента, когда она понадобится.</p>
<p>Переключаться между способами можно свободно и в любой день. Мы выбираем один вариант на первое подключение только для того, чтобы разбирать по одной переменной за раз.</p>
<h2 id="shag-tretiy-sobiraem-stroku-podklyucheniya">Шаг третий: собираем строку подключения</h2>
<p>Строка подключения состоит из протокола, адреса, порта и пары учётных данных, если она нужна. Общий вид выглядит так: <code>протокол://логин:пароль@адрес:порт</code>. При доступе по привязке пара опускается целиком вместе с символом <code>@</code>.</p>
<pre><code># доступ по привязанному адресу, протокол HTTP
http://185.24.87.14:8000

# доступ по учётным данным
http://user5521:pf39kd@185.24.87.14:8000

# тот же адрес по SOCKS5
socks5://user5521:pf39kd@185.24.87.14:8000

# SOCKS5 с разрешением имён на стороне выхода
socks5h://user5521:pf39kd@185.24.87.14:8000</code></pre>
<p>Протокол берём по тому, что принимает софт. Браузеры и парсеры ходят по HTTP и HTTPS, программы с произвольными портами и сетевые утилиты предпочитают SOCKS. В пакете доступны SOCKS4 и SOCKS5, и переключение между ними меняет только префикс строки: адреса и порт остаются прежними. Подробный разбор каждого поля с примерами ошибок в написании вынесен в отдельный материал этого раздела, ссылка на него стоит в конце.</p>
<p>Пароль стоит проверить на служебные символы. Если внутри пары встречаются <code>@</code>, <code>:</code> или <code>/</code>, строка склеенного вида ломается, и утилита читает адрес неправильно. В таком случае логин и пароль выносятся отдельными параметрами, и склейка перестаёт иметь значение.</p>
<h2 id="shag-chetvertyy-pervyy-zapros-cherez-curl">Шаг четвёртый: первый запрос через curl</h2>
<p>Первый запрос идёт на сервис, который возвращает адрес обратившегося. Смысл прост: мы сравниваем два ответа. Сначала спрашиваем без посредника, потом через него, и адреса в этих ответах должны отличаться.</p>
<pre><code># адрес самой машины, без посредника
curl https://ifconfig.me
203.0.113.45

# тот же запрос через прокси
curl -x http://185.24.87.14:8000 https://ifconfig.me
185.24.87.14

# по учётным данным, пара вынесена отдельным параметром
curl -x http://185.24.87.14:8000 -U user5521:pf39kd https://ifconfig.me
185.24.87.14</code></pre>
<p>Ответ второй команды показывает адрес из пула. Это и есть рабочий первый запрос: соединение установилось, доступ открылся, трафик пошёл через выход. Расхождение двух адресов служит доказательством того, что посредник действительно в цепочке, потому что совпадение означало бы прямой запрос мимо него.</p>
<p>Полезно сразу добавить второй запрос, уже на целевой домен, и посмотреть код ответа. Он покажет, как сайт встречает адрес из пула, и это отдельная величина от факта соединения.</p>
<pre><code># код ответа целевого сайта и время всего запроса
curl -o /dev/null -s -w "%{http_code} %{time_total}\n" \
     -x http://185.24.87.14:8000 https://example.com/catalog
200 0.612</code></pre>
<div class="tabl"><table><thead><tr><th>Команда</th><th>Что проверяет</th><th>Рабочий ответ</th></tr></thead><tbody><tr><td><code>curl https://ifconfig.me</code></td><td>Адрес машины напрямую</td><td>Внешний адрес провайдера</td></tr><tr><td><code>curl -x ... https://ifconfig.me</code></td><td>Адрес на выходе через пул</td><td>Адрес из списка, отличный от первого</td></tr><tr><td><code>curl -o /dev/null -w "%{http_code}"</code></td><td>Приём на целевом домене</td><td>Код ответа сайта</td></tr><tr><td><code>curl -v -x ...</code></td><td>Ход соединения по шагам</td><td>Строка о туннеле и статусе</td></tr></tbody></table></div>
<p>Время отклика в третьей команде стоит записать. Дальше оно превратится в ориентир: когда через неделю прогон пойдёт медленнее обычного, у нас будет с чем сравнивать.</p>
<p>Ключ <code>-v</code> пригодится, когда ответ пришёл пустым. Подробный вывод показывает всю цепочку по шагам: разрешение имени, установку соединения с выходом, строку <code>CONNECT</code> для шифрованного адреса и код, которым посредник на неё ответил. По этим четырём строкам видно, на каком именно этапе оборвалась работа, и дальнейший разбор сужается до одного участка.</p>
<pre><code># подробный вывод, шифрованный целевой адрес
curl -v -x http://185.24.87.14:8000 https://example.com
* Connected to 185.24.87.14 (185.24.87.14) port 8000
&gt; CONNECT example.com:443 HTTP/1.1
&lt; HTTP/1.1 200 Connection established
* SSL connection using TLSv1.3</code></pre>
<p>Строка <code>200 Connection established</code> означает, что туннель поднят и дальше данные идут в шифрованном виде. Посредник в этот момент видит только имя площадки и объём переданного, содержимое остаётся закрытым ключами сторон. Ради этой строки первую проверку и стоит делать на адресе с <code>https</code>: она подтверждает работу сразу на том режиме, в котором пойдёт вся дальнейшая работа.</p>
<h2 id="shag-pyatyy-brauzer-i-rabochaya-programma">Шаг пятый: браузер и рабочая программа</h2>
<h3 id="tot-zhe-adres-v-brauzere">Тот же адрес в браузере</h3>
<p>После консоли повторяем проверку в браузере. Смысл повтора в том, что браузер добавляет свои слои: профиль, расширения, системные настройки сети. Команда прошла, браузер отказал, и разница между ними указывает прямо на эти слои.</p>
<p>Быстрый способ проверить без правки системных настроек это отдельный профиль, запущенный с явным указанием посредника.</p>
<pre><code># отдельный профиль Chromium с указанием выхода
chromium --proxy-server="http://185.24.87.14:8000" \
         --user-data-dir=/tmp/proxy-test</code></pre>
<p>Открываем в этом окне сервис, который показывает адрес, и сверяем цифры с ответом <code>curl</code>. Совпали: браузерная часть настроена. Расширения в свежем профиле отсутствуют, поэтому картина выходит без посторонних влияний, а рабочий профиль остаётся нетронутым.</p>
<p>Постоянная настройка браузера делается иначе: через системные параметры сети либо через расширение, которое умеет переключать выходы по одному клику. Все варианты с шагами по каждому браузеру разобраны отдельным материалом раздела, здесь нам хватило разовой проверки в отдельном окне.</p>
<h3 id="rabochaya-programma">Рабочая программа</h3>
<p>Третья проверка идёт в той программе, ради которой всё затевалось. A-Parser, ZennoPoster, Key Collector и антидетект-браузеры принимают адреса в своих полях, и формат ввода у каждого свой. Где-то строка вставляется целиком, где-то адрес, порт, логин и пароль разносятся по четырём отдельным полям.</p>
<p>Первый прогон делаем коротким: 20 запросов на знакомом домене с одним потоком. Задача этого прогона не в скорости. Мы смотрим, принимает ли программа формат, доходят ли запросы и совпадает ли выходной адрес в её логах с тем, что показал <code>curl</code>.</p>
<div class="tabl"><table><thead><tr><th>Программа</th><th>Куда вводится</th><th>Что проверяем в первом прогоне</th></tr></thead><tbody><tr><td>A-Parser</td><td>Список прокси в настройках потока</td><td>Строки приняты, отказов в логе нет</td></tr><tr><td>ZennoPoster</td><td>Настройки проекта либо чекер от Zennolab</td><td>Адрес на выходе совпадает с ожидаемым</td></tr><tr><td>Key Collector</td><td>Раздел сети и прокси</td><td>Запросы уходят, ответы приходят целиком</td></tr><tr><td>Антидетект-браузер</td><td>Карточка профиля</td><td>Профиль стартует, сайт открывается</td></tr></tbody></table></div>
<p>Если программа держит список целиком, вставляем в неё весь файл из кабинета. Одна нерабочая строка на этом шаге погоды не делает: пул большой, ротация внутри него автоматическая, и софт переберёт соседние адреса. Настройка на сервере, запуск из-под службы и работа через переменные окружения вынесены в отдельный материал раздела.</p>
<h2 id="pervyy-zapros-ne-proshel-razbor-po-poryadku">Первый запрос не прошёл: разбор по порядку</h2>
<p>Отказ на первом запросе выглядит одинаково страшно при любой причине, поэтому мы разбираем его сверху вниз, по одной переменной за шаг. Порядок такой: доступность порта, способ доступа, протокол, целевой сайт. Каждый следующий шаг берётся в работу только после того, как предыдущий дал зелёный ответ.</p>
<p><strong>Доступность порта.</strong> Проверяем, что до выхода вообще доходит соединение. Утилита <code>nc</code> или <code>telnet</code> отвечают за пару секунд, и ответ отделяет сетевую часть от всего остального.</p>
<pre><code># порт открыт и принимает соединение
nc -vz 185.24.87.14 8000
Connection to 185.24.87.14 8000 port [tcp/*] succeeded!

# порт молчит, дальше идти незачем
nc -vz 185.24.87.14 8000
nc: connect to 185.24.87.14 port 8000 (tcp) failed: Connection timed out</code></pre>
<p>Молчание порта чаще всего означает две вещи: адрес взят из старого файла либо исходящие соединения режет свой брандмауэр или корпоративная сеть. Первое закрывается свежим списком из кабинета, второе проверяется тем же <code>nc</code> с другой машины.</p>
<p><strong>Способ доступа.</strong> Порт отвечает, соединение рвётся или приходит <code>407 Proxy Authentication Required</code>. Значит, доступ не открыт: привязка оформлена на прежний адрес машины либо пара учётных данных введена неверно. Смотрим в кабинете, какой адрес указан в настройках, и сверяем его с реальным внешним адресом.</p>
<pre><code># 407 в подробном выводе
curl -v -x http://185.24.87.14:8000 https://ifconfig.me
&lt; HTTP/1.1 407 Proxy Authentication Required

# соединение оборвано на приветствии
curl: (56) Recv failure: Connection reset by peer</code></pre>
<p><strong>Протокол.</strong> Доступ открыт, ответ приходит битым или соединение закрывается сразу после установки. Проверяем префикс строки: HTTP-порт с префиксом <code>socks5://</code> и наоборот дают именно такую картину. Меняем префикс и повторяем ту же команду.</p>
<p><strong>Целевой сайт.</strong> Три предыдущих шага зелёные, <code>ifconfig.me</code> показывает адрес из пула, а нужный домен отвечает кодом 403 или отдаёт страницу проверки. Тут дело уже в приёме на стороне сайта, и разбирается оно частотой запросов, заголовками и профилем браузера.</p>
<div class="tabl"><table><thead><tr><th>Шаг разбора</th><th>Команда</th><th>Отказ выглядит как</th><th>Что делаем</th></tr></thead><tbody><tr><td>Порт</td><td><code>nc -vz адрес порт</code></td><td>Connection timed out</td><td>Берём свежий список, смотрим свой брандмауэр</td></tr><tr><td>Доступ</td><td><code>curl -v -x ...</code></td><td>407 либо reset by peer</td><td>Сверяем привязку и учётные данные в кабинете</td></tr><tr><td>Протокол</td><td><code>curl -x socks5://...</code></td><td>Пустой или битый ответ</td><td>Меняем префикс строки на верный</td></tr><tr><td>Целевой сайт</td><td><code>curl -w "%{http_code}"</code></td><td>403 или страница проверки</td><td>Снижаем частоту, правим заголовки</td></tr></tbody></table></div>
<p>Порядок держится жёстко. Тот, кто начинает разбор с заголовков и профилей, обычно тратит на это час и обнаруживает, что адрес был взят из файла, скачанного до продления пакета. Проверка порта заняла бы две секунды и закрыла бы вопрос сразу.</p>
<p>Отдельный случай выпадает из этой схемы: доступ работает, выходной адрес показывается верно, а поведение целевого сайта выглядит странно. Часто причина сидит в разрешении имён. Программа сама превращает домен в адрес через локальный сервер имён, наружу уходит уже готовый адрес, и часть картины теряется. В SOCKS5 разрешение передаётся на сторону выхода префиксом <code>socks5h://</code>, в браузерах и парсерах для того же есть отдельный переключатель в настройках сети.</p>
<p>Ещё одна ситуация встречается у тех, кто держит две привязки. Лимит потоков при двух привязанных адресах делится пополам, расчёт нагрузки при этом идёт по полной цифре, и софт упирается в потолок посреди прогона. В логах это выглядит как волна отказов на ровной нагрузке, хотя одиночный запрос через <code>curl</code> проходит нормально. Проверяется одним взглядом в настройки кабинета.</p>
<h2 id="kak-sohranit-rabochie-nastroyki">Как сохранить рабочие настройки</h2>
<p>Собранная конфигурация стоит десяти минут работы, и терять её при каждой перезагрузке незачем. Самый короткий путь на Linux и macOS это переменные окружения: их читают <code>curl</code>, <code>wget</code>, <code>pip</code>, <code>git</code> и большинство утилит, которые ходят в сеть.</p>
<pre><code># ~/.bashrc либо ~/.zshrc
export http_proxy="http://185.24.87.14:8000"
export https_proxy="http://185.24.87.14:8000"
export no_proxy="localhost,127.0.0.1,.internal"

# разовый запуск без правки профиля
http_proxy=http://185.24.87.14:8000 curl https://ifconfig.me</code></pre>
<p>Второй путь это файл <code>~/.curlrc</code>, он касается только <code>curl</code> и не влияет на остальные программы. Третий это отдельный скрипт запуска, который подставляет адрес и сразу стартует прогон. Мы держим все три в одном рабочем каталоге, и переключение между режимами занимает одну команду.</p>
<div class="tabl"><table><thead><tr><th>Что сохраняем</th><th>Куда</th><th>Зачем</th></tr></thead><tbody><tr><td>Строка подключения</td><td><code>~/.bashrc</code> или <code>~/.curlrc</code></td><td>Не собирать заново после перезагрузки</td></tr><tr><td>Ссылка на выдачу списка</td><td>Скрипт обновления перед прогоном</td><td>Свежие адреса без ручного скачивания</td></tr><tr><td>Внешний адрес машины</td><td>Заметка рядом с настройками</td><td>Быстрая сверка при отказе доступа</td></tr><tr><td>Время отклика первого запроса</td><td>Тот же файл заметок</td><td>Ориентир для сравнения при замедлении</td></tr></tbody></table></div>
<p>Отдельно про хранение пары учётных данных. Файл с ней закрываем правами <code>chmod 600</code>, а в скриптах ссылаемся на переменную окружения. Логин и пароль, вписанные в командную строку целиком, оседают в истории оболочки, и вычищать её потом дольше, чем сразу сделать правильно.</p>
<p>Ссылку на выдачу списка стоит положить в скрипт обновления. Кабинет отдаёт адрес выдачи один раз, дальше программа тянет свежие строки перед каждым запуском, и ручной шаг со скачиванием файла уходит из работы совсем. Сам пакет с потоками, привязками и безлимитным трафиком описан там, где можно <a href="https://iprazon.com/products/kupit-proxy-ipv4">купить прокси IPv4 с доступом к пулу</a>.</p>
<h2 id="chto-daet-pervoe-podklyuchenie-dalshe">Что даёт первое подключение дальше</h2>
<p>Прошедший первый запрос закрывает сразу несколько вопросов. Мы знаем, что доступ открыт, что протокол выбран верно, что программа принимает формат и что целевой сайт отвечает рабочим кодом. Все последующие сбои разбираются уже от этой точки, потому что рабочая конфигурация записана и её можно повторить в любой момент.</p>
<p>Отсюда же вырастает выбор рабочего протокола на постоянной основе. HTTP закрывает браузеры и большинство парсеров, и под них берут <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP для браузера и парсеров</a>. Программы с произвольными портами и утилиты на сокетах ходят через <a href="https://iprazon.com/products/kupit-proxy-socks5">SOCKS5 для сетевых программ и утилит</a>, где разрешение имён передаётся на сторону выхода.</p>
<p>Адреса в пуле принадлежат <a href="https://iprazon.com/proxy/servernye">серверным площадкам на собственном оборудовании</a>, география собрана из 200+ стран, выборка по отдельной стране не делается. Пул это микс со всего мира, и для сбора открытых данных, проверки выдачи и работы с несколькими кабинетами такое устройство даёт разнообразие подсетей без ручной настройки.</p>
<p>Ещё один вывод касается объёма. Трафик безлимитный на всех вариантах, счётчиков нет, поэтому первый прогон можно смело делать длинным и посмотреть на поведение целевого сайта на дистанции. Тем, у кого выгрузка идёт круглосуточно, спокойнее работается на <a href="https://iprazon.com/proxy/bezlimitnye">пакетах без счётчиков трафика</a>.</p>
<p>Если первое подключение прошло на тесте, порядок остаётся тем же и после оплаты. Бесплатный тест длится до 2 часов и идёт под конкретный запрос, поэтому все шаги отсюда повторяются один в один, включая формат списка и способ доступа. Полный состав пакетов по срокам и потокам смотрят на странице, где оформляют <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакеты прокси IPv4 на общий пул</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kak-podklyuchitsya-k-proksi-srazu-posle-poku">Как подключиться к прокси сразу после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и покупки указываем свой адрес в настройках либо берём формат списка с логином и паролем. Пакет включается примерно за 5 минут, после чего раздел выдачи отдаёт адреса ссылкой или файлом, и первый запрос через <code>curl</code> уже проходит.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два на выбор: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Первый рассчитан на доступ по привязанному адресу, второй содержит пару учётных данных внутри строки. Забрать список можно ссылкой либо файлом, оба варианта доступны в разделе выдачи.</p>
<h3 id="chem-proveryat-proksi-krome-curl">Чем проверять прокси, кроме curl?</h3>
<p>Для проверки списка пачкой подходит чекер от Zennolab, у него есть демонстрационная версия. Он проходит строки серией и показывает отвечающие адреса, время отклика и тип прокси. Для одиночной проверки <code>curl</code> остаётся самым коротким путём.</p>
<h3 id="pochemu-vyhodnoy-adres-menyaetsya-ot-zaprosa">Почему выходной адрес меняется от запроса к запросу?</h3>
<p>Ротация внутри пула автоматическая, и адреса приходят из микса со всего мира. Онлайн держится в районе 12 000 адресов, список обновляется в реальном времени. Для задач вроде сбора открытых данных и проверки выдачи такое устройство пула даёт разнообразие подсетей само по себе.</p>
<p>Дальше по этому разделу разобраны детали, которые здесь остались в общих чертах: <a href="/podklyuchenie/stroka-podklyucheniya/">строка подключения по полям</a> с разбором каждого двоеточия, <a href="/podklyuchenie/v-brauzere/">постоянная настройка браузера</a> через параметры сети и расширения, <a href="/podklyuchenie/v-programmah/">запуск в программах и на сервере</a> через переменные окружения и конфиги. Когда подключение работает, следующий шаг это <a href="/proverka/kak-proverit/">проверка прокси командами и в браузере</a> с разбором ответов.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/pervoe-podklyuchenie/">https://kupit-proxy-ipv4.ru/podklyuchenie/pervoe-podklyuchenie/</a></p>]]></content:encoded></item>
<item><title>Привязка IP адреса к прокси: как она работает и когда её менять</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/privyazka-adresa/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/privyazka-adresa/</guid><description>Привязка адреса это способ открыть доступ без логина и пароля: в кабинете указывается внешний адрес машины, и прокси начинают пропускать запросы, которые…</description><content:encoded><![CDATA[
<p class="vvod">Привязка адреса это способ открыть доступ без логина и пароля: в кабинете указывается внешний адрес машины, и прокси начинают пропускать запросы, которые приходят именно с него. В пакет входит одновременная привязка 2 адресов, менять их разрешено свободно прямо в настройках, при этом общий лимит потоков при двух привязках делится между ними пополам.</p>
<p>Дальше разобрано, как узнать свой внешний адрес разными способами, какие схемы работы закрывают две привязки, что происходит при смене адреса провайдером и как это видно по отказам. В конце сравнение двух способов доступа по ситуациям и разбор работы нескольких машин через один общий шлюз.</p>
<h2 id="chto-proishodit-pri-privyazke-adresa">Что происходит при привязке адреса</h2>
<p>Проверка права на доступ живёт на стороне выхода. Когда запрос приходит на порт прокси, сервер смотрит на адрес отправителя и сверяет его со списком привязок нашего пакета. Совпадение открывает соединение, расхождение закрывает его до всякого обмена данными.</p>
<p>Отсюда следуют три свойства, которые определяют всю дальнейшую работу. Учётные данные не передаются вообще, поэтому в конфигах софта и в истории команд нечему оседать. Строка подключения выходит короткой: только адрес выхода и порт. Доступ жёстко связан с местом, откуда идут запросы, поэтому переезд машины требует одной правки в кабинете.</p>
<pre><code># строка при доступе по привязке, пары нет вовсе
http://185.24.87.14:8000

# та же машина, доступ по учётным данным
http://user5521:pf39kd@185.24.87.14:8000</code></pre>
<p>Список адресов в кабинете под привязку берётся в формате <code>IP:PORT</code>. Второй формат, <code>IP:PORT:LOGIN:PASS</code>, несёт пару внутри строки и рассчитан на другой способ доступа. Оба формата мы отдаём одним и тем же разделом выдачи, ссылкой либо файлом, и переключение между ними занимает секунды. Такой доступ входит в состав пакетов с <a href="https://iprazon.com/proxy/privatnye">приватным доступом к пулу IPv4</a>, где привязка настраивается прямо из панели.</p>
<h2 id="kak-uznat-svoy-vneshniy-adres">Как узнать свой внешний адрес</h2>
<p>Внешний адрес машины отличается от того, что показывает <code>ipconfig</code> или <code>ifconfig</code> внутри системы. Локально видна цифра из домашней или офисной сети, наружу же машина выходит под адресом, который выдал провайдер или дата-центр. В кабинет вписываем именно внешний, и берём его с той машины, с которой пойдут запросы.</p>
<pre><code># Linux и macOS, короткий ответ одной строкой
curl -s https://ifconfig.me
203.0.113.45

# то же самое без внешних сервисов, через публичный резолвер
dig +short myip.opendns.com @resolver1.opendns.com
203.0.113.45

# Windows, PowerShell
Invoke-RestMethod https://api.ipify.org
203.0.113.45

# сервер без публичных сервисов вообще
ip route get 1.1.1.1</code></pre>
<div class="tabl"><table><thead><tr><th>Способ</th><th>Где работает</th><th>Что даёт</th><th>Когда удобен</th></tr></thead><tbody><tr><td><code>curl -s https://ifconfig.me</code></td><td>Linux, macOS, Windows с curl</td><td>Внешний адрес одной строкой</td><td>Быстрая проверка перед правкой привязки</td></tr><tr><td><code>dig +short myip.opendns.com</code></td><td>Linux, macOS</td><td>Ответ от публичного резолвера</td><td>Когда сайты-эхо недоступны</td></tr><tr><td><code>Invoke-RestMethod</code> в PowerShell</td><td>Windows</td><td>Внешний адрес в консоли</td><td>Машины без установленного curl</td></tr><tr><td>Сайт проверки в браузере</td><td>Любая система</td><td>Адрес плюс заголовки запроса</td><td>Проверка с ноутбука или телефона</td></tr><tr><td>Панель роутера</td><td>Домашняя и офисная сеть</td><td>Адрес на WAN-интерфейсе</td><td>Общий шлюз на несколько машин</td></tr><tr><td>Панель хостинга</td><td>Арендованный сервер</td><td>Адрес, выданный площадкой</td><td>Настройка привязки для сервера</td></tr></tbody></table></div>
<p>Проверять адрес нужно без включённого посредника. Если браузер или консоль уже ходят через пул, ответ покажет адрес выхода, и в кабинет уйдёт неверная цифра. Признак ошибки заметный: вписанный адрес совпадает с одной из строк списка прокси, а доступ после сохранения не работает.</p>
<p>Отдельная тонкость касается сетей с несколькими каналами. Машина с двумя провайдерами или сервер за балансировщиком может выходить наружу под разными адресами, и тогда ответ сервиса-эхо меняется от запроса к запросу. Тут привязку выставляем по адресу того интерфейса, через который реально пойдёт рабочий трафик, а маршрут при необходимости фиксируется на стороне системы.</p>
<h2 id="gde-privyazka-zadaetsya-v-kabinete">Где привязка задаётся в кабинете</h2>
<p>Настройки привязки лежат в разделе доступа рядом со списком пакетов. Внутри два поля под адреса, кнопка сохранения и текущий статус каждой привязки. Правка вступает в силу без переоформления пакета: адрес заменяется, сохраняется, и следующий запрос уже проходит проверку по новому значению.</p>
<p>Порядок первой настройки короткий. Открываем раздел, узнаём внешний адрес рабочей машины одним из способов выше, вписываем его в первое поле и сохраняем. Второе поле держим пустым, пока вторая машина реально не понадобится: пустая привязка отдаёт весь лимит потоков первой стороне.</p>
<div class="tabl"><table><thead><tr><th>Действие в кабинете</th><th>Что меняется</th><th>Через сколько работает</th></tr></thead><tbody><tr><td>Вписать адрес в первое поле</td><td>Доступ открывается с этой машины</td><td>Сразу после сохранения</td></tr><tr><td>Добавить второй адрес</td><td>Открывается вторая сторона</td><td>Сразу после сохранения</td></tr><tr><td>Заменить адрес в поле</td><td>Прежний адрес перестаёт проходить</td><td>Сразу после сохранения</td></tr><tr><td>Очистить второе поле</td><td>Весь лимит потоков идёт первой стороне</td><td>Сразу после сохранения</td></tr></tbody></table></div>
<p>Число правок ничем не ограничено. Провайдер выдал новый адрес утром, машина переехала в другую сеть, сотрудник ушёл работать из дома: во всех случаях правится одно поле. Полная процедура переезда со всеми проверками до и после разобрана в материале про <a href="/podklyuchenie/smena-privyazki/">смену привязанного адреса</a>.</p>
<h2 id="dve-privyazki-v-pakete-i-delenie-limita-poto">Две привязки в пакете и деление лимита потоков</h2>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Это одна из тех вещей, которые мы разбираем до расчёта нагрузки, потому что вторая привязка меняет арифметику потоков. При двух привязанных адресах общее число потоков делится между ними пополам.</p>
<p>Считается это в одно действие. Стандартный пакет даёт до 1000 потоков: одна привязка получает всю тысячу, две привязки получают по 500 каждая. Корпоративный пакет с лимитом до 3000 при двух привязках даёт по 1500 на сторону. Пакеты по потокам не складываются, поэтому два стандартных пакета на одном аккаунте работают каждый со своим лимитом.</p>
<div class="tabl"><table><thead><tr><th>Пакет</th><th>Одна привязка</th><th>Две привязки</th><th>На что хватает второй стороне</th></tr></thead><tbody><tr><td>Стандартный, до 1000 потоков</td><td>1000 на одну машину</td><td>500 и 500</td><td>Съём позиций, проверка выдачи, мониторинг</td></tr><tr><td>Стандартный, рабочий режим 300 потоков</td><td>300 с запасом до 1000</td><td>300 и 200 внутри лимита</td><td>Параллельный сбор прайсов</td></tr><tr><td>Корпоративный, до 3000 потоков</td><td>3000 на одну машину</td><td>1500 и 1500</td><td>Полноценный второй прогон на сервере</td></tr><tr><td>Два отдельных пакета</td><td>Свой лимит у каждого</td><td>Свои привязки у каждого</td><td>Независимые проекты без взаимного влияния</td></tr></tbody></table></div>
<p>Практический вывод простой. Держать вторую привязку заполненной ради запаса невыгодно: половина лимита уходит на машину, которая простаивает. Пока работа идёт с одной стороны, второе поле мы держим пустым, и весь лимит достаётся рабочему прогону.</p>
<p>Обратный случай тоже встречается. Прогон упирается в потолок на обеих сторонах, обе машины загружены полностью, и нагрузка растёт дальше. Тут поднимаем сам пакет: переход на вариант с лимитом до 3000 потоков даёт по 1500 на каждую привязку, чего хватает на два тяжёлых прогона одновременно.</p>
<h2 id="tipovye-shemy-raboty-s-dvumya-privyazkami">Типовые схемы работы с двумя привязками</h2>
<p>Две привязки закрывают почти все рабочие расклады небольшой команды. Ниже четыре схемы, которые мы видим чаще остальных, с распределением потоков внутри стандартного пакета.</p>
<p><strong>Рабочая машина плюс сервер.</strong> Самая частая пара. На ноутбуке идёт настройка проектов, отладка шаблонов и ручные проверки, на арендованном сервере крутится ночной прогон по расписанию. Нагрузка распределена по времени суток, поэтому деление лимита пополам почти не ощущается: днём работает одна сторона, ночью другая. Серверная часть обычно ставится на <a href="https://iprazon.com/proxy/servernye">серверные адреса под постоянный прогон</a>, где внешний адрес известен заранее и не меняется.</p>
<p><strong>Две машины команды.</strong> Разработчик и специалист по сбору данных работают параллельно, каждый со своей стороны. Тут деление лимита ощущается сильнее, потому что нагрузка идёт одновременно. Схема работает, когда суммарная потребность укладывается в лимит пакета: два прогона по 300 потоков спокойно живут внутри стандартной тысячи.</p>
<p><strong>Домашний адрес плюс офисный.</strong> Один человек, два места работы. Обе привязки заполнены, но активна всегда одна, поэтому половина лимита в каждый момент простаивает. Если рабочий прогон тяжёлый, разумнее держать одну привязку и переписывать её при переходе между местами: правка занимает полминуты и возвращает полный лимит.</p>
<p><strong>Сервер плюс запасной сервер.</strong> Схема для тех, у кого прогон идёт непрерывно. Основная площадка работает, вторая стоит настроенной и готовой принять нагрузку. Половина лимита при этом резервируется под запасную сторону, и это осознанная плата за возможность переключиться одной командой.</p>
<div class="tabl"><table><thead><tr><th>Схема</th><th>Первая сторона</th><th>Вторая сторона</th><th>Потоки при пакете до 1000</th></tr></thead><tbody><tr><td>Рабочая машина плюс сервер</td><td>Ноутбук, ручные проверки</td><td>Сервер, ночной прогон</td><td>500 и 500, пик по времени разнесён</td></tr><tr><td>Две машины команды</td><td>Специалист по сбору</td><td>Разработчик</td><td>500 и 500 одновременно</td></tr><tr><td>Дом плюс офис</td><td>Домашний адрес</td><td>Офисный адрес</td><td>500 и 500, активна одна</td></tr><tr><td>Основной плюс запасной сервер</td><td>Рабочая площадка</td><td>Резерв</td><td>500 и 500, резерв простаивает</td></tr><tr><td>Одна машина, второе поле пустое</td><td>Рабочий прогон</td><td>Пусто</td><td>1000 целиком одной стороне</td></tr></tbody></table></div>
<p>Выбор схемы держится на одном вопросе: работают ли обе стороны одновременно. Разнесённая по времени нагрузка живёт с двумя привязками свободно. Одновременная требует сложить обе потребности и сверить сумму с лимитом нашего пакета до начала работы.</p>
<h2 id="provayder-smenil-adres-kak-eto-vyglyadit">Провайдер сменил адрес: как это выглядит</h2>
<p>Внешний адрес домашнего или офисного подключения меняется сам по себе. Перезагрузка роутера, обрыв на линии, плановая работа на стороне провайдера: любой из этих поводов выдаёт новую цифру. Привязка при этом остаётся прежней, и доступ закрывается ровно в тот момент, когда новый адрес впервые пошёл наружу.</p>
<p>Картина отказа узнаваемая. Соединение с портом устанавливается, потому что порт открыт для всех, а вот проверка права не проходит. Ответ приходит либо кодом <code>407 Proxy Authentication Required</code>, либо обрывом соединения сразу после приветствия.</p>
<pre><code># было вчера
curl -x http://185.24.87.14:8000 https://ifconfig.me
185.24.87.14

# стало утром после перезагрузки роутера
curl -x http://185.24.87.14:8000 https://ifconfig.me
curl: (56) Recv failure: Connection reset by peer

# проверяем свой адрес напрямую, цифра поменялась
curl -s https://ifconfig.me
203.0.113.78</code></pre>
<p>Опознаётся ситуация за минуту. Массовые отказы начались одномоментно, все сразу, без постепенного нарастания. Отказ приходит на каждом адресе списка, включая заведомо рабочие. При этом любой запрос без посредника проходит нормально, интернет на машине живой. Три признака вместе указывают на привязку, и первое, что мы делаем, это сверяем текущий внешний адрес с тем, что записан в кабинете. Разбор самого кода отказа с примерами по каждой причине собран в материале про <a href="/proverka/oshibka-407/">ошибку 407 и порядок действий</a>.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>Что видно</th><th>Куда смотреть</th></tr></thead><tbody><tr><td>Отказ на всех адресах сразу</td><td>Ни одна строка списка не отвечает</td><td>Внешний адрес машины</td></tr><tr><td>Обрыв соединения после приветствия</td><td><code>Recv failure: Connection reset</code></td><td>Поле привязки в кабинете</td></tr><tr><td>Код 407 в подробном выводе</td><td><code>407 Proxy Authentication Required</code></td><td>Совпадение адреса с записанным</td></tr><tr><td>Прямые запросы проходят</td><td>Сайты открываются без посредника</td><td>Сеть в порядке, дело в доступе</td></tr></tbody></table></div>
<p>Лечим это одной правкой: узнаём свежий адрес, вписываем его в поле привязки, сохраняем и повторяем запрос. Менять привязанный адрес разрешено без ограничений, поэтому меняющийся адрес провайдера работе не мешает. Тем, кто устал править поле каждое утро, подходит второй способ доступа с парой учётных данных: он к адресу машины не привязан вовсе.</p>
<h2 id="privyazka-i-para-uchetnyh-dannyh-gde-kakoy-s">Привязка и пара учётных данных: где какой способ удобнее</h2>
<p>Оба способа входят в пакет и переключаются свободно. Разница, которую мы тут разбираем, сидит в том, к чему привязано право на доступ: к месту выхода в сеть либо к паре, которую вводит человек. Отсюда и вырастают ситуации, где каждый чувствует себя лучше.</p>
<p>Привязка выигрывает там, где адрес стабилен. Арендованный сервер, офисная сеть с постоянным адресом, рабочая станция администратора: доступ настраивается один раз и живёт месяцами. Строка подключения при этом короткая, учётные данные не хранятся ни в конфигах, ни в переменных окружения, ни в истории команд. Скрипт с такой строкой можно спокойно положить в общий репозиторий команды.</p>
<p>Пара учётных данных выигрывает там, где машин много или адрес плавает. Ноутбук в разъездах, несколько машин у подрядчиков, облачные сборщики с меняющимися узлами, антидетект-браузер с профилями на разных устройствах: везде тут доступ открывается вводом пары, и адрес выхода значения не имеет. Такой формат удобен и для <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP с доступом по логину</a>, где строка подключения вводится прямо в поле программы.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Удобнее привязка</th><th>Удобнее пара учётных данных</th></tr></thead><tbody><tr><td>Арендованный сервер с постоянным адресом</td><td>Да, настраивается один раз</td><td>Работает тоже</td></tr><tr><td>Ноутбук в разъездах</td><td>Требует правки при каждой смене сети</td><td>Да, адрес значения не имеет</td></tr><tr><td>Три машины подрядчиков</td><td>Двух полей мало</td><td>Да, пара раздаётся каждому</td></tr><tr><td>Скрипт в общем репозитории</td><td>Да, учётных данных в коде нет</td><td>Требует вынести пару в переменные</td></tr><tr><td>Антидетект с профилями на разных устройствах</td><td>Ограничено двумя адресами</td><td>Да, профили работают независимо</td></tr><tr><td>Домашний адрес от провайдера</td><td>Работает с правкой поля при смене</td><td>Да, правок не требует</td></tr></tbody></table></div>
<p>Многие держат оба способа одновременно. Сервер ходит по привязке, ноутбук по паре, лимит потоков при этом остаётся общим на пакет. Такая комбинация закрывает и постоянную площадку, и подвижную сторону, и переключение между ними ничего не ломает. Сравнение способов доступа во всех подробностях вынесено в отдельный материал, ссылка на него стоит в конце.</p>
<h2 id="neskolko-mashin-cherez-odin-obschiy-shlyuz">Несколько машин через один общий шлюз</h2>
<p>Отдельный расклад: машин в работе больше двух, а внешний адрес у них один. Так устроена офисная сеть с общим маршрутизатором, так же ведёт себя группа виртуальных машин за одним NAT на арендованной площадке. Наружу все они выходят под адресом шлюза, и наша проверка на стороне выхода видит одну цифру.</p>
<p>Работает это нам на пользу. Одна привязка на адрес шлюза открывает доступ всем машинам за ним, и число машин при этом ничем не ограничено. Пять рабочих станций в офисе, десяток контейнеров на сервере, парк виртуалок под разные проекты: всё живёт под одним полем в кабинете.</p>
<pre><code># все машины за одним шлюзом видят один внешний адрес
# station-01
curl -s https://ifconfig.me
203.0.113.45

# station-07
curl -s https://ifconfig.me
203.0.113.45</code></pre>
<p>Единственное, что здесь считается отдельно, это потоки. Лимит выдаётся на пакет целиком, и все машины за шлюзом делят его между собой. Пакет до 1000 потоков при пяти рабочих станциях даёт каждой по 200 соединений, при десяти уже по 100. Арифметика простая, зато она определяет, какой пакет брать под офис.</p>
<p>Вторая привязка в такой схеме уходит под площадку с другим шлюзом. Офис плюс арендованный сервер, головной офис плюс филиал, продакшн плюс тестовая площадка: две сети, две привязки, лимит поделён пополам между ними. Внутри каждой сети машин может быть сколько угодно. Программы на сокетах при этом ходят через <a href="https://iprazon.com/products/kupit-proxy-socks5">SOCKS5 внутри того же пакета</a>, протокол на способ доступа никак не влияет.</p>
<p>Есть и обратная сторона общего шлюза, про которую полезно знать заранее. Целевой сайт видит запросы всех машин как поток с одного адреса выхода, потому что пул выдаёт адреса по ротации внутри себя, а вот исходная сторона у них общая. На поведении сайта это не сказывается, потому что наружу идёт адрес из пула, и разнообразие подсетей обеспечивается самим пулом на 12 000 адресов.</p>
<h2 id="chto-zapisat-chtoby-privyazka-ne-podvodila">Что записать, чтобы привязка не подводила</h2>
<p>Настройка привязки занимает минуту, а вот вспомнить через месяц, какой адрес там стоит и откуда он взялся, получается не всегда. Пара строк в рабочих заметках снимает этот вопрос совсем.</p>
<p>Записываем три вещи, дальше их держим рядом с конфигами. Первая: текущий внешний адрес каждой рабочей машины и дата последней сверки. Вторая: какая машина сидит в первом поле, какая во втором. Третья: команда, которой этот адрес проверяется, чтобы не искать её заново. Всё вместе занимает четыре строки текстового файла рядом с конфигами прогона.</p>
<pre><code># proxy-access.txt
# первое поле:  сервер парсинга, 198.51.100.20, сверено при настройке
# второе поле:  пусто, весь лимит идёт серверу
# проверка адреса: curl -s https://ifconfig.me
# доступ: формат IP:PORT, порт 8000</code></pre>
<p>Тем, у кого адрес меняется регулярно, помогает короткая проверка перед стартом прогона. Скрипт спрашивает внешний адрес, мы сравниваем его с записанным и печатает предупреждение при расхождении. Это дешевле, чем обнаружить смену адреса по волне отказов посреди ночной выгрузки.</p>
<pre><code># краткая сверка перед запуском
CUR=$(curl -s https://ifconfig.me)
SAVED=198.51.100.20
[ "$CUR" = "$SAVED" ] &amp;&amp; echo "адрес прежний" || echo "адрес сменился: $CUR"</code></pre>
<p>Такой подход хорошо работает вместе с автоматическим обновлением списка прокси. Кабинет отдаёт ссылку на выдачу, скрипт тянет свежие строки, тут же сверяет внешний адрес, и оба источника отказов закрываются одной проверкой перед запуском. Всё это доступно на любом сроке в составе пакетов с <a href="https://iprazon.com/proxy/privatnye">приватными адресами и привязкой машины</a>, где два поля доступа открыты изначально. Полный состав пакета по потокам, привязкам и безлимитному трафику смотрят там, где оформляют <a href="https://iprazon.com/products/kupit-proxy-ipv4">прокси IPv4 с двумя привязками в пакете</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Оба поля доступны сразу после включения пакета, и заполнять их можно по мере надобности. При двух привязанных адресах общее число потоков делится между ними пополам, поэтому вторую привязку заводят тогда, когда вторая машина реально идёт в работу.</p>
<h3 id="chto-delat-esli-u-menya-dinamicheskiy-adres">Что делать, если у меня динамический адрес?</h3>
<p>Привязанный адрес можно менять без ограничений прямо в настройках кабинета. Узнаём свежий внешний адрес одной командой, вписываем его в поле, сохраняем, и следующий запрос уже проходит. Тем, кому правка каждое утро неудобна, подходит второй способ доступа с логином и паролем: он к адресу машины не привязан.</p>
<h3 id="est-li-limity-po-potokam">Есть ли лимиты по потокам?</h3>
<p>У каждого пакета свой лимит: стандартные пакеты дают до 1000 потоков, корпоративный до 3000. При двух привязанных адресах общее число делится пополам. Пакеты по потокам не складываются, поэтому рост нагрузки закрывается переходом на старший вариант. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и покупки указываем свой адрес в настройках доступа. Пакет включается примерно за 5 минут, после чего раздел выдачи отдаёт список в формате <code>IP:PORT</code> ссылкой или файлом. Дальше строка вставляется в софт, и первый запрос проходит без учётных данных.</p>
<p>Дальше по разделу подключения разобраны соседние вопросы: <a href="/podklyuchenie/pervoe-podklyuchenie/">первый проход от списка до рабочего запроса</a> с командами и ответами, <a href="/podklyuchenie/stroka-podklyucheniya/">разбор строки подключения по полям</a> со всеми двоеточиями, <a href="/podklyuchenie/v-programmah/">настройка в программах и на сервере</a> через конфиги и переменные окружения. Общее сравнение двух способов доступа лежит в основах, в материале про <a href="/osnovy/avtorizaciya/">два способа авторизации прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/privyazka-adresa/">https://kupit-proxy-ipv4.ru/podklyuchenie/privyazka-adresa/</a></p>]]></content:encoded></item>
<item><title>Строка подключения прокси: разбор по полям</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/stroka-podklyucheniya/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/stroka-podklyucheniya/</guid><description>Строка подключения прокси собирается по одному шаблону: схема://логин:пароль@адрес:порт. Схема задаёт протокол, логин с паролем открывают доступ, адрес и…</description><content:encoded><![CDATA[
<p class="vvod">Строка подключения прокси собирается по одному шаблону: <code>схема://логин:пароль@адрес:порт</code>. Схема задаёт протокол, логин с паролем открывают доступ, адрес и порт берутся из списка, который выдаёт кабинет. Когда доступ открыт привязкой рабочего адреса, середина с учётными данными убирается целиком, и остаётся короткая запись вида <code>схема://адрес:порт</code>.</p>
<p>Дальше разобрано каждое поле по отдельности: что оно означает, откуда берётся его значение, где его разрешено опустить и чем оборачивается ошибка. Отдельно собраны места ввода: переменные окружения, ключ командной строки, настройки библиотеки запросов, конфиг программы и поле антидетект-браузера. Завершает разбор таблица типовых опечаток с описанием того, что каждая даёт на выходе.</p>
<h2 id="iz-kakih-poley-sostoit-stroka">Из каких полей состоит строка</h2>
<p>Строка подключения повторяет форму обычного веб-адреса, поэтому её читают почти все программы. Слева стоит схема и два слеша. Дальше идёт необязательная часть с учётными данными, она заканчивается символом собаки. Справа от собаки стоят хост и порт, разделённые двоеточием.</p>
<p>Разделители тут работают строго: двоеточие внутри учётной части отделяет логин от пароля, собака закрывает учётную часть, двоеточие справа отделяет порт от хоста. Программа читает строку слева направо и делит её ровно по этим знакам. Отсюда главное правило записи: любой из этих знаков внутри пароля ломает разбор, потому что программа принимает его за разделитель и режет строку в неверном месте.</p>
<div class="tabl"><table><thead><tr><th>Поле</th><th>Что означает</th><th>Пример значения</th><th>Когда обязательно</th></tr></thead><tbody><tr><td>Схема</td><td>Протокол общения с посредником</td><td><code>http</code>, <code>socks5h</code></td><td>Почти везде, кроме полей с выпадающим списком типа</td></tr><tr><td>Логин</td><td>Имя учётной записи пакета</td><td><code>user5521</code></td><td>При доступе по учётным данным</td></tr><tr><td>Пароль</td><td>Пароль той же учётной записи</td><td><code>pf39kd</code></td><td>При доступе по учётным данным</td></tr><tr><td>Собака</td><td>Граница между учётной частью и хостом</td><td><code>@</code></td><td>Когда логин с паролем присутствуют</td></tr><tr><td>Адрес</td><td>Хост посредника из выданного списка</td><td><code>185.24.87.14</code></td><td>Всегда</td></tr><tr><td>Порт</td><td>Порт посредника из той же строки списка</td><td><code>8000</code></td><td>Всегда</td></tr></tbody></table></div>
<p>Полезно помнить и про то, чего в строке подключения быть не должно. Путь после порта сюда не пишется: посредник получает целевой адрес отдельно, внутри самого запроса. Параметры после вопросительного знака тоже лишние. Строка заканчивается портом, и всё, что дописано справа, либо отбрасывается, либо ломает разбор. Это отличает её от адреса сайта, хотя внешне формы похожи.</p>
<p>Короткий вариант выглядит так: <code>http://185.24.87.14:8000</code>. Полный вариант с учётными данными выглядит так: <code>http://user5521:pf39kd@185.24.87.14:8000</code>. Обе записи ведут на один и тот же порт одного и того же посредника, различие сидит только в наличии учётной части. Мы выдаём список сразу в двух форматах, поэтому собрать любую из этих строк можно копированием, без ручной перепечатки цифр.</p>
<h2 id="shema-kakie-byvayut-i-chto-kazhdaya-oznachae">Схема: какие бывают и что каждая означает</h2>
<p>Схема стоит первой и определяет, по какому протоколу программа договаривается с посредником. Здесь чаще всего и ошибаются: пишут <code>https</code> там, где нужен <code>http</code>, и получают отказ соединения на пустом месте. Схема описывает канал до посредника, при этом целевой сайт может открываться по любому протоколу.</p>
<div class="tabl"><table><thead><tr><th>Схема</th><th>Что означает</th><th>Разрешение имён</th><th>Где встречается</th></tr></thead><tbody><tr><td><code>http</code></td><td>Обычный HTTP-посредник, к нему же уходят и запросы к сайтам по HTTPS через туннель</td><td>На стороне программы</td><td>curl, переменные окружения, парсеры, браузеры</td></tr><tr><td><code>https</code></td><td>Канал до самого посредника шифруется</td><td>На стороне программы</td><td>Программы с поддержкой шифрованного канала до посредника</td></tr><tr><td><code>socks4</code></td><td>Сокетный посредник ранней версии, учётных данных в протоколе нет</td><td>На стороне программы</td><td>Старые программы и конфиги</td></tr><tr><td><code>socks5</code></td><td>Сокетный посредник с поддержкой учётных данных</td><td>На стороне программы</td><td>curl, браузеры, антидетект-браузеры</td></tr><tr><td><code>socks5h</code></td><td>То же самое, имя целевого домена уходит на выход</td><td>На стороне посредника</td><td>curl, python, программы на базе curl</td></tr></tbody></table></div>
<p>Буква <code>h</code> в конце схемы отвечает за то, кто превращает имя домена в адрес. Без неё имя разрешает локальная машина, и наружу через обычный резолвер уходит сам домен. С ней имя уезжает внутрь туннеля и разрешается на выходе. Для работы через посредника вторая форма спокойнее, и в curl она пишется одной буквой. Подробности сокетного протокола разобраны там, где мы описываем <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 с доступом к общему пулу</a>.</p>
<p>Отличие <code>http</code> от <code>https</code> в схеме путает чаще прочего. Схема <code>http</code> не мешает открывать сайты по шифрованному протоколу: программа просит у посредника туннель методом CONNECT и дальше ведёт шифрованный обмен внутри него. Схема <code>https</code> означает другое: шифруется сам канал до посредника. Разбор туннеля и его поведения мы вынесли в материал <a href="/protokoly/http-https-socks/">про протоколы HTTP, HTTPS и SOCKS</a>, здесь достаточно помнить, что первая часть строки описывает участок до посредника. Если программа умеет шифровать этот участок, ей подойдёт <a href="https://iprazon.com/products/kupit-proxy-https">канал до посредника по HTTPS</a>.</p>
<h2 id="adres-i-port-otkuda-oni-berutsya">Адрес и порт: откуда они берутся</h2>
<p>Оба значения приходят из кабинета. Список выдаётся в двух форматах: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Забрать его можно ссылкой или файлом, оба варианта лежат в разделе выдачи. Список обновляется в реальном времени, пул держится в районе 12 000 активных адресов, ротация внутри пула автоматическая.</p>
<pre><code># формат из двух полей
185.24.87.14:8000
185.24.87.15:8000

# формат из четырёх полей
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<p>Превращение строки списка в строку подключения делается механически. Первое поле идёт в позицию адреса, второе в позицию порта, третье и четвёртое переезжают влево от собаки и меняются местами с хостом. Из строки <code>185.24.87.14:8000:user5521:pf39kd</code> получается <code>http://user5521:pf39kd@185.24.87.14:8000</code>. Порядок полей в списке и порядок полей в строке подключения различаются, и это единственное место, где новичок путается.</p>
<pre><code># превращаем строку списка в строку подключения одной командой
awk -F: '{print "http://"$3":"$4"@"$1":"$2}' proxy.txt &gt; urls.txt</code></pre>
<p>Отдельный вопрос: какую строку списка брать. Пул устроен как микс со всего мира, ротация внутри него автоматическая, поэтому любая строка выдачи рабочая. Программы, которые ходят по списку сами, обычно берут строки по кругу или случайно. Для ручной проверки берём первую строку файла и не ищем в ней особого смысла: адреса равноправны, и результат от выбора строки не зависит.</p>
<p>Порт из списка используется без изменений. Придумывать другой порт по аналогии с чужими инструкциями бессмысленно: посредник слушает ровно тот порт, который выдан вместе с адресом. Мы отдаём список целиком, поэтому проверить порт можно прямо в файле выдачи, не заглядывая в переписку. Полный состав пакета описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к списку адресов IPv4</a>.</p>
<h2 id="login-s-parolem-ili-dostup-po-privyazke">Логин с паролем или доступ по привязке</h2>
<p>Учётная часть строки нужна тогда, когда доступ открыт парой логина и пароля. При доступе по привязанному адресу она лишняя: посредник узнаёт клиента по адресу машины, с которой пришёл запрос, и никаких полей внутри строки для этого не требуется. В пакет входит одновременная привязка 2 адресов, менять их разрешено свободно прямо в настройках.</p>
<p>Выбор между способами держится на одном вопросе: постоянный ли адрес у машины, с которой идут запросы. Сервер с постоянным адресом удобно привязать один раз и дальше работать короткими строками. Ноутбук, который переезжает между сетями, проще держать на учётных данных: строка длиннее, зато она работает из любой точки. Механику привязки мы разобрали в отдельном материале <a href="/podklyuchenie/privyazka-adresa/">про привязку своего адреса</a>.</p>
<p>Одна деталь влияет на расчёт нагрузки. При двух привязанных адресах общий лимит потоков делится между ними пополам: пакет на 1000 потоков даёт по 500 на каждый адрес. Если основной прогон идёт с одной машины, вторую привязку разумнее держать свободной до момента, когда она понадобится.</p>
<p>Смешивать способы в одной строке не нужно. Учётные данные, вписанные при работающей привязке, обычно проходят без возражений, потому что проверка права уже пройдена по адресу. Обратная ситуация даёт отказ: строка без учётной части с машины, чей адрес в настройках не указан, получает ответ 407 с требованием авторизации. Полный разбор этого кода мы вынесли в материал <a href="/proverka/oshibka-407/">про ошибку 407</a>.</p>
<h2 id="specsimvoly-v-parole-i-procentnoe-kodirovani">Спецсимволы в пароле и процентное кодирование</h2>
<p>Пароль иногда содержит знаки, которые строка подключения трактует как разделители. Собака, двоеточие, слеш, вопросительный знак и решётка внутри пароля рвут разбор. Программа честно читает строку по своим правилам и делит её там, где встретила служебный знак. Итог: неверный хост, неверный порт или отказ разобрать адрес.</p>
<p>Лечится это процентным кодированием. Служебный символ записывается тремя знаками: процент и два шестнадцатеричных разряда его кода. Кодируется только та часть строки, где символ мешает, обычно это пароль и логин.</p>
<div class="tabl"><table><thead><tr><th>Символ</th><th>Запись в строке</th><th>Что ломает без кодирования</th></tr></thead><tbody><tr><td><code>@</code></td><td><code>%40</code></td><td>Программа берёт хостом кусок пароля после собаки</td></tr><tr><td><code>:</code></td><td><code>%3A</code></td><td>Пароль обрезается по первому двоеточию</td></tr><tr><td><code>/</code></td><td><code>%2F</code></td><td>Начинается разбор пути, хост теряется</td></tr><tr><td><code>?</code></td><td><code>%3F</code></td><td>Остаток строки уходит в параметры запроса</td></tr><tr><td><code>#</code></td><td><code>%23</code></td><td>Всё после знака отбрасывается как якорь</td></tr><tr><td><code>%</code></td><td><code>%25</code></td><td>Соседние символы читаются как код</td></tr></tbody></table></div>
<p>Пароль <code>p@ss:1</code> записывается как <code>p%40ss%3A1</code>, и строка целиком выглядит так: <code>http://user5521:p%40ss%3A1@185.24.87.14:8000</code>. Правая собака остаётся настоящим разделителем, левая уехала в код и разбор больше не путает. Считать коды руками не нужно, их выдаёт любая среда одной строчкой.</p>
<pre><code># кодируем пароль перед подстановкой в строку
python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" 'p@ss:1'
# -&gt; p%40ss%3A1</code></pre>
<pre><code>from urllib.parse import quote
user, pwd = "user5521", "p@ss:1"
url = f"http://{quote(user, safe='')}:{quote(pwd, safe='')}@185.24.87.14:8000"</code></pre>
<p>Есть и обходной путь: многие программы принимают логин и пароль отдельными полями, и там кодирование не нужно вовсе. Поле есть поле, разделителей внутри него не ищут. Мы советуем именно этот вариант тем, кто работает через графические настройки: он снимает целый класс опечаток.</p>
<h2 id="peremennye-okruzheniya-http-proxy-https-prox">Переменные окружения: HTTP_PROXY, HTTPS_PROXY и NO_PROXY</h2>
<p>Переменные окружения задают посредника сразу для всех программ, которые их читают. Это curl, wget, менеджеры пакетов, значительная часть библиотек на python, go и node. Имена пишутся в верхнем и нижнем регистре, часть программ смотрит только на нижний, поэтому выставляют обе формы.</p>
<pre><code>export HTTP_PROXY="http://user5521:pf39kd@185.24.87.14:8000"
export HTTPS_PROXY="http://user5521:pf39kd@185.24.87.14:8000"
export NO_PROXY="localhost,127.0.0.1,.internal.local"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export no_proxy="$NO_PROXY"</code></pre>
<p>Разберём назначение каждой. HTTP_PROXY указывает посредника для запросов к адресам без шифрования. HTTPS_PROXY указывает посредника для запросов к шифрованным адресам, и туда почти всегда пишется та же строка со схемой <code>http</code>: посредник тот же, отличается только целевой протокол. NO_PROXY перечисляет через запятую хосты, которые идут напрямую: локальная машина, внутренние имена, адреса стенда.</p>
<p>Частая ошибка здесь одна: в HTTPS_PROXY пишут схему <code>https</code>, ожидая симметрии с именем переменной. Имя переменной говорит про целевой протокол, схема внутри значения говорит про канал до посредника. Пока посредник принимает обычный HTTP-канал, правильная запись обеих переменных совпадает буква в букву.</p>
<p>В Windows те же значения выставляются через PowerShell, синтаксис отличается, смысл прежний.</p>
<pre><code>$env:HTTP_PROXY  = "http://user5521:pf39kd@185.24.87.14:8000"
$env:HTTPS_PROXY = "http://user5521:pf39kd@185.24.87.14:8000"
$env:NO_PROXY    = "localhost,127.0.0.1"</code></pre>
<h2 id="klyuch-curl-i-nastroyki-biblioteki-zaprosov">Ключ curl и настройки библиотеки запросов</h2>
<p>В curl строка подключения передаётся ключом <code>-x</code> либо длинной формой <code>--proxy</code>. Ключ перекрывает переменные окружения, поэтому проверять конкретный адрес удобнее именно им: окружение остаётся нетронутым, а команда работает через нужного посредника.</p>
<pre><code># доступ по привязанному адресу
curl -x http://185.24.87.14:8000 https://ifconfig.me

# доступ по учётным данным пакета
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# учётные данные вынесены отдельным ключом, кодировать ничего не нужно
curl -x http://185.24.87.14:8000 -U 'user5521:p@ss:1' https://ifconfig.me

# сокетный вариант с разрешением имени на выходе
curl -x socks5h://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>Ключ <code>-U</code> спасает там, где пароль набит служебными знаками: curl принимает пару отдельным аргументом и сам собирает запрос. Проверить, какая строка ушла в работу, помогает подробный вывод: <code>curl -v</code> показывает установку туннеля и заголовок авторизации.</p>
<p>В python библиотека запросов принимает словарь, где ключом идёт целевой протокол, а значением та самая строка подключения. Схема <code>socks5h</code> требует установленного пакета PySocks, без него библиотека сообщит о неизвестном типе посредника.</p>
<pre><code>import requests

proxies = {
    "http":  "http://user5521:pf39kd@185.24.87.14:8000",
    "https": "http://user5521:pf39kd@185.24.87.14:8000",
}
r = requests.get("https://ifconfig.me", proxies=proxies, timeout=15)
print(r.status_code, r.text)

# сокетный вариант, имя домена разрешает выход
socks = {
    "http":  "socks5h://user5521:pf39kd@185.24.87.14:1080",
    "https": "socks5h://user5521:pf39kd@185.24.87.14:1080",
}</code></pre>
<p>Ключ словаря <code>https</code> описывает целевой протокол, схема внутри значения описывает канал до посредника. Та же логика, что и в переменных окружения. Если библиотеке передан пустой словарь, она всё равно подхватит окружение, поэтому при отладке окружение отключают явно параметром <code>trust_env</code>.</p>
<h2 id="kuda-esche-vvoditsya-stroka-konfigi-i-antide">Куда ещё вводится строка: конфиги и антидетект-браузер</h2>
<p>Мест ввода много, при этом форма записи меняется от программы к программе. Где-то принимают строку целиком, где-то ждут отдельные поля, где-то тип посредника выбирается из списка и схема в тексте становится лишней. Ниже сведены основные места.</p>
<div class="tabl"><table><thead><tr><th>Место ввода</th><th>Форма записи</th><th>Особенности</th></tr></thead><tbody><tr><td>Переменные окружения</td><td>Строка целиком</td><td>Действует на все программы, читающие окружение</td></tr><tr><td>Ключ <code>-x</code> в curl</td><td>Строка целиком</td><td>Перекрывает окружение, пара выносится ключом <code>-U</code></td></tr><tr><td>Словарь в python</td><td>Строка целиком по каждому протоколу</td><td>Сокетные схемы требуют PySocks</td></tr><tr><td>Конфиг программы</td><td>Отдельные поля хоста, порта и учётных данных</td><td>Кодирование не нужно, разделителей внутри полей нет</td></tr><tr><td>Настройки браузера</td><td>Отдельные поля плюс флажок передачи имён</td><td>Тип посредника выбирается радиокнопкой</td></tr><tr><td>Антидетект-браузер</td><td>Отдельные поля в карточке профиля</td><td>Часто есть вставка строки целиком с автозаполнением</td></tr><tr><td>Ключ запуска Chromium</td><td>Строка без учётной части</td><td>Учётные данные вводятся во всплывающем окне</td></tr></tbody></table></div>
<p>Антидетект-браузеры стоят особняком: там строка живёт внутри карточки профиля и применяется ко всему трафику этого профиля. Обычно предлагается выбрать тип из списка, заполнить хост и порт, затем логин и пароль отдельными полями. Многие сборки умеют разбирать вставленную строку <code>IP:PORT:LOGIN:PASS</code> и раскладывать её по полям сами, кнопка обычно подписана как быстрый импорт. Мы держим форматы выдачи ровно под такую вставку, и для профилей это удобнее ручного набора. Детали настройки описаны на странице <a href="https://iprazon.com/instrumenty/antidetekt">про прокси для антидетект-браузеров</a>.</p>
<p>Конфиги серверных программ принимают строку по-разному: одни читают её из отдельной директивы целиком, другие разносят по нескольким параметрам. Общее правило простое: если поле называется хостом, порт туда не пишут. Практику работы с конфигами и планировщиками мы собрали в разборе <a href="/podklyuchenie/v-programmah/">подключения в программах и на сервере</a>.</p>
<h3 id="zapis-socks-v-raznyh-programmah">Запись SOCKS в разных программах</h3>
<p>Сокетный вариант записывается несколькими способами, и это вторая по частоте причина неработающей настройки. В curl и в библиотеках на его основе схема пишется прямо в строке: <code>socks5://</code> или <code>socks5h://</code>. В браузерах на движке Gecko тип выбирается радиокнопкой, поля хоста и порта заполняются отдельно, а передача имён на сторону посредника включается флажком. В браузерах на движке Chromium схема указывается ключом запуска. В парсерах и чекерах тип посредника выбирается из выпадающего списка, и в текстовое поле идёт голая пара <code>IP:PORT</code>.</p>
<pre><code># curl: схема прямо в строке
curl -x socks5h://185.24.87.14:1080 https://ifconfig.me

# Chromium: схема в ключе запуска
chrome --proxy-server="socks5://185.24.87.14:1080"

# git: сокетный посредник для операций с удалённым репозиторием
git config --global http.proxy socks5h://185.24.87.14:1080

# ssh через сокетного посредника
ssh -o ProxyCommand='nc -X 5 -x 185.24.87.14:1080 %h %p' user@target.host</code></pre>
<p>Отдельно про порт. Сокетный посредник часто слушает другой порт, чем HTTP-вариант, поэтому подставлять порт из соседней строки списка бессмысленно. Берём порт из той строки, которую собираемся использовать. В пакете доступны обе версии сокетного протокола, при этом старшая поддерживает учётные данные и передачу имён, поэтому мы рекомендуем именно её. Полный состав того, что открывается вместе с сокетным доступом, описан на странице, где можно <a href="https://iprazon.com/products/kupit-proxy-socks5">купить прокси SOCKS5 для парсеров и скриптов</a>.</p>
<p>Программы с полем для одной строки иногда принимают сокращённую запись без схемы. Тогда тип берётся из соседнего выпадающего списка, и дублировать его текстом вредно: часть сборок склеивает выбранный тип со схемой из строки и получает нерабочую комбинацию.</p>
<h2 id="tipovye-oshibki-zapisi-i-chto-kazhdaya-daet-">Типовые ошибки записи и что каждая даёт на выходе</h2>
<p>Ошибки в строке подключения дают предсказуемые симптомы, и по симптому обычно видно поле, где сидит опечатка. Таблица ниже собрана по обращениям в поддержку.</p>
<div class="tabl"><table><thead><tr><th>Ошибка записи</th><th>Что видно в работе</th><th>Что править</th></tr></thead><tbody><tr><td>Пропущены два слеша после схемы</td><td>Программа сообщает о неизвестном адресе</td><td>Записать <code>http://</code>, а форму <code>http:</code> убрать</td></tr><tr><td>Схема <code>https</code> при обычном канале</td><td>Отказ соединения или ошибка рукопожатия</td><td>Поставить схему <code>http</code></td></tr><tr><td>Собака внутри пароля без кодирования</td><td>Хостом становится хвост пароля, имя не разрешается</td><td>Записать <code>%40</code></td></tr><tr><td>Порт взят из соседней строки списка</td><td>Соединение висит и обрывается по таймауту</td><td>Взять порт из своей строки</td></tr><tr><td>Логин и пароль переставлены местами</td><td>Ответ 407 с требованием авторизации</td><td>Слева логин, справа пароль</td></tr><tr><td>Порядок полей списка перенесён как есть</td><td>Ошибка разбора адреса</td><td>Учётные данные слева от собаки</td></tr><tr><td>Пробел в конце строки из файла</td><td>Отказ разобрать порт</td><td>Обрезать пробелы и возврат каретки</td></tr><tr><td>Схема <code>socks5</code> там, где нужны имена на выходе</td><td>Работает, при этом имена уходят мимо туннеля</td><td>Записать <code>socks5h</code></td></tr><tr><td>Учётные данные при работающей привязке</td><td>Работает штатно</td><td>Править ничего не требуется</td></tr></tbody></table></div>
<p>Пробелы и возврат каретки заслуживают отдельного слова. Файл выдачи, открытый в редакторе на Windows и сохранённый оттуда же, приносит в каждую строку невидимый символ. Программа честно добавляет его к порту и не может превратить результат в число. Симптом выглядит загадочно, лечится одной командой.</p>
<pre><code># показать невидимые символы в конце строк
cat -A proxy.txt | head -3

# убрать возврат каретки
sed -i 's/\r$//' proxy.txt</code></pre>
<p>Ещё одна ошибка живёт вне самой строки: переменные окружения выставлены в одном терминале, а программа запускается из другого. Строка написана верно, при этом процесс её не видит. Проверяется командой <code>env | grep -i proxy</code> в том же окне, откуда идёт запуск. Мы обычно советуем на время отладки вообще отказаться от окружения и передавать посредника ключом: так видно, какая именно строка ушла в работу.</p>
<p>Полезная привычка при разборе любой такой ошибки: собрать строку заново из полей списка, вместо того чтобы править сломанную по частям. Правка по частям обычно оставляет один старый символ, и симптом возвращается через десять минут. Пересборка занимает столько же времени и даёт заведомо верный результат, особенно когда строк много и они шли через несколько копирований.</p>
<p>Последнее замечание про регистр и лишние кавычки. Схема пишется строчными буквами, кавычки нужны только в оболочке и внутрь значения не входят. Строка, скопированная вместе с кавычками в графическое поле настроек, превращает кавычку в первый символ хоста, и программа ищет несуществующее имя. Проверка занимает секунду: посмотреть на начало поля глазами.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Первый подходит при доступе по привязанному адресу, второй содержит учётные данные и превращается в полную строку подключения. Забрать список можно ссылкой или файлом, оба варианта доступны в кабинете, содержимое обновляется в реальном времени.</p>
<h3 id="kakoy-tip-proksi-luchshe-ukazyvat-v-stroke">Какой тип прокси лучше указывать в строке?</h3>
<p>В пакете IPv4 и SOCKS5 доступны обе версии сокетного протокола на выбор, и мы рекомендуем старшую: она поддерживает учётные данные и передачу имён на сторону выхода. Для браузеров и парсеров, которые ходят по вебу, ровно так же хорошо работает <a href="https://iprazon.com/products/kupit-proxy-http">HTTP-посредник из того же пакета</a>.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и оплаты указывается свой адрес в настройках, пакет включается примерно за 5 минут. Дальше берётся строка из списка выдачи и вписывается в программу. Если поведение софта заранее неизвестно, перед покупкой доступен бесплатный тест до 2 часов под свой запрос.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках. При двух привязанных адресах общее число потоков делится между ними пополам: пакет на 1000 потоков даёт по 500 на каждую машину. Корпоративный вариант поднимает лимит до 3000, при этом пакеты по потокам не складываются.</p>
<p>Соседние разборы раздела продолжают тему с других сторон: <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a> проводит от оплаты до первого рабочего запроса, <a href="/podklyuchenie/v-brauzere/">настройка в браузере</a> показывает, где лежат поля в каждом из движков, <a href="/podklyuchenie/smena-privyazki/">смена привязанного адреса</a> пригодится при переезде на другую машину. Когда строка написана верно, а сомнения остались, помогает материал <a href="/proverka/kak-proverit/">про проверку прокси командами</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/stroka-podklyucheniya/">https://kupit-proxy-ipv4.ru/podklyuchenie/stroka-podklyucheniya/</a></p>]]></content:encoded></item>
<item><title>Подключение прокси в браузере: настройка по шагам</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/v-brauzere/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/v-brauzere/</guid><description>Посредника в браузере задают тремя путями: системными настройками, встроенными настройками самого браузера и расширением. Первый путь разворачивает все…</description><content:encoded><![CDATA[
<p class="vvod">Посредника в браузере задают тремя путями: системными настройками, встроенными настройками самого браузера и расширением. Первый путь разворачивает все программы машины разом, второй работает только внутри браузера, третий переключает адреса в один клик и удобен там, где строка меняется часто.</p>
<p>Ниже разобран каждый путь: где лежат поля в Firefox, как передавать запросы к DNS через посредника, как запускать браузеры на движке Chromium с отдельными профилями и ключами, чем берёт расширение и где у него слабое место. В конце проверка прямо из окна браузера и разбор ситуации, когда вместо страницы появляется окно с запросом логина и пароля.</p>
<h2 id="tri-sposoba-zadat-posrednika-chto-vybrat">Три способа задать посредника: что выбрать</h2>
<p>Разница между способами держится на охвате и скорости переключения. Системные настройки меняют поведение всей машины: почтовый клиент, менеджер обновлений и любая программа, которая читает системные параметры, пойдут через посредника вместе с браузером. Встроенные настройки браузера ограничивают охват одним приложением. Расширение живёт внутри браузера и переключает адреса без перезапуска.</p>
<div class="tabl"><table><thead><tr><th>Способ</th><th>Что охватывает</th><th>Скорость смены адреса</th><th>Где удобен</th></tr></thead><tbody><tr><td>Системные настройки</td><td>Всю машину и все программы</td><td>Медленно, через панель настроек</td><td>Одна постоянная строка на рабочей машине</td></tr><tr><td>Настройки браузера</td><td>Только этот браузер</td><td>Средне, несколько кликов</td><td>Firefox и его сборки, точечная работа</td></tr><tr><td>Ключ запуска</td><td>Один запущенный процесс</td><td>Задаётся при старте</td><td>Браузеры на движке Chromium, отдельные профили</td></tr><tr><td>Расширение</td><td>Вкладки этого браузера</td><td>Один клик из панели</td><td>Частая смена адресов, работа списком</td></tr><tr><td>Антидетект-браузер</td><td>Каждый профиль отдельно</td><td>Настраивается в карточке профиля</td><td>Несколько аккаунтов и наборов настроек</td></tr></tbody></table></div>
<p>Мы обычно советуем начинать со встроенных настроек браузера: охват предсказуемый, ничего лишнего в систему не уезжает, и откатить настройку можно за десять секунд. Системный путь берут тогда, когда через посредника должен идти весь рабочий стол. Строку подключения при любом способе собирают одинаково, разбор полей мы вынесли в материал <a href="/podklyuchenie/stroka-podklyucheniya/">про строку подключения</a>.</p>
<p>Отдельно про то, что видит целевой сайт. Браузер отдаёт адрес выхода, заголовки запроса и набор свойств окна. Посредник меняет адрес, всё остальное остаётся браузерным. Про то, какие заголовки уходят и как они выглядят со стороны сайта, подробнее написано там, где мы описываем <a href="https://iprazon.com/proxy/anonimnye">анонимные прокси без служебных заголовков</a>.</p>
<h2 id="sistemnye-nastroyki-kogda-oni-umestny">Системные настройки: когда они уместны</h2>
<p>В Windows поля лежат в параметрах сети, раздел настройки посредника. Там задаются адрес, порт и список исключений, который разделяется точкой с запятой. В macOS то же самое живёт в настройках сети внутри выбранного сетевого интерфейса, причём каждый протокол настраивается отдельной строкой. В Linux с графической оболочкой поля лежат в сетевых параметрах, при этом консольные программы читают переменные окружения независимо от них.</p>
<p>Плюс системного пути один и он весомый: настроил один раз, и через посредника пошло всё. Минус в том же самом. Обновления системы, телеметрия и фоновые службы поедут туда же, и на прогонах с высокой частотой запросов это добавляет посторонний трафик. Трафик у нас безлимитный, поэтому счётчиков тут никто не считает, при этом лишний шум усложняет разбор логов.</p>
<p>Список исключений заслуживает внимания. Внутренние имена, локальный адрес и стенд разработки вписываются туда сразу, иначе часть рабочих инструментов перестанет открываться. Типовой набор: <code>localhost</code>, <code>127.0.0.1</code> и внутренний домен компании с точкой впереди.</p>
<p>Ещё один момент касается порядка применения. Часть программ читает системные поля при старте и больше к ним не возвращается, поэтому после правки настроек их перезапускают. Браузер сюда попадает не всегда: свежие сборки подхватывают изменение на лету, старые продолжают ходить по прежнему пути до закрытия последнего окна. Проверка простая: закрыть браузер целиком, открыть заново, посмотреть адрес выхода. Для постоянной работы с одним адресом такой путь удобен и требует минимума движений, а строку под него берут из выдачи пакета, где доступен <a href="https://iprazon.com/products/kupit-proxy-http">HTTP-посредник для повседневной работы</a>.</p>
<h2 id="firefox-gde-imenno-lezhat-polya">Firefox: где именно лежат поля</h2>
<p>Firefox держит собственные сетевые настройки, поэтому системные параметры он умеет игнорировать. Путь такой: меню настроек, раздел «Основные», прокрутка в самый низ до блока «Параметры сети», кнопка «Настроить». Открывается окно с переключателями.</p>
<p>Дальше по шагам. Ставим переключатель «Ручная настройка прокси». Заполняем поле «HTTP прокси» адресом из списка и соседнее поле «Порт». Ставим флажок «Также использовать этот прокси для HTTPS», тогда шифрованные адреса пойдут через того же посредника. Поле «Не использовать прокси для» оставляем под локальные имена.</p>
<div class="tabl"><table><thead><tr><th>Поле в окне</th><th>Что вписываем</th><th>Примечание</th></tr></thead><tbody><tr><td>HTTP прокси</td><td>Адрес из строки списка</td><td>Только хост, порт идёт в соседнее поле</td></tr><tr><td>Порт</td><td>Второе поле строки списка</td><td>Число без пробелов и лишних знаков</td></tr><tr><td>Также использовать для HTTPS</td><td>Флажок</td><td>Снимает необходимость дублировать поля</td></tr><tr><td>Узел SOCKS</td><td>Адрес при сокетном доступе</td><td>Заполняется вместо полей HTTP</td></tr><tr><td>Порт SOCKS</td><td>Порт сокетного посредника</td><td>Часто отличается от порта HTTP</td></tr><tr><td>SOCKS v4 и SOCKS v5</td><td>Радиокнопка версии</td><td>Берём старшую версию</td></tr><tr><td>Проксировать DNS при использовании SOCKS v5</td><td>Флажок</td><td>Запросы к DNS уходят через посредника</td></tr><tr><td>Не использовать прокси для</td><td><code>localhost, 127.0.0.1</code></td><td>Разделитель запятая</td></tr></tbody></table></div>
<p>Флажок передачи запросов к DNS стоит того, чтобы про него сказать отдельно. Без него браузер сам превращает имя сайта в адрес через провайдерский резолвер, и наружу уходит имя домена мимо туннеля. С флажком имя разрешает выход посредника. В Firefox этот флажок работает вместе с сокетным вариантом, и включается он одной галочкой в том же окне.</p>
<p>Для варианта с полями HTTP тот же эффект даёт параметр в служебных настройках. Открываем страницу <code>about:config</code>, подтверждаем предупреждение, ищем ключ и переводим его в положение истины.</p>
<pre><code>network.proxy.socks_remote_dns   -&gt; true
network.proxy.type               -&gt; 1   (ручная настройка)
network.trr.mode                 -&gt; 5   (встроенный резолвер отключён)</code></pre>
<p>Утечку запросов к DNS мы разбираем отдельно, вместе с проверкой и способами закрыть её насовсем: смотрите материал <a href="/proverka/utechka-dns/">про утечку запросов к DNS</a>. Здесь достаточно включить флажок и один раз убедиться, что домены резолвятся на выходе.</p>
<p>Сборки на том же движке повторяют это окно почти дословно: расположение блока «Параметры сети» и подписи полей совпадают. Различается только оформление меню.</p>
<p>Смена адреса в Firefox идёт через то же окно. Открыли, переписали хост и порт, нажали подтверждение, обновили вкладку. Перезапуск браузера при этом не требуется, настройка применяется к следующему запросу. Если адресов много и они меняются каждые несколько минут, ручной путь начинает утомлять, и тогда переходят на расширение. Для двух или трёх постоянных адресов встроенных полей хватает с запасом, и мы держим на рабочих машинах именно такую схему: одна строка в полях, остальные лежат в файле выдачи на случай замены.</p>
<h2 id="brauzery-na-dvizhke-chromium-profil-i-klyuch">Браузеры на движке Chromium: профиль и ключ запуска</h2>
<p>Chrome, Edge, Yandex Browser и прочие сборки на движке Chromium собственных сетевых полей не показывают: кнопка настроек открывает системную панель. Посредник им задаётся ключом запуска, и это удобнее, чем кажется на первый взгляд.</p>
<pre><code># Windows, ярлык с ключом
chrome.exe --proxy-server="http://185.24.87.14:8000" --user-data-dir="C:\profiles\p1"

# сокетный вариант с разрешением имён на выходе
chrome.exe --proxy-server="socks5://185.24.87.14:1080" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 185.24.87.14"

# исключения
chrome.exe --proxy-server="http://185.24.87.14:8000" --proxy-bypass-list="localhost;127.0.0.1;*.internal.local"

# Linux, то же самое из терминала
google-chrome --proxy-server="http://185.24.87.14:8000" --user-data-dir=/home/user/profiles/p1</code></pre>
<p>Ключ <code>--user-data-dir</code> тут важнее самого посредника. Он задаёт отдельный каталог профиля: свои куки, своё хранилище, свои расширения. Без него новый процесс присоединяется к уже запущенному окну и наследует его сеть, поэтому ключ посредника молча теряется. Мы всегда указываем каталог профиля рядом с ключом посредника, и вопрос «почему не применилось» снимается сам.</p>
<p>Учётные данные внутрь ключа <code>--proxy-server</code> браузеры на этом движке не принимают. Строка пишется без логина и пароля, а пара запрашивается всплывающим окном при первом запросе. Обойти окно помогает расширение либо доступ по привязанному адресу, механику которого мы разобрали в материале <a href="/podklyuchenie/privyazka-adresa/">про привязку своего адреса</a>.</p>
<h3 id="otdelnye-profili-s-raznymi-adresami">Отдельные профили с разными адресами</h3>
<p>Схема с каталогами профилей закрывает работу с несколькими независимыми сессиями. Каждому профилю свой каталог, своя строка посредника, свой ярлык. Профили запускаются одновременно и живут параллельно, куки между ними не пересекаются.</p>
<pre><code># три параллельных профиля, каждый со своим адресом
chrome --user-data-dir=/opt/p1 --proxy-server="http://185.24.87.14:8000"
chrome --user-data-dir=/opt/p2 --proxy-server="http://185.24.87.15:8000"
chrome --user-data-dir=/opt/p3 --proxy-server="socks5://185.24.87.16:1080"</code></pre>
<p>Ярлыки под такие запуски удобнее готовить заранее. Один ярлык на профиль, в свойствах прописан каталог и строка посредника, подпись содержит номер профиля. Дальше работа сводится к двойному щелчку, и путать окна перестаёшь: у каждого профиля своя тема оформления и свой набор закладок. Список адресов при этом остаётся общим, мы берём для профилей соседние строки выдачи.</p>
<p>Схема выдерживает несколько профилей на машине. Дальше начинает мешать оперативная память: каждый процесс тянет свой набор вкладок и расширений. Для десятков параллельных сессий берут инструмент, который умеет управлять профилями списком. Про адреса под такую работу мы пишем на странице, где предлагается <a href="https://iprazon.com/products/kupit-proxy-http">купить HTTP-прокси для браузеров</a>.</p>
<h2 id="rasshirenie-bystraya-smena-i-ee-cena">Расширение: быстрая смена и её цена</h2>
<p>Расширение ставится в браузер и берёт на себя маршрутизацию вкладок. Внутри держится список строк подключения, переключение идёт кликом из панели, учётные данные подставляются автоматически, поэтому всплывающее окно авторизации больше не появляется. Многие расширения умеют правила: этот домен через первый адрес, тот через второй, остальное напрямую.</p>
<p>Выигрыш заметен там, где адрес меняется по десять раз за смену. Открыл панель, выбрал строку из списка, обновил вкладку. Ни перезапуска, ни ярлыков, ни правки полей. Список строк импортируется из файла выдачи целиком, и формат <code>IP:PORT:LOGIN:PASS</code> большинство расширений разбирает само.</p>
<p>Слабое место у расширения одно, и оно техническое. Правила расширения работают внутри браузерного слоя, поэтому часть трафика проходит мимо: сюда попадают соединения WebRTC и обращения самого браузера к служебным адресам. Дополнительно расширение хранит учётные данные внутри своего профиля, и при переносе профиля они уезжают вместе с ним. Отсюда наша практика: расширение берём для ручной работы и быстрых переключений, а для прогонов, где важна полнота охвата, ставим посредника ключом запуска либо в системных полях.</p>
<div class="tabl"><table><thead><tr><th>Что сравниваем</th><th>Настройки браузера</th><th>Расширение</th></tr></thead><tbody><tr><td>Охват трафика браузера</td><td>Полный, включая служебные обращения</td><td>Слой браузера, часть соединений идёт мимо</td></tr><tr><td>Смена адреса</td><td>Правка полей и подтверждение</td><td>Клик из панели</td></tr><tr><td>Учётные данные</td><td>Всплывающее окно при первом запросе</td><td>Подставляются из списка</td></tr><tr><td>Правила по доменам</td><td>Только список исключений</td><td>Гибкие правила на каждый домен</td></tr><tr><td>Импорт списка</td><td>Руками по одному адресу</td><td>Файл выдачи целиком</td></tr><tr><td>Поведение WebRTC</td><td>Настраивается отдельно</td><td>Настраивается отдельно</td></tr></tbody></table></div>
<h2 id="antidetekt-brauzer-posrednik-vnutri-profilya">Антидетект-браузер: посредник внутри профиля</h2>
<p>Антидетект-браузеры построены вокруг профилей, и посредник там задаётся в карточке профиля вместе с остальными параметрами окна. Порядок обычный: создать профиль, открыть блок настроек сети, выбрать тип из списка, заполнить хост и порт, затем логин и пароль отдельными полями. Многие сборки принимают вставку строки <code>IP:PORT:LOGIN:PASS</code> целиком и раскладывают её по полям сами.</p>
<p>Дальше нажимается кнопка проверки. Она делает запрос через указанного посредника и показывает адрес выхода. Проверять стоит до первого входа в аккаунт: профиль, стартовавший без посредника, успевает сходить на сайт с адресом машины. Про настройку конкретных сборок мы пишем на странице <a href="https://iprazon.com/instrumenty/antidetekt">про антидетект-браузеры и прокси</a>, а отдельный разбор популярной сборки лежит там, где описан <a href="https://iprazon.com/instrumenty/dolphin">профиль в Dolphin с посредником</a>.</p>
<p>Сокетный вариант в таких сборках обычно предпочтительнее: тип выбирается из выпадающего списка, имя домена разрешается на выходе, произвольные порты проходят без оговорок. В пакете доступны обе версии сокетного протокола, и мы рекомендуем старшую. Полный состав того, что открывается вместе с ней, описан там, где можно <a href="https://iprazon.com/products/kupit-proxy-socks5">взять прокси SOCKS5 для профилей</a>.</p>
<h2 id="kak-ubeditsya-pryamo-v-brauzere-chto-zaprosy">Как убедиться прямо в браузере, что запросы идут через посредника</h2>
<p>Первая проверка занимает полминуты. Открываем любой сервис, который показывает адрес обратившегося, и сравниваем цифры с адресом из списка выдачи. Совпало, значит посредник применился.</p>
<p>Вторая проверка точнее и делается внутри инструментов разработчика. Открываем панель клавишей F12, вкладку «Сеть», обновляем страницу и щёлкаем по первому запросу. В свойствах соединения есть строка удалённого адреса: при работе через посредника там стоит адрес посредника, при прямом соединении там адрес целевого сервера. Это самый честный ответ, потому что он берётся из самого соединения.</p>
<div class="tabl"><table><thead><tr><th>Что проверяем</th><th>Где смотрим</th><th>Признак рабочей настройки</th></tr></thead><tbody><tr><td>Адрес выхода</td><td>Сервис показа адреса</td><td>Цифры совпадают со строкой списка</td></tr><tr><td>Реальное соединение</td><td>Инструменты разработчика, вкладка сети</td><td>Удалённый адрес равен адресу посредника</td></tr><tr><td>Запросы к DNS</td><td>Сервис проверки резолверов</td><td>Резолвер со стороны выхода</td></tr><tr><td>Служебные заголовки</td><td>Сервис показа заголовков</td><td>Заголовков с адресом машины нет</td></tr><tr><td>Обход правил</td><td>Страница из списка исключений</td><td>Открывается напрямую, как задумано</td></tr><tr><td>Внутренняя статистика</td><td><code>about:networking</code> в Firefox</td><td>Соединения идут на адрес посредника</td></tr></tbody></table></div>
<p>Третья проверка касается WebRTC: этот механизм умеет получать адреса сетевых интерфейсов в обход настроек посредника. В Firefox он выключается ключом <code>media.peerconnection.enabled</code> в служебных настройках, в браузерах на движке Chromium ставится расширение управления политикой WebRTC, в антидетект-сборках есть готовый переключатель в карточке профиля.</p>
<p>Полезен и обратный тест: открыть адрес из списка исключений и убедиться, что он пошёл напрямую. Настройка, где через посредника уходит вообще всё, включая локальный стенд, обычно означает опечатку в поле исключений. Разделители там разные в разных браузерах: запятая в Firefox, точка с запятой в системных полях Windows, точка с запятой в ключе Chromium. Мы проверяем это первой же строкой после правки настроек.</p>
<p>Отдельно советуем сверять картину до и после. Запоминаем адрес машины без посредника, включаем настройку, обновляем страницу. Изменившиеся цифры отвечают на вопрос надёжнее любых логов. Команды и сервисы для полноценной проверки собраны в материале <a href="/proverka/kak-proverit/">про проверку прокси</a>.</p>
<h2 id="okno-s-zaprosom-logina-i-parolya">Окно с запросом логина и пароля</h2>
<p>Всплывающее окно с полями имени и пароля означает ровно одно: посредник просит авторизацию, потому что в строке её не было. Такое поведение штатно для браузеров на движке Chromium, которые не принимают учётные данные внутри ключа запуска. Вписываем логин и пароль из строки списка формата <code>IP:PORT:LOGIN:PASS</code>, ставим флажок запоминания, и окно перестаёт появляться в этом профиле.</p>
<p>Если окно возвращается после каждого обновления страницы, причин обычно три. Первая: пара введена с опечаткой, чаще всего с лишним пробелом при копировании из файла. Вторая: копировали строку целиком вместе с адресом и портом, и в поле логина уехали лишние поля. Третья: профиль запущен без своего каталога, поэтому сохранённая пара каждый раз теряется вместе с временным профилем.</p>
<pre><code># быстрая сверка той же пары вне браузера
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# если тут приходит 407, дело в паре, а не в настройках браузера
curl -o /dev/null -w "%{http_code}\n" -x http://185.24.87.14:8000 https://example.com</code></pre>
<p>Когда пара верна и всё равно приходит отказ, смотрим на способ доступа. Доступ по привязанному адресу работает без логина, и тогда всплывающее окно закрывается пустым: посредник узнаёт клиента по адресу машины. Обратный случай: привязка оформлена на прежний адрес, машина переехала в другую сеть, права по адресу больше нет. Привязку можно поменять прямо в настройках кабинета без ограничений, в пакет входит одновременная привязка 2 адресов.</p>
<p>Полезно помнить, что запомненная пара живёт внутри профиля браузера. Переустановили браузер, завели новый каталог профиля, вычистили хранилище: окно вернётся, и это нормально. Вводим пару заново и работаем дальше. Тем, кто держит десяток профилей, проще один раз перейти на доступ по привязке: строка становится короче, окно не появляется вовсе.</p>
<p>Ещё один сценарий даёт то же окно при работающих настройках: расширение и системные поля включены одновременно и спорят между собой. Оставляем один способ, второй выключаем полностью. Мы держим это правило как обязательное при разборе любой странной сетевой картины в браузере.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и оплаты указывается свой адрес в настройках, пакет включается примерно за 5 минут. Дальше берётся строка из списка выдачи и вписывается в поля браузера либо в ключ запуска. Список обновляется в реальном времени, поэтому перед работой его стоит перечитать.</p>
<h3 id="v-kakom-vide-vydaetsya-spisok-adresov">В каком виде выдаётся список адресов?</h3>
<p>В кабинете два варианта получения: ссылка и файл. Форматов тоже два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Второй удобен для браузерных расширений и антидетект-профилей, потому что они разбирают его сами и раскладывают поля по местам.</p>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu-v-brauze">Подойдут ли прокси под мою задачу в браузере?</h3>
<p>Заранее предугадать поведение каждого целевого сайта нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. За это время удобно проверить именно тот браузер и тот профиль, которые пойдут в работу. Порядок запуска теста описан в кабинете, и оператору достаточно сообщить логин и тип прокси.</p>
<h3 id="mozhno-li-otobrat-adresa-po-strane-dlya-brau">Можно ли отобрать адреса по стране для браузера?</h3>
<p>Выборка по отдельной стране не делается: пул это микс со всего мира, около 12 000 активных адресов, ротация внутри пула автоматическая. География охватывает 200+ стран, поэтому разнообразие подсетей в браузерных профилях получается само собой.</p>
<p>Дальше по разделу: <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a> проводит от оплаты до первого рабочего запроса, <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a> показывает настройку вне браузера, <a href="/podklyuchenie/smena-privyazki/">смена привязанного адреса</a> пригодится при переезде на другую машину. Если браузер начал отдавать отказы, разбор кода есть в материале <a href="/proverka/oshibka-403/">про ошибку 403 через прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/v-brauzere/">https://kupit-proxy-ipv4.ru/podklyuchenie/v-brauzere/</a></p>]]></content:encoded></item>
<item><title>Подключение прокси в программах и на сервере: переменные, код и службы</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/v-programmah/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/v-programmah/</guid><description>Прокси в программе задаётся одним из трёх путей: переменными окружения оболочки, настройкой внутри самой программы или локальным туннелем, когда поля…</description><content:encoded><![CDATA[
<p class="vvod">Прокси в программе задаётся одним из трёх путей: переменными окружения оболочки, настройкой внутри самой программы или локальным туннелем, когда поля посредника в интерфейсе нет. На сервере к этому добавляются ещё два места: блок <code>Environment</code> в юните systemd для службы и переменные контейнера в Docker.</p>
<p>Дальше идут рабочие куски для оболочки, curl и wget, Python, Node.js, PHP, Java, контейнеров и служб, а следом поля посредника в парсерах и антидетект-браузерах и проверка на сервере, куда реально уходят пакеты. Всё проверяется одной командой, и порядок написан так, чтобы после каждого шага у администратора был ответ на вопрос «работает или нет».</p>
<h2 id="chto-nuzhno-sobrat-do-nastroyki">Что нужно собрать до настройки</h2>
<p>Перед правкой конфигов на руках должны быть четыре вещи: адрес, порт, протокол и способ доступа. Адрес с портом берём из списка в кабинете. Протокол выбираем под софт: HTTP и HTTPS понимают браузеры и почти все библиотеки, SOCKS4 и SOCKS5 нужны программам, которые ходят по произвольным портам и держат сокеты сами. Способ доступа определяет, будет ли в строке пара логина с паролем.</p>
<p>Способов доступа два. Первый: в кабинете указан адрес машины, с которой идут запросы, и тогда строка выглядит как <code>протокол://адрес:порт</code> без учётных данных. Второй: берём формат <code>IP:PORT:LOGIN:PASS</code>, и пара приезжает внутрь строки подключения. Разбор того, чем эти режимы отличаются по механике проверки права, лежит в материале про <a href="/osnovy/avtorizaciya/">два способа доступа к прокси</a>, здесь мы работаем с готовой строкой.</p>
<p>Для сервера почти всегда удобнее второй вариант. Машин в проекте обычно больше одной: тестовый узел, боевой узел, машина администратора. Пара логина с паролем едет вместе с конфигом и работает откуда угодно, поэтому для парка серверов мы берём <a href="https://iprazon.com/proxy/servernye">приватные серверные адреса под фоновые прогоны</a> и раздаём учётные данные через переменные окружения.</p>
<div class="tabl"><table><thead><tr><th>Среда</th><th>Где задаётся посредник</th><th>Формат записи</th></tr></thead><tbody><tr><td>Оболочка Linux</td><td>Переменные <code>http_proxy</code>, <code>https_proxy</code>, <code>no_proxy</code></td><td><code>http://ip:port</code></td></tr><tr><td>Windows</td><td><code>setx</code>, переменные сессии PowerShell, <code>netsh winhttp</code></td><td><code>http://ip:port</code></td></tr><tr><td>curl</td><td>Ключ <code>-x</code> или файл <code>.curlrc</code></td><td><code>-x http://ip:port</code></td></tr><tr><td>wget</td><td>Ключи <code>-e</code> или файл <code>.wgetrc</code></td><td><code>-e http_proxy=ip:port</code></td></tr><tr><td>Python requests</td><td>Словарь <code>proxies</code> у запроса или сессии</td><td><code>{"https": "http://ip:port"}</code></td></tr><tr><td>Python httpx</td><td>Параметр <code>proxy</code> у клиента</td><td><code>httpx.Client(proxy=...)</code></td></tr><tr><td>Node.js</td><td><code>ProxyAgent</code> из undici или <code>https-proxy-agent</code></td><td>Объект агента</td></tr><tr><td>PHP</td><td>Опции <code>CURLOPT_PROXY</code> и <code>CURLOPT_PROXYUSERPWD</code></td><td>Строка и пара через двоеточие</td></tr><tr><td>Java</td><td>Свойства <code>http.proxyHost</code> и <code>http.proxyPort</code></td><td>Ключи <code>-D</code> при запуске</td></tr><tr><td>Docker</td><td>Ключи <code>-e</code> при запуске или блок <code>environment</code></td><td>Переменные внутри контейнера</td></tr><tr><td>systemd</td><td>Строки <code>Environment=</code> или <code>EnvironmentFile=</code> в юните</td><td>Переменные для процесса службы</td></tr><tr><td>A-Parser, Key Collector, ZennoPoster</td><td>Раздел прокси в настройках, список строкой или ссылкой</td><td><code>ip:port:login:pass</code></td></tr><tr><td>Антидетект-браузеры</td><td>Поле посредника в карточке профиля</td><td>Тип, адрес, порт, пара</td></tr><tr><td>Программа без поддержки</td><td>Локальный туннель на <code>127.0.0.1</code></td><td>Программа видит свой же узел</td></tr></tbody></table></div>
<h2 id="peremennye-okruzheniya-na-linux-i-v-windows">Переменные окружения на Linux и в Windows</h2>
<p>Переменные окружения покрывают самый широкий слой софта: их читают curl, wget, apt, pip, npm, composer, большинство библиотек на Python и Go. Один экспорт закрывает десяток программ сразу.</p>
<pre><code># доступ по привязанному адресу машины
export http_proxy="http://193.42.118.26:8000"
export https_proxy="http://193.42.118.26:8000"
export no_proxy="localhost,127.0.0.1,10.0.0.0/8,.internal"

# доступ по логину и паролю
export http_proxy="http://prx7412:k29fbt@193.42.118.26:8000"
export https_proxy="http://prx7412:k29fbt@193.42.118.26:8000"

# то же самое по SOCKS5, имена разрешает посредник
export all_proxy="socks5h://prx7412:k29fbt@193.42.118.26:8000"</code></pre>
<p>Три подробности, которые экономят вечер разбора. Регистр имён важен: curl читает <code>http_proxy</code> только в нижнем регистре, зато <code>https_proxy</code> и <code>HTTPS_PROXY</code> подхватывает одинаково, а часть библиотек смотрит исключительно на верхний. Мы держим оба написания, если в парке смешанный софт. Переменная <code>no_proxy</code> спасает от того, чтобы внутренние адреса ходили наружу через посредника: базу, брокер очередей и локальные API туда вносим сразу. Пароль со служебными символами кодируется по правилам адресной строки, символ <code>@</code> внутри пароля превращается в <code>%40</code>, двоеточие в <code>%3A</code>, иначе разбор строки развалится на первом же запросе.</p>
<p>Чтобы переменные пережили перезапуск оболочки, кладём их в файл. Для одного пользователя это <code>~/.bashrc</code> либо <code>~/.profile</code>, для всей машины удобнее отдельный файл в каталоге профиля.</p>
<pre><code>sudo tee /etc/profile.d/proxy.sh &gt;/dev/null &lt;&lt;'EOF'
export http_proxy="http://prx7412:k29fbt@193.42.118.26:8000"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1,::1"
EOF
sudo chmod 0644 /etc/profile.d/proxy.sh</code></pre>
<p>В Windows логика та же, меняются команды. Переменная текущей сессии PowerShell живёт до закрытия окна, <code>setx</code> пишет её в профиль пользователя и подхватывается новыми процессами, <code>netsh winhttp</code> правит настройку для служб и системных компонентов, которые ходят через WinHTTP.</p>
<pre><code># только текущая сессия
$env:HTTPS_PROXY = "http://prx7412:k29fbt@193.42.118.26:8000"

# постоянно для пользователя, действует в новых окнах
setx HTTPS_PROXY "http://prx7412:k29fbt@193.42.118.26:8000"

# для служб и системных компонентов
netsh winhttp set proxy 193.42.118.26:8000 "localhost;127.0.0.1;*.local"
netsh winhttp show proxy
netsh winhttp reset proxy</code></pre>
<p>Типовая ошибка на Windows выглядит так: администратор выполнил <code>setx</code> и тут же проверяет в том же окне, а переменная там пустая. Открываем новую консоль, проверка проходит. Сама по себе <code>netsh winhttp</code> не влияет на браузеры и на программы с собственными сетевыми стеками, для них поле посредника ищем внутри интерфейса.</p>
<h2 id="curl-i-wget-pervaya-proverka-rukami">curl и wget: первая проверка руками</h2>
<p>Ручной запрос через curl это самый быстрый способ понять, живы ли адрес, порт и учётные данные. Пока curl не отвечает, лезть в конфиги программ смысла нет.</p>
<pre><code># один запрос через посредника, ответ покажет выходной адрес
curl -x http://193.42.118.26:8000 https://ifconfig.me

# пара логина с паролем внутри ключа
curl -x http://prx7412:k29fbt@193.42.118.26:8000 https://ifconfig.me

# пара вынесена отдельным ключом, удобно когда в пароле служебные символы
curl -x 193.42.118.26:8000 --proxy-user 'prx7412:k29fbt' https://ifconfig.me

# SOCKS5 с разрешением имён на стороне выхода
curl --proxy socks5h://prx7412:k29fbt@193.42.118.26:8000 https://ifconfig.me

# код ответа и время целиком, без тела страницы
curl -x http://193.42.118.26:8000 -sS -o /dev/null \
  -w "code=%{http_code} connect=%{time_connect} total=%{time_total}\n" \
  https://example.com</code></pre>
<p>Ключ <code>-x</code> принимает и схему <code>socks5://</code>, и <code>socks5h://</code>. Разница в том, кто разрешает имя узла: в первом случае это делает локальная машина, во втором посредник. Для работы с целевыми сайтами берём вариант с буквой <code>h</code>, тогда наружу с машины не уходит ни одного запроса к системе имён, и картина по выходному адресу получается цельной.</p>
<p>У wget своя логика: ключа для посредника у него нет, настройка приезжает через переменные или через ключ <code>-e</code>, который на лету дописывает строку конфигурации.</p>
<pre><code>wget -e use_proxy=yes -e http_proxy=193.42.118.26:8000 \
     -e https_proxy=193.42.118.26:8000 -O - https://ifconfig.me

wget --proxy-user=prx7412 --proxy-password=k29fbt \
     -O catalog.html https://example.com/catalog</code></pre>
<p>Постоянные настройки удобнее держать в файлах <code>~/.curlrc</code> и <code>~/.wgetrc</code>. В первом строка вида <code>proxy = "http://193.42.118.26:8000"</code>, во втором <code>use_proxy = on</code> вместе с адресами. Файлы с паролями закрываем правами <code>chmod 600</code>, доступ к ним нужен только своему пользователю.</p>
<h2 id="python-requests-httpx-i-variant-dlya-socks5">Python: requests, httpx и вариант для SOCKS5</h2>
<p>Библиотека requests читает переменные окружения автоматически, поэтому иногда после <code>export</code> в коде править нечего. Явное указание надёжнее: конфиг не зависит от того, из какой оболочки запустили скрипт.</p>
<pre><code>import requests

PROXY = "http://prx7412:k29fbt@193.42.118.26:8000"
proxies = {"http": PROXY, "https": PROXY}

r = requests.get("https://ifconfig.me/ip", proxies=proxies, timeout=15)
print(r.status_code, r.text.strip())</code></pre>
<p>Для серии запросов берём сессию: соединение до посредника переиспользуется, и прогон на несколько тысяч страниц идёт заметно ровнее.</p>
<pre><code>import requests

s = requests.Session()
s.proxies.update({
    "http":  "http://prx7412:k29fbt@193.42.118.26:8000",
    "https": "http://prx7412:k29fbt@193.42.118.26:8000",
})
s.trust_env = False          # игнорировать переменные окружения
s.headers["User-Agent"] = "collector/1.4"

for url in urls:
    try:
        resp = s.get(url, timeout=(5, 20))
        print(resp.status_code, len(resp.content), url)
    except requests.exceptions.ProxyError as e:
        print("proxy", e)
    except requests.exceptions.ReadTimeout:
        print("timeout", url)</code></pre>
<p>Флаг <code>trust_env = False</code> снимает частый источник путаницы, когда в окружении остался старый экспорт и скрипт ходит совсем не туда, куда написано в коде. Отдельно разводим два исключения: <code>ProxyError</code> говорит про доступ к посреднику, <code>ReadTimeout</code> про целевой сайт.</p>
<p>Клиент httpx устроен иначе. Посредник задаётся параметром при создании клиента, а раздельная настройка по схемам делается через <code>mounts</code>.</p>
<pre><code>import httpx

with httpx.Client(proxy="http://prx7412:k29fbt@193.42.118.26:8000",
                  timeout=httpx.Timeout(20.0, connect=5.0)) as c:
    print(c.get("https://ifconfig.me/ip").text)

# раздельно по схемам
transport_http = httpx.HTTPTransport(proxy="http://193.42.118.26:8000")
client = httpx.Client(mounts={"http://": transport_http,
                              "https://": transport_http})</code></pre>
<p>Для SOCKS5 обеим библиотекам нужна дополнительная зависимость. Ставим её один раз, дальше меняется только схема в строке.</p>
<pre><code>pip install "requests[socks]" "httpx[socks]"</code></pre>
<pre><code>SOCKS = "socks5h://prx7412:k29fbt@193.42.118.26:8000"
proxies = {"http": SOCKS, "https": SOCKS}          # requests
client = httpx.Client(proxy=SOCKS)                  # httpx</code></pre>
<p>Асинхронный aiohttp понимает только HTTP-посредника через параметр <code>proxy</code> у запроса, для сокетного режима ему нужен пакет <code>aiohttp-socks</code> и коннектор <code>ProxyConnector.from_url(...)</code>. Тем, кто пишет сборщики на сокетах и упирается в произвольные порты, ближе <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a>: протокол пропускает и TCP-соединения, и запросы к системе имён.</p>
<h2 id="node-js-php-i-java-tri-sredy-i-tri-podhoda">Node.js, PHP и Java: три среды и три подхода</h2>
<p>В Node.js встроенный <code>fetch</code> сам по себе посредника не видит, ему нужен диспетчер из undici. Схема рабочая и короткая: создаём агент, ставим его глобально, дальше весь исходящий трафик процесса идёт через посредника.</p>
<pre><code>import { ProxyAgent, setGlobalDispatcher } from 'undici';

const agent = new ProxyAgent('http://prx7412:k29fbt@193.42.118.26:8000');
setGlobalDispatcher(agent);

const r = await fetch('https://ifconfig.me/ip');
console.log(r.status, await r.text());</code></pre>
<p>Для axios и старого <code>http.request</code> берём внешний агент. Важная тонкость: у axios есть собственное поле <code>proxy</code>, и для адресов по HTTPS оно ломает туннель CONNECT, поэтому его выключаем и оставляем работать агент.</p>
<pre><code>const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');

const agent = new HttpsProxyAgent('http://prx7412:k29fbt@193.42.118.26:8000');

const res = await axios.get('https://example.com/api/items', {
  httpsAgent: agent,
  proxy: false,
  timeout: 20000,
});
console.log(res.status);</code></pre>
<p>Puppeteer и Playwright принимают посредника при запуске браузера: <code>--proxy-server=http://193.42.118.26:8000</code> в аргументах либо объект <code>proxy</code> с полями <code>server</code>, <code>username</code>, <code>password</code>. Пара логина с паролем передаётся отдельно, внутрь строки её класть не нужно.</p>
<p>В PHP посредник живёт в опциях cURL. Пишем адрес, тип и пару, дальше запрос идёт как обычно.</p>
<pre><code>&lt;?php
$ch = curl_init('https://ifconfig.me/ip');
curl_setopt_array($ch, [
    CURLOPT_PROXY          =&gt; '193.42.118.26',
    CURLOPT_PROXYPORT      =&gt; 8000,
    CURLOPT_PROXYTYPE      =&gt; CURLPROXY_HTTP,
    CURLOPT_PROXYUSERPWD   =&gt; 'prx7412:k29fbt',
    CURLOPT_RETURNTRANSFER =&gt; true,
    CURLOPT_CONNECTTIMEOUT =&gt; 5,
    CURLOPT_TIMEOUT        =&gt; 25,
]);
$body = curl_exec($ch);
if ($body === false) {
    echo 'curl error ', curl_errno($ch), ': ', curl_error($ch), PHP_EOL;
}
curl_close($ch);
echo $body;</code></pre>
<p>Для сокетного режима меняем одну строку: <code>CURLPROXY_SOCKS5_HOSTNAME</code> вместо <code>CURLPROXY_HTTP</code>, и разрешение имён уезжает на сторону выхода. Guzzle принимает готовую строку в опции <code>proxy</code>, там же можно задать исключения ключом <code>no</code>. Функции вроде <code>file_get_contents</code> работают через контекст потока с полем <code>proxy</code> и флагом <code>request_fulluri</code>, включённым в <code>true</code>.</p>
<p>Java читает посредника из системных свойств. Их задают ключами при запуске либо через <code>System.setProperty</code> до первого сетевого вызова.</p>
<pre><code>java -Dhttp.proxyHost=193.42.118.26 -Dhttp.proxyPort=8000 \
     -Dhttps.proxyHost=193.42.118.26 -Dhttps.proxyPort=8000 \
     -Dhttp.nonProxyHosts="localhost|127.0.0.1|*.internal" \
     -Djdk.http.auth.tunneling.disabledSchemes="" \
     -jar collector.jar</code></pre>
<p>Свойство <code>jdk.http.auth.tunneling.disabledSchemes</code> с пустым значением возвращает базовую проверку пары логина с паролем внутри туннеля CONNECT: по умолчанию среда её отключает, и запрос отваливается с отказом доступа. Сама пара подставляется через <code>Authenticator.setDefault(...)</code>. Сокетный режим включается свойствами <code>socksProxyHost</code> и <code>socksProxyPort</code>, они действуют на весь процесс сразу.</p>
<h2 id="docker-i-systemd-posrednik-dlya-konteynera-i">Docker и systemd: посредник для контейнера и для службы</h2>
<p>Контейнер собственных настроек не наследует, переменные передаются явно. При запуске одиночного контейнера это ключи <code>-e</code>, в описании сервиса это блок <code>environment</code>.</p>
<pre><code>docker run --rm \
  -e HTTP_PROXY="http://prx7412:k29fbt@193.42.118.26:8000" \
  -e HTTPS_PROXY="http://prx7412:k29fbt@193.42.118.26:8000" \
  -e NO_PROXY="localhost,127.0.0.1,db,redis,.internal" \
  parser:latest python run.py</code></pre>
<pre><code>services:
  worker:
    image: parser:latest
    environment:
      HTTP_PROXY: "http://prx7412:k29fbt@193.42.118.26:8000"
      HTTPS_PROXY: "http://prx7412:k29fbt@193.42.118.26:8000"
      NO_PROXY: "localhost,127.0.0.1,db,redis"
    depends_on:
      - db</code></pre>
<p>Три вещи ломаются здесь чаще остального. Первая: имена соседних контейнеров забыли внести в <code>NO_PROXY</code>, и обращение к базе тоже поехало наружу через посредника, где его никто не ждёт. Вторая: адрес <code>127.0.0.1</code> внутри контейнера означает сам контейнер, поэтому локальный туннель на узле доступен по имени <code>host.docker.internal</code> либо через запуск с сетью узла. Третья: во время сборки образа переменные окружения запуска не действуют, для этапа сборки они передаются ключами <code>--build-arg HTTP_PROXY=...</code>, и это отдельная настройка. Отдельно живут скачивания самого демона: чтобы <code>docker pull</code> ходил через посредника, настройка кладётся в конфигурацию клиента или в дополнение к юниту демона.</p>
<p>Служба под systemd получает переменные из юнита. Прямые строки <code>Environment=</code> подходят для адреса без пары логина, учётные данные аккуратнее вынести в отдельный файл с правами <code>600</code>, потому что содержимое юнита видно любому пользователю через <code>systemctl show</code>.</p>
<pre><code>[Unit]
Description=Price collector
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=collector
WorkingDirectory=/opt/collector
Environment=no_proxy=localhost,127.0.0.1,::1
EnvironmentFile=/etc/collector/proxy.env
ExecStart=/usr/bin/python3 /opt/collector/run.py
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target</code></pre>
<pre><code># файл с учётными данными, читает только root
sudo install -m 600 /dev/null /etc/collector/proxy.env
sudo tee /etc/collector/proxy.env &gt;/dev/null &lt;&lt;'EOF'
http_proxy=http://prx7412:k29fbt@193.42.118.26:8000
https_proxy=http://prx7412:k29fbt@193.42.118.26:8000
EOF

sudo systemctl daemon-reload
sudo systemctl restart collector
systemctl show -p Environment collector.service</code></pre>
<p>Правку чужого юнита делаем дополнением поверх исходного файла: <code>systemctl edit collector</code> создаёт отдельный фрагмент, который переживёт обновление пакета. Тем же приёмом посредник выдаётся демону контейнеров и любой другой системной службе. После каждой правки обязательны две команды: перечитать описания и перезапустить службу, иначе процесс продолжит работать со старым окружением.</p>
<p>Служба работает без человека за консолью, и это меняет требования к доступу. Ручной запуск можно поправить на ходу, а демон, который стартует ночью по таймеру, обязан подниматься с рабочими настройками с первой попытки. Поэтому под круглосуточные задачи мы берём <a href="https://iprazon.com/proxy/servernye">серверные прокси для постоянной нагрузки</a> и держим учётные данные в одном файле окружения на весь парк узлов: конфигурация раскатывается системой управления, и при добавлении нового сервера правится ровно одна строка. Проверить результат помогает вывод <code>systemctl show -p Environment</code>, он показывает окружение процесса ровно в том виде, в каком его получила служба.</p>
<h2 id="parsery-i-antidetekt-brauzery-gde-lezhit-pol">Парсеры и антидетект-браузеры: где лежит поле посредника</h2>
<p>У программ со своим интерфейсом переменные окружения обычно не работают, поле ищем внутри. Логика везде одинаковая: есть раздел со списком адресов и есть проверка живости.</p>
<div class="tabl"><table><thead><tr><th>Программа</th><th>Где искать</th><th>Что принимает</th></tr></thead><tbody><tr><td>A-Parser</td><td>Раздел прокси в настройках, отдельный чекер прокси</td><td>Файл со списком или ссылка на выдачу, <code>ip:port:login:pass</code></td></tr><tr><td>Key Collector</td><td>Настройки, вкладка сети, список посредников</td><td>Строки списком, отдельная проверка перед прогоном</td></tr><tr><td>ZennoPoster</td><td>Общий список в менеджере и кубик установки в проекте</td><td><code>socks5://login:pass@ip:port</code>, HTTP и SOCKS</td></tr><tr><td>Антидетект-браузеры</td><td>Карточка профиля, блок посредника</td><td>Тип, адрес, порт, логин, пароль отдельными полями</td></tr><tr><td>Чекер от Zennolab</td><td>Загрузка списка пачкой</td><td>Проверка отклика и типа по всему списку</td></tr></tbody></table></div>
<p>A-Parser забирает список ссылкой и обновляет его сам по расписанию, поэтому в кабинете достаточно один раз скопировать адрес выдачи и вставить его в настройки чекера. Дальше программа держит актуальный набор строк без ручных движений. Потоки в задании ставим ниже лимита пакета, потому что чекер тоже занимает соединения. Готовые настройки под потоковые прогоны собраны на странице про <a href="https://iprazon.com/instrumenty/a-parser">прокси для A-Parser и массовых прогонов</a>.</p>
<p>Key Collector берёт список во вкладке сети и умеет проверять его до запуска. Полезная привычка: прогонять проверку перед каждым большим съёмом, тогда неотвечающие строки отсекаются заранее и статистика по прогону не смазывается.</p>
<p>ZennoPoster работает на двух уровнях. Общий список живёт в менеджере и раздаётся всем проектам, а внутри проекта посредник ставится кубиком и меняется по ходу шаблона, если логика требует нового адреса на каждой итерации. Строка принимается в привычном виде со схемой впереди.</p>
<p>Антидетект-браузеры хранят посредника в карточке профиля вместе с отпечатком. Один профиль ходит через один адрес, поля заполняются раздельно, рядом обычно есть кнопка проверки, которая показывает выходной адрес до запуска браузера. Для работы с несколькими кабинетами берём <a href="https://iprazon.com/instrumenty/antidetekt">прокси под антидетект-браузеры и профили</a>, а сами адреса раздаём по профилям из списка кабинета.</p>
<h2 id="programma-posrednika-ne-ponimaet-lokalnyy-tu">Программа посредника не понимает: локальный туннель</h2>
<p>Часть софта сетевых настроек вообще не имеет. Старая утилита, самописный демон, закрытый клиент поставщика. Здесь работает обходной путь: поднимаем на машине локальный слушатель, который принимает соединения на <code>127.0.0.1</code> и уводит их вверх на наш адрес из пула. Программа ходит на собственный узел и ничего про посредника не знает.</p>
<pre><code># приём HTTP на 3128 и SOCKS на 1080, наверх уходит SOCKS5
gost -L=http://127.0.0.1:3128 -L=socks5://127.0.0.1:1080 \
     -F=socks5://prx7412:k29fbt@193.42.118.26:8000</code></pre>
<pre><code># то же самое через 3proxy, конфиг /etc/3proxy/tunnel.cfg
nserver 1.1.1.1
auth none
allow * 127.0.0.1
parent 1000 socks5 193.42.118.26 8000 prx7412 k29fbt
proxy -p3128 -i127.0.0.1
socks -p1080 -i127.0.0.1</code></pre>
<p>Ключ <code>-i127.0.0.1</code> здесь обязателен: слушатель поднимается только на локальном интерфейсе и снаружи недоступен. После запуска в настройках программы указываем <code>127.0.0.1:3128</code>, и трафик уходит через пул.</p>
<p>Второй приём для Linux это перехват вызовов сокетов. Утилита proxychains подменяет системные функции у запускаемого процесса и заворачивает соединения в посредника.</p>
<pre><code># /etc/proxychains.conf
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks5 193.42.118.26 8000 prx7412 k29fbt</code></pre>
<pre><code>proxychains4 -f /etc/proxychains.conf /opt/legacy/collector --run daily</code></pre>
<p>У перехвата есть граница: он работает через подмену библиотеки, поэтому статически собранные программы и часть исполняемых файлов на Go идут мимо него напрямую. Проверяется это одной командой с наблюдением за трафиком, и если соединения видны в обход посредника, переходим на вариант с локальным слушателем: он работает на уровне адреса и порта и от способа сборки программы не зависит. В Windows ту же задачу закрывают перехватчики уровня приложения, где правило задаётся именем исполняемого файла.</p>
<h2 id="proverka-na-servere-kuda-realno-uhodyat-zapr">Проверка на сервере: куда реально уходят запросы</h2>
<p>На рабочей станции достаточно открыть сервис проверки в браузере. На сервере смотрим системными средствами, и первый вопрос всегда один: есть ли живые соединения к порту посредника.</p>
<pre><code># соединения процесса к порту посредника
ss -tnp state established '( dst = 193.42.118.26 )'

# что открыл конкретный процесс
sudo lsof -p "$(pgrep -f collector.py)" -i -n -P

# трафик к посреднику виден, встречный трафик мимо него отсутствует
sudo tcpdump -ni eth0 'host 193.42.118.26 and port 8000' -c 20
sudo tcpdump -ni eth0 'tcp port 443 and not host 193.42.118.26' -c 20</code></pre>
<p>Вторая команда с <code>tcpdump</code> отвечает на главный вопрос: уходит ли что-нибудь наружу в обход. Если во время прогона она молчит, весь исходящий поток идёт через пул. Если строки бегут, часть библиотек в проекте посредника не подхватила, и дальше по имени узла в выводе видно, какая именно.</p>
<p>Сверку выходного адреса удобно оформить маленьким сценарием и запускать его до прогона.</p>
<pre><code>#!/usr/bin/env bash
set -u
PROXY="http://prx7412:k29fbt@193.42.118.26:8000"

direct=$(curl -s --max-time 10 https://ifconfig.me)
viaprx=$(curl -s --max-time 15 -x "$PROXY" https://ifconfig.me)

echo "напрямую: $direct"
echo "через пул: $viaprx"
[ "$direct" != "$viaprx" ] &amp;&amp; echo "OK, выходной адрес отличается" || echo "ВНИМАНИЕ, адрес совпал"</code></pre>
<p>Полный разбор каждого исхода мы держим отдельно, здесь оставляем короткую сводку по кодам и сообщениям, которые встречаются при настройке программ.</p>
<div class="tabl"><table><thead><tr><th>Что видно</th><th>Причина</th><th>Что делать</th></tr></thead><tbody><tr><td><code>407 Proxy Authentication Required</code></td><td>Пара логина с паролем отсутствует или разобрана неверно</td><td>Проверить формат строки, вынести пару отдельным ключом, закодировать служебные символы</td></tr><tr><td><code>403</code> от целевого сайта</td><td>Ответ площадки, доступ к посреднику работает</td><td>Снизить частоту, проверить заголовки запроса</td></tr><tr><td><code>curl: (5) Could not resolve proxy</code></td><td>Опечатка в адресе посредника или пустая переменная</td><td>Вывести переменные командой <code>env</code> и сверить строку</td></tr><tr><td><code>curl: (7) Failed to connect</code></td><td>Порт закрыт, локальный туннель не поднят</td><td>Проверить порт и запуск слушателя</td></tr><tr><td><code>curl: (56) Recv failure</code></td><td>Соединение закрыто на стороне выхода</td><td>Сверить привязанный адрес машины в кабинете</td></tr><tr><td><code>curl: (35) SSL connect error</code></td><td>В схеме посредника указан <code>https://</code> вместо <code>http://</code></td><td>Оставить <code>http://</code> в строке, шифрование даёт туннель CONNECT</td></tr><tr><td><code>502</code> и <code>504</code> от посредника</td><td>Целевой узел не ответил вовремя</td><td>Увеличить таймаут, повторить запрос</td></tr><tr><td>Соединения виснут пачками</td><td>Потоков больше лимита пакета</td><td>Снизить число потоков в программе</td></tr><tr><td>Запросы идут мимо посредника</td><td>Библиотека переменные не читает</td><td>Задать посредника в коде явно</td></tr></tbody></table></div>
<p>Отдельно держим в голове деление лимита. При двух привязанных адресах общее число потоков делится между ними пополам, поэтому пакет на 1000 потоков при двух привязках даёт по 500 на каждую машину. Когда прогон идёт с одного сервера, вторую привязку разумнее не занимать, и подробности этой механики разобраны в материале про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса</a>.</p>
<p>Для машин, где программ несколько и часть из них ходит по паре логина с паролем, а часть по привязке, порядок такой: сначала сверяем список программ и их способ доступа, затем правим окружение, затем перезапускаем службы. Смешивать два способа в одном процессе не нужно, доступ по учётным данным работает откуда угодно и снимает вопрос совсем. Список в формате <code>IP:PORT:LOGIN:PASS</code> выдаётся в кабинете там же, где оформляется <a href="https://iprazon.com/products/kupit-proxy-http">доступ по HTTP и HTTPS</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> для работы с привязанным адресом машины и <code>IP:PORT:LOGIN:PASS</code> для доступа по учётным данным. Забрать список можно ссылкой или файлом, оба варианта лежат в кабинете. Список обновляется в режиме реального времени, поэтому программам, которые умеют подтягивать его сами, отдаём ссылку.</p>
<h3 id="chem-proveryat-proksi-pered-progonom">Чем проверять прокси перед прогоном?</h3>
<p>Мы рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки, время отклика и тип. Для одиночной проверки хватает запроса через curl на сервис, который возвращает выходной адрес.</p>
<h3 id="est-li-limity-po-potokam">Есть ли лимиты по потокам?</h3>
<p>У каждого пакета свой лимит: стандартные дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются, и при двух привязанных адресах общее число потоков делится пополам. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, это защищает пул в интересах всех клиентов.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете: после регистрации и покупки указываем свой адрес в настройках либо берём формат с учётными данными. Пакет включается примерно за 5 минут, после чего раздел выдачи отдаёт список адресов, и строка подключения вставляется в программу.</p>
<p>Настройку удобно продолжить соседними разборами: <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a> от покупки до рабочего запроса, <a href="/podklyuchenie/stroka-podklyucheniya/">строка подключения по полям</a> со схемой, портом и парой доступа, <a href="/podklyuchenie/v-brauzere/">настройка посредника в браузере</a> для ручной работы и профилей. Когда программы настроены и прогон запущен, следующим шагом идёт <a href="/proverka/kak-proverit/">проверка работы прокси по шагам</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/v-programmah/">https://kupit-proxy-ipv4.ru/podklyuchenie/v-programmah/</a></p>]]></content:encoded></item>
<item><title>Смена привязанного адреса прокси и переезд на другую машину</title><link>https://kupit-proxy-ipv4.ru/podklyuchenie/smena-privyazki/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/podklyuchenie/smena-privyazki/</guid><description>Привязанный адрес меняется в кабинете за минуту: открываем настройки пакета, стираем прежнюю строку, вписываем внешний адрес новой машины, сохраняем. Менять…</description><content:encoded><![CDATA[
<p class="vvod">Привязанный адрес меняется в кабинете за минуту: открываем настройки пакета, стираем прежнюю строку, вписываем внешний адрес новой машины, сохраняем. Менять привязку разрешено без ограничений и сколько угодно раз, в пакет входит одновременная привязка 2 адресов, поэтому переезд с рабочей станции на сервер проходит без остановки работы.</p>
<p>Ниже разобрана сама процедура: когда смену делать обязательно, в каком порядке идти, как убедиться, что запросы отбивает именно привязка, что происходит с лимитом потоков в момент правки и как согласовать смену с уже запущенным прогоном. Устройство привязки как механики доступа лежит в отдельном материале про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса к пакету</a>, здесь мы занимаемся переездом.</p>
<h2 id="kogda-privyazku-prihoditsya-menyat">Когда привязку приходится менять</h2>
<p>Поводов ровно пять, и все они бытовые. Провайдер выдал машине другой внешний адрес после переподключения. Прогон уезжает с ноутбука на арендованный узел. Компания сменила офис или провайдера. Сотрудник работает из другого места несколько дней. Рабочую машину заменили на новую.</p>
<p>Общее у всех случаев одно: наружу начинает выходить незнакомый кабинету адрес, и проверка права отсекает запрос ещё до целевого сайта. Ответ приходит быстро, обычно это обрыв соединения на этапе установки связи. Работа встаёт целиком, потому что отбиваются все строки списка сразу.</p>
<div class="tabl"><table><thead><tr><th>Причина смены</th><th>Что делаем</th><th>На что смотрим после</th></tr></thead><tbody><tr><td>Провайдер выдал другой адрес</td><td>Смотрим текущий внешний адрес, вписываем его в настройки</td><td>Пробный запрос через curl проходит</td></tr><tr><td>Прогон переезжает на сервер</td><td>Добавляем адрес сервера второй строкой, машину администратора оставляем</td><td>Обе машины отвечают, лимит потоков поделён</td></tr><tr><td>Смена офиса или провайдера</td><td>Меняем обе привязки на новые адреса точки</td><td>Все рабочие места ходят через пул</td></tr><tr><td>Работа из другого места несколько дней</td><td>Занимаем вторую привязку на время поездки</td><td>По возвращении вторая строка освобождается</td></tr><tr><td>Замена рабочей машины</td><td>Переносим настройки софта, вписываем адрес новой машины</td><td>Список адресов перечитан из кабинета</td></tr><tr><td>Постоянно меняющийся адрес провайдера</td><td>Переходим на доступ по паре логина с паролем</td><td>Привязка перестаёт влиять на работу</td></tr></tbody></table></div>
<p>Отдельно стоит случай, когда адрес меняется сам по себе каждые несколько часов. Тут смена привязки превращается в дежурство у кабинета, и мы предлагаем другой порядок: перевести доступ на пару логина с паролем. Про него ниже есть отдельный раздел.</p>
<h2 id="poryadok-smeny-v-kabinete-pyat-shagov">Порядок смены в кабинете: пять шагов</h2>
<p>Процедура короткая, ошибиться в ней можно ровно в одном месте: вписать внутренний адрес машины вместо внешнего. Поэтому первый шаг посвящён именно определению адреса.</p>
<p><strong>Шаг первый. Узнаём внешний адрес новой машины.</strong> Запрос делается с той самой машины, с которой пойдут запросы через пул. Адрес вида <code>192.168.0.15</code> или <code>10.8.0.3</code> в настройки не годится, кабинету видна только внешняя точка выхода.</p>
<pre><code># Linux и macOS
curl -s https://ifconfig.me
curl -s https://api.ipify.org

# то же самое, если curl отсутствует
wget -qO- https://ifconfig.me</code></pre>
<pre><code># Windows PowerShell
(Invoke-RestMethod https://ifconfig.me/ip).Trim()

# внутренние адреса машины, для сверки
Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, InterfaceAlias</code></pre>
<p><strong>Шаг второй. Открываем настройки пакета в кабинете.</strong> Раздел с адресами доступа лежит в карточке пакета вместе с выдачей списка. Там видно, какие строки заняты сейчас и сколько привязок свободно.</p>
<p><strong>Шаг третий. Правим строку.</strong> Прежний адрес стираем, вписываем новый и сохраняем. Если вторая привязка свободна, новую машину удобнее сначала добавить второй строкой, а старую убрать после проверки: тогда между двумя состояниями нет промежутка, в котором не работает ни одна машина.</p>
<p><strong>Шаг четвёртый. Ждём применения.</strong> Настройка расходится по узлам пула не мгновенно, обычно на это уходят единицы минут, столько же занимает включение свежего пакета. Спокойный порядок такой: сохранили, подождали, проверили.</p>
<p><strong>Шаг пятый. Проверяем запросом.</strong> Берём любую строку из списка и делаем один запрос на сервис, который возвращает выходной адрес.</p>
<pre><code># доступ по привязанному адресу, формат списка IP:PORT
curl -x http://178.62.203.41:8000 https://ifconfig.me

# код ответа и время, без тела страницы
curl -x http://178.62.203.41:8000 -sS -o /dev/null \
  -w "code=%{http_code} connect=%{time_connect}\n" https://example.com</code></pre>
<p>Ответ с адресом из пула говорит, что привязка встала. Обрыв соединения на том же запросе означает, что кабинет пока видит прежнюю строку либо в настройках опечатка. Полный набор проверок после любой правки доступа собран в разборе про <a href="/osnovy/avtorizaciya/">сравнение способов доступа к пулу</a>.</p>
<h2 id="otkaz-po-privyazke-ili-drugaya-prichina-kak-">Отказ по привязке или другая причина: как отличить</h2>
<p>Смена привязки помогает только тогда, когда отказ идёт именно от неё. Половина обращений к оператору начинается со слов про слетевшую привязку, а заканчивается разбором частоты запросов к целевому сайту. Разделить эти случаи можно за пару минут.</p>
<p>Главный признак отказа по привязке мы проверяем первым: отбиваются все адреса списка одновременно и на любом целевом сайте. Наш пул держит около 12 000 активных адресов, и вероятность того, что весь набор перестал работать сам по себе, ничтожна. Второй признак: соединение обрывается на этапе установки связи, ответа от целевого сайта нет вообще. Третий: с соседней машины, чей адрес привязан, тот же список работает нормально.</p>
<div class="tabl"><table><thead><tr><th>Что наблюдаем</th><th>Похоже на привязку</th><th>Похоже на другую причину</th></tr></thead><tbody><tr><td>Обрыв соединения сразу, ответа нет</td><td>Отбиваются все строки списка на всех доменах</td><td>Отбивается один адрес из списка</td></tr><tr><td>Ошибка <code>407</code></td><td>Используется формат с логином, пара разобрана неверно</td><td>Пара логина введена верно, доступ по привязке не настроен</td></tr><tr><td>Код <code>403</code> от целевого сайта</td><td>Признак не относится к привязке</td><td>Сайт отвечает, дело в частоте и заголовках</td></tr><tr><td>Часть потоков отбивается, часть работает</td><td>Занята вторая привязка, лимит поделён пополам</td><td>Число потоков в программе выше лимита пакета</td></tr><tr><td>Работает с одной машины, молчит с другой</td><td>Адрес второй машины в настройках отсутствует</td><td>Различаются настройки софта на машинах</td></tr><tr><td>Перестало работать после перезагрузки роутера</td><td>Провайдер выдал новый внешний адрес</td><td>Настройки сети на машине сбросились</td></tr></tbody></table></div>
<pre><code># 1. проверка прямого выхода: адрес машины сейчас
curl -s https://ifconfig.me; echo

# 2. проверка через пул: обрыв здесь при рабочем шаге 1 указывает на доступ
curl -sS -x http://178.62.203.41:8000 https://ifconfig.me; echo

# 3. подробный вывод, видно на каком этапе оборвалось
curl -v -x http://178.62.203.41:8000 https://example.com 2&gt;&amp;1 | head -20</code></pre>
<p>Типичный вывод при отказе по привязке выглядит как <code>curl: (56) Recv failure: Connection reset by peer</code> либо как обрыв сразу после <code>Connected to 178.62.203.41</code>. Ошибка <code>407 Proxy Authentication Required</code> говорит о другом: запрос дошёл, проверка права сработала и ждёт пару логина с паролем. Разбор этой ошибки по шагам мы вынесли отдельно, здесь достаточно понимать разницу между двумя картинами.</p>
<p>Ещё одна проверка занимает секунды и снимает половину вопросов: сверить строку в кабинете с текущим внешним адресом машины символ в символ. Провайдеры часто меняют адрес в пределах соседней подсети, различие сидит в последнем октете, и глаз его пропускает.</p>
<h2 id="dinamicheskiy-adres-provaydera-perehod-na-lo">Динамический адрес провайдера: переход на логин с паролем</h2>
<p>Если провайдер выдаёт новый адрес после каждого переподключения, править кабинет придётся регулярно. Формально это разрешено: привязку меняют без ограничений прямо в настройках, счётчика смен нет. Практически удобнее закрыть вопрос совсем, и для этого в пакете есть второй способ доступа.</p>
<p>Берём в разделе выдачи формат <code>IP:PORT:LOGIN:PASS</code>. Проверка права переезжает в строку подключения, внешний адрес машины перестаёт влиять на работу, и запросы проходят из любой сети: из офиса, из дома, с ноутбука в поездке, с любого сервера. Оба режима входят в пакет, переключаться между ними можно в любой момент. Как устроены оба варианта доступа, показано на странице про <a href="https://iprazon.com/proxy/privatnye">приватный доступ с привязкой своего адреса</a>.</p>
<pre><code># формат под привязанный адрес
178.62.203.41:8000
178.62.203.42:8000

# формат с парой логина и пароля
178.62.203.41:8000:usr8830:t4mq7v
178.62.203.42:8000:usr8830:t4mq7v</code></pre>
<pre><code># тот же запрос с учётными данными в строке
curl -x http://usr8830:t4mq7v@178.62.203.41:8000 https://ifconfig.me

# пара вынесена отдельным ключом, удобно при служебных символах в пароле
curl -x 178.62.203.41:8000 --proxy-user 'usr8830:t4mq7v' https://ifconfig.me</code></pre>
<p>Переход занимает несколько минут. В кабинете меняем формат выдачи, забираем свежий список ссылкой или файлом, подставляем его в программу вместо прежнего. Настройки привязки при этом остаются на месте и работают дальше, поэтому машина с постоянным адресом продолжает ходить как раньше, а ноутбук в поездке идёт по паре логина. Подробности того, как программы принимают такую строку, разобраны на странице с <a href="https://iprazon.com/products/kupit-proxy-http">доступом по HTTP и HTTPS</a>.</p>
<p>Один момент стоит держать в голове при работе командой. Пара логина с паролем едет вместе с конфигом, поэтому её кладут в файл окружения с правами <code>600</code> и не отправляют в общий чат. Уборка тут простая: один файл на машину, доступ у своего пользователя, обновление через систему управления конфигурацией.</p>
<h2 id="dve-privyazki-v-pakete-kak-osvobodit-odnu">Две привязки в пакете: как освободить одну</h2>
<p>В пакет входит одновременная привязка 2 адресов. Типовая раскладка выглядит так: рабочая машина администратора и боевой сервер, либо офисная машина и домашний кабинет сотрудника. Обе строки живут независимо, и каждую из них меняют отдельно.</p>
<p>Освободить привязку значит стереть строку и сохранить настройки. Слот становится пустым и готов принять новый адрес. Смысл в этом появляется в двух случаях. Первый: поездка закончилась, временный адрес больше не нужен, и лишняя занятая строка забирает половину лимита потоков. Второй: сервер выведен из работы, его адрес висит в настройках и мешает вписать новый узел.</p>
<div class="tabl"><table><thead><tr><th>Состояние привязок</th><th>Доступный лимит потоков</th><th>Когда так удобно</th></tr></thead><tbody><tr><td>Занята одна строка</td><td>Полный лимит пакета на одну машину</td><td>Весь прогон идёт с одного узла</td></tr><tr><td>Заняты обе строки</td><td>Лимит делится пополам между адресами</td><td>Работают две машины одновременно</td></tr><tr><td>Освободили вторую строку</td><td>Полный лимит возвращается первой машине</td><td>Вторая машина больше не нужна</td></tr><tr><td>Обе строки свободны, доступ по паре логина</td><td>Лимит пакета работает по учётным данным</td><td>Адрес машины меняется постоянно</td></tr></tbody></table></div>
<p>Порядок освобождения мы держим простым: сначала останавливаем прогон на той машине, чью привязку убираем, потом стираем строку, потом сохраняем. Обратный порядок даёт короткий отрезок, где программа шлёт запросы, доступ для неё уже закрыт, и логи наполняются обрывами соединения. Ничего опасного в этом нет, зато разбор таких логов отнимает время.</p>
<p>Число пакетов на аккаунте не ограничено, поэтому команде с тремя постоянными узлами удобнее взять второй пакет и развести машины по разным лимитам. Потоки разных пакетов не складываются, каждый работает со своим лимитом, и состав вместе с потоками и привязками описан там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет прокси IPv4 с доступом к пулу</a>.</p>
<h2 id="limit-potokov-v-moment-smeny">Лимит потоков в момент смены</h2>
<p>Правка привязки лимит не сбрасывает и прогон не обнуляет. Меняется другое: распределение потоков между привязанными адресами. При двух занятых строках общее число делится пополам, поэтому пакет на 1000 потоков даёт по 500 на каждую машину, а корпоративный с лимитом 3000 отдаёт по 1500.</p>
<p>Отсюда практический вывод для переезда. Когда вторая привязка добавлена под новый сервер, на старой машине доступная половина уменьшается сразу. Программа, настроенная на 800 потоков, упрётся в потолок и начнёт получать отказы, хотя в кабинете ничего плохого не произошло. Порядок такой: перед добавлением второй строки снижаем потоки в софте до половины лимита, а после освобождения строки возвращаем прежнее значение.</p>
<pre><code># короткая серия запросов, видно где начинаются отказы
for i in $(seq 1 20); do
  curl -sS -o /dev/null -w "%{http_code} " \
    -x http://178.62.203.41:8000 https://example.com
done; echo</code></pre>
<p>Если в серии пошли пустые коды и обрывы, число одновременных соединений в программе выше доступной половины. Трафик при этом безлимитный на всех пакетах, объём выкачанных страниц на лимит потоков не влияет, считать гигабайты не нужно ни при какой схеме привязок.</p>
<h2 id="smena-privyazki-vo-vremya-zapuschennogo-prog">Смена привязки во время запущенного прогона</h2>
<p>Самая неприятная ситуация выглядит так: идёт съём позиций на несколько часов, до конца работы половина, и в этот момент провайдер выдаёт машине новый адрес. Прогон продолжает слать запросы, доступ уже закрыт, и результаты последних минут теряются. Порядок действий здесь зависит от того, умеет ли программа ставить работу на паузу.</p>
<p>Первый вариант, когда пауза есть. A-Parser, Key Collector и ZennoPoster держат кнопку остановки с сохранением состояния. Ставим прогон на паузу, меняем строку в кабинете, ждём применения, делаем пробный запрос через curl, продолжаем работу. Потери сводятся к нескольким минутам простоя.</p>
<p>Второй вариант, когда паузы нет и остановка означает потерю очереди. Тут выручает вторая привязка. Новый адрес добавляем второй строкой, не трогая первую: прогон продолжает идти по старой записи, если она ещё действует, а новая машина получает доступ параллельно. После окончания работы лишнюю строку освобождаем. Единственное, что меняется по ходу, это деление лимита потоков пополам, поэтому крупные прогоны заранее запускаем с запасом по числу соединений.</p>
<p>Третий вариант закрывает вопрос до его появления: перед длинным прогоном переводим доступ на пару логина с паролем. Тогда смена внешнего адреса машины на работу не влияет вообще, и переподключение провайдера проходит незамеченным.</p>
<pre><code>#!/usr/bin/env bash
# следим за внешним адресом машины во время прогона
STATE=/var/lib/collector/wan.ip
cur=$(curl -s --max-time 10 https://ifconfig.me)
old=$(cat "$STATE" 2&gt;/dev/null || echo "")

if [ -n "$cur" ] &amp;&amp; [ "$cur" != "$old" ]; then
  echo "$(date '+%H:%M:%S') внешний адрес сменился: ${old:-нет данных} -&gt; $cur"
  echo "$cur" &gt; "$STATE"
fi</code></pre>
<p>Сценарий вешаем в планировщик с шагом в пять минут и выводом в файл журнала. Смена адреса перестаёт быть сюрпризом: администратор видит запись и правит кабинет до того, как логи прогона наполнятся обрывами. Для команд, где прогоны идут неделями подряд, спокойнее держать <a href="https://iprazon.com/proxy/na-mesyats">доступ к пулу на месяц</a> и один раз настроить наблюдение за адресом.</p>
<h2 id="pereezd-na-server-poryadok-deystviy">Переезд на сервер: порядок действий</h2>
<p>Переезд с рабочей станции на постоянный узел это самый частый повод для смены привязки. Порядок отличается от простой правки строки, потому что вместе с адресом переезжают настройки софта и способ доступа.</p>
<p>Начинаем с адреса. Заходим на сервер и смотрим внешний адрес оттуда: у арендованного узла он обычно совпадает с адресом интерфейса, при работе за шлюзом отличается. Дальше открываем вторую привязку под сервер, оставляя рабочую машину в первой строке. Так администратор сохраняет возможность проверять доступ со своей стороны, пока идёт настройка.</p>
<p>Второй шаг это перенос конфигурации. Список адресов забираем в кабинете заново: он обновляется в режиме реального времени, и файл с прошлого месяца отдаст часть неотвечающих строк. Программам, которые умеют подтягивать список сами, отдаём ссылку на выдачу, тогда обновление уходит из ручных операций совсем.</p>
<p>Третий шаг это запуск под службой. Прогон на сервере живёт демоном, переменные окружения задаются в юните, и здесь удобнее держать доступ по паре логина: конфигурация не зависит от того, какой адрес у узла сегодня. Настройка посредника для служб, контейнеров и программ разобрана в материале про <a href="/podklyuchenie/v-programmah/">подключение прокси в программах</a>.</p>
<p>Четвёртый шаг это проверка под нагрузкой. Запускаем короткий прогон на пару сотен запросов с боевыми настройками и смотрим коды ответов и время отклика. Цифры сравниваем с теми, что были на рабочей станции: если отклик вырос заметно, дело обычно в канале узла. Постоянную нагрузку с серверов мы закрываем пакетами, где взяты <a href="https://iprazon.com/proxy/servernye">серверные адреса под круглосуточные прогоны</a>.</p>
<p>Пятый шаг это освобождение лишней привязки. Когда сервер отработал сутки ровно, строку рабочей машины стираем, и полный лимит потоков возвращается серверу. Если администратору нужен доступ со своей машины постоянно, оставляем обе строки и считаем нагрузку по половине лимита.</p>
<h2 id="pereezd-na-novuyu-mashinu-i-rabota-iz-drugog">Переезд на новую машину и работа из другого места</h2>
<p>Замена рабочей машины проходит тем же порядком, только короче. Узнаём внешний адрес нового компьютера, вписываем его вместо прежнего, переносим настройки программ, перечитываем список из кабинета. Настройки браузера и антидетект-профилей переносятся отдельно, потому что там посредник хранится внутри профиля.</p>
<p>Работа из другого места несколько дней закрывается второй привязкой. Сотрудник уехал, вписал адрес точки, где сидит, и работает. По возвращении строка стирается, полный лимит потоков возвращается офисной машине. Если поездки частые и адрес меняется каждый день, ту же задачу удобнее закрыть парой логина с паролем и не трогать кабинет вообще.</p>
<div class="tabl"><table><thead><tr><th>Ситуация</th><th>Какую строку правим</th><th>Что ещё перенести</th></tr></thead><tbody><tr><td>Новый компьютер вместо старого</td><td>Первую, поверх прежнего адреса</td><td>Настройки программ, профили браузера, свежий список</td></tr><tr><td>Командировка на несколько дней</td><td>Вторую, временно</td><td>Ничего, доступ открывается сразу</td></tr><tr><td>Переезд офиса</td><td>Обе строки на новые адреса точки</td><td>Проверить выход у всех рабочих мест</td></tr><tr><td>Добавили второй сервер</td><td>Вторую, под адрес узла</td><td>Юнит службы и файл окружения</td></tr><tr><td>Возврат к одной машине</td><td>Стираем лишнюю строку</td><td>Вернуть прежнее число потоков в софте</td></tr></tbody></table></div>
<p>Отдельная привычка помогает при любом переезде: держать текущие внешние адреса машин в одном коротком файле рядом с конфигурацией. Строка вида «офис, сервер сборки, узел прогона» с адресами занимает три записи, зато при следующей правке кабинета видно сразу, какая машина за какой строкой стоит, и стирается ровно та привязка, которая больше не нужна.</p>
<p>Перед крупным переездом полезно вспомнить про бесплатный тест до 2 часов. Он доступен под конкретный запрос до покупки, и если новая площадка ведёт себя иначе, поведение видно заранее. Состав пакета с двумя привязками и потоками показан на странице, где собран <a href="https://iprazon.com/proxy/privatnye">пакет с двумя привязками адресов</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chto-delat-esli-u-menya-dinamicheskiy-adres-">Что делать, если у меня динамический адрес провайдера?</h3>
<p>Привязанный адрес можно менять без ограничений прямо в настройках кабинета, счётчика смен нет. Если адрес меняется по нескольку раз в день, удобнее перейти на формат <code>IP:PORT:LOGIN:PASS</code>: проверка права уезжает в строку подключения, и внешний адрес машины на работу больше не влияет.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Обе строки меняются свободно и независимо друг от друга. При двух привязанных адресах общее число потоков делится между ними пополам, поэтому вторую строку разумно занимать тогда, когда вторая машина действительно работает.</p>
<h3 id="est-li-limity-po-potokam-posle-smeny-privyaz">Есть ли лимиты по потокам после смены привязки?</h3>
<p>Лимит определяется пакетом: стандартные дают до 1000 потоков, корпоративный до 3000. Смена привязки лимит не меняет, меняется его распределение между машинами. Пакеты по потокам не складываются, поэтому рост нагрузки закрывается переходом на старший вариант.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-smeny-priv">Как подключиться к прокси после смены привязки?</h3>
<p>Всё делается в кабинете: указываем адрес в настройках, ждём применения и делаем пробный запрос. Включение пакета занимает примерно 5 минут, столько же обычно уходит на применение новой привязки. Список адресов при этом перечитывать не обязательно, хотя перед крупным прогоном мы всегда берём свежую выдачу.</p>
<p>Дальше по подключению собраны соседние разборы: <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение от покупки до запроса</a> для тех, кто настраивает доступ впервые, <a href="/podklyuchenie/stroka-podklyucheniya/">разбор строки подключения по полям</a> со схемой, портом и парой доступа, <a href="/podklyuchenie/v-brauzere/">настройка посредника в браузере</a> для ручной работы и профилей. Если после переезда запросы отбиваются с кодом авторизации, порядок действий описан в материале про <a href="/proverka/oshibka-407/">ошибку 407 при работе через прокси</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/podklyuchenie/smena-privyazki/">https://kupit-proxy-ipv4.ru/podklyuchenie/smena-privyazki/</a></p>]]></content:encoded></item>
<item><title>Как проверить прокси: команды, браузер и разбор ответов</title><link>https://kupit-proxy-ipv4.ru/proverka/kak-proverit/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/kak-proverit/</guid><description>Прокси работает, если он принимает соединение на своём порту, пропускает запрос дальше и возвращает ответ целевой площадки. Второе условие: внешний адрес,…</description><content:encoded><![CDATA[
<p class="vvod">Прокси работает, если он принимает соединение на своём порту, пропускает запрос дальше и возвращает ответ целевой площадки. Второе условие: внешний адрес, который видит эта площадка, отличается от адреса машины, с которой запрос ушёл. Оба условия закрывает одна команда curl, и с неё удобно начинать любую проверку.</p>
<p>Дальше начинаются частности. Порт отвечает, сервис за ним молчит. Сервис отвечает, площадка возвращает отказ. Имя домена разрешается на локальной машине, хотя сам запрос идёт через туннель. Снаружи все три случая выглядят одинаково: «не работает». Ниже разобран каждый уровень по отдельности, с командами, выводом и таблицей исходов.</p>
<h2 id="chto-znachit-proksi-rabotaet">Что значит «прокси работает»</h2>
<p>В обращениях формулировка «прокси не работает» покрывает четыре разных состояния. У одного пользователя «у меня всё висит на подключении», у второго «мой внешний адрес остался прежним», третий пишет «мне возвращается 407», четвёртый сообщает «я вижу капчу на каждой странице». Поломки тут разные, и порядок проверки для них тоже разный.</p>
<p>Проверка распадается на четыре независимых уровня, каждый следующий проверяется после предыдущего:</p>
<ul><li><strong>Доступность порта.</strong> TCP-соединение до пары IP:PORT устанавливается, ответ приходит от сетевого стека.</li><li><strong>Ответ сервиса.</strong> Посредник принял запрос и ответил по своему протоколу: HTTP-туннель через метод CONNECT либо рукопожатие SOCKS.</li><li><strong>Ответ целевой площадки.</strong> Сайт вернул содержимое, код ответа пришёл от самого сайта.</li><li><strong>Разрешение имён.</strong> Домен превращается в адрес на стороне посредника, внутри туннеля.</li></ul>
<p>Разделение выглядит формальным ровно до первого разбора. Когда порт закрыт, вы получаете отказ за миллисекунды и никакого HTTP-обмена не видите вовсе. Когда порт открыт, но авторизация не принята, обмен начинается и обрывается на 407. Когда всё принято, но площадка отдаёт капчу, канал полностью рабочий, а вопрос переезжает в область поведения запросов. Три ситуации требуют трёх разных действий, поэтому первый шаг любой диагностики: понять, на каком уровне обрыв.</p>
<div class="tabl"><table><thead><tr><th>Уровень</th><th>Что подтверждает</th><th>Чем проверяется</th></tr></thead><tbody><tr><td>Порт</td><td>TCP до IP:PORT открыт</td><td><code>nc -vz</code>, <code>Test-NetConnection</code></td></tr><tr><td>Сервис</td><td>посредник принял запрос</td><td><code>curl -v</code>, строка <code>200 Connection established</code></td></tr><tr><td>Площадка</td><td>сайт отдал содержимое</td><td>код ответа сайта в <code>%{http_code}</code></td></tr><tr><td>Имена</td><td>домен разрешается в туннеле</td><td>сравнение <code>socks5h</code> и <code>socks5</code></td></tr><tr><td>Выходной адрес</td><td>трафик идёт через пул</td><td>эхо-сервис плюс сверка с прямым запросом</td></tr><tr><td>Стабильность</td><td>серия держится ровно</td><td>цикл из 20 запросов, подсчёт исходов</td></tr></tbody></table></div>
<p>Пул на стороне сервиса держится в районе 12 000 активных адресов, список обновляется в режиме реального времени. Ротация идёт автоматически внутри пула, поэтому два соседних запроса штатно уходят с разных выходов. Именно так работают <a href="https://iprazon.com/proxy/anonimnye">анонимные прокси с подменой адреса</a>, и это стоит держать в голове: смена выходного адреса между запросами это признак исправной работы.</p>
<h2 id="proverka-odnoy-komandoy-curl">Проверка одной командой curl</h2>
<p>Одна строка закрывает сразу три уровня: порт, сервис и ответ площадки.</p>
<pre><code>curl -sS -o /dev/null -m 15 \
  -w 'code=%{http_code} time=%{time_total}\n' \
  -x http://203.0.113.10:8000 https://api.ipify.org
echo "exit=$?"</code></pre>
<p>Ключ <code>-x</code> задаёт посредника, <code>-m 15</code> ограничивает общее время, <code>-o /dev/null</code> выбрасывает тело ответа, <code>-w</code> печатает только то, что нужно для разбора. Строка <code>code=200 time=0.412</code> и <code>exit=0</code> означают полный успех: соединение установлено, туннель поднят, сайт ответил. Любой другой исход разбирается по коду завершения curl, они собраны в таблице ниже.</p>
<p>Формат доступа зависит от того, как выдан список. При доступе по привязанному адресу строка короткая, логин и пароль не нужны. При формате <code>IP:PORT:LOGIN:PASS</code> учётные данные подставляются в ключ <code>-x</code> либо выносятся отдельно.</p>
<pre><code># доступ по привязанному адресу, формат списка IP:PORT
curl -x http://203.0.113.10:8000 https://api.ipify.org

# формат списка IP:PORT:LOGIN:PASS
curl -x http://u38471:s7kq2mfa@203.0.113.10:8000 https://api.ipify.org

# то же самое, если в пароле есть служебные символы
curl -x http://203.0.113.10:8000 --proxy-user 'u38471:s7kq2mfa' https://api.ipify.org</code></pre>
<p>Когда короткая команда возвращает ошибку, включается подробный режим. Ключ <code>-v</code> печатает обмен построчно, и по нему видно, на каком шаге всё остановилось.</p>
<pre><code>curl -v -o /dev/null -m 15 -x http://203.0.113.10:8000 https://api.ipify.org</code></pre>
<pre><code>* Trying 203.0.113.10:8000...
* Connected to 203.0.113.10 (203.0.113.10) port 8000
* CONNECT tunnel: HTTP/1.1 negotiated
&gt; CONNECT api.ipify.org:443 HTTP/1.1
&gt; Host: api.ipify.org:443
&gt; Proxy-Connection: Keep-Alive
&lt; HTTP/1.1 200 Connection established
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
&gt; GET /?format=text HTTP/2
&lt; HTTP/2 200</code></pre>
<p>Читается вывод сверху вниз. Строка <code>Trying</code> означает, что curl начал устанавливать TCP-соединение. <code>Connected to</code> подтверждает открытый порт. Дальше идёт запрос <code>CONNECT</code>, и ответ <code>200 Connection established</code> подтверждает, что посредник согласился поднять туннель к запрошенному хосту. Следом видно согласование TLS, и только после него появляется код самой площадки. Обрыв на любой из этих строк указывает точный уровень поломки, и дальше уже не приходится гадать.</p>
<p>Проверять полезно сразу два адреса назначения: один по http, второй по https. Обычный запрос уходит через посредника целиком, вместе с полным путём в стартовой строке, и посредник видит и путь, и заголовки. Запрос по https идёт внутри туннеля, поднятого методом CONNECT, и посреднику достаётся только имя хоста с портом. Схемы обрабатываются разным кодом, поэтому исход у них расходится: бывает так, что простой запрос проходит, зашифрованный обрывается на согласовании TLS.</p>
<pre><code>curl -sS -o /dev/null -w 'http=%{http_code}\n'  -x http://203.0.113.10:8000 http://example.com
curl -sS -o /dev/null -w 'https=%{http_code}\n' -x http://203.0.113.10:8000 https://example.com</code></pre>
<h2 id="chto-pokazyvaet-brauzer-i-na-chto-smotret">Что показывает браузер и на что смотреть</h2>
<p>Браузер удобен для быстрой проверки и почти бесполезен для точной. Он скрывает половину обмена, зато сразу показывает картину глазами обычного посетителя. Порядок такой: внести адрес и порт в настройки, открыть эхо-страницу, посмотреть отданный адрес, затем открыть инструменты разработчика и проверить вкладку «Сеть».</p>
<p>В карточке любого запроса есть поле Remote Address. Через посредника там стоит адрес и порт самого посредника. Адрес сайта появляется в этом поле только при прямом соединении. Это самая надёжная проверка внутри браузера: поле заполняется сетевым слоем и не подделывается содержимым страницы. Рядом полезно глянуть заголовки ответа и статус.</p>
<p>Отдельный срез даёт профиль антидетект-браузера. Настройки посредника там живут внутри профиля, системные параметры на него не влияют, поэтому проверка идёт изнутри самого профиля: открыть эхо-страницу в его окне и сверить отданный адрес. Заодно проверьте, отключён ли WebRTC: он умеет отдавать адреса сетевых интерфейсов в обход посредника, и внешне это выглядит как рабочая связка с утечкой. Вся проверка занимает секунды.</p>
<p>Chrome и браузеры на его основе берут системные настройки, поэтому для отдельной проверки удобно запускать сеанс с ключом.</p>
<pre><code>chrome --proxy-server="http://203.0.113.10:8000" --user-data-dir=/tmp/proxytest</code></pre>
<p>Firefox держит собственные настройки в разделе сетевых параметров, и там же стоит галочка «Проксировать DNS при использовании SOCKS 5». Без неё имена разрешаются на локальной машине, и запрос к домену уходит мимо туннеля, хотя само соединение идёт через посредника.</p>
<p>Типичное сообщение из обращений: «мой адрес не поменялся, хотя настройки я внёс». Причин две. Первая: настройки внесены в профиль браузера, а проверка идёт через расширение со своими правилами. Вторая: страница отдана из кэша. Обе снимаются приватным окном и жёсткой перезагрузкой. Ошибки вида <code>ERR_PROXY_CONNECTION_FAILED</code> и <code>ERR_TUNNEL_CONNECTION_FAILED</code> говорят о том, что до посредника достучаться не вышло. Всплывающее окно с запросом логина и пароля означает 407 и разбирается отдельно.</p>
<h2 id="vyhodnoy-adres-i-sverka-s-pryamym-zaprosom">Выходной адрес и сверка с прямым запросом</h2>
<p>Ответ эхо-сервиса сам по себе ничего не доказывает. Смысл появляется при сравнении двух значений: адрес при прямом запросе и адрес через посредника.</p>
<pre><code>direct=$(curl -s -m 10 https://api.ipify.org)
tunnel=$(curl -s -m 15 -x http://203.0.113.10:8000 https://api.ipify.org)
printf 'прямой=%s через посредника=%s\n' "$direct" "$tunnel"</code></pre>
<p>Значения различаются, значит трафик идёт через пул. Значения совпали, значит клиент проигнорировал настройки и ушёл напрямую. Второй случай встречается чаще, чем кажется: программа читает переменные окружения, системный профиль или собственный конфиг, и приоритет у них может быть выше, чем у ключа в командной строке.</p>
<p>Формулировка «у меня в браузере одно, а в скрипте другое» сводится ровно к этому расхождению. Браузер и скрипт читают разные источники настроек, поэтому сверять надо каждый инструмент отдельно, своей командой, со своей проверкой выходного адреса.</p>
<p>Полезно снимать адрес с двух независимых эхо-сервисов. Один может отдавать кэшированный ответ, второй показывает свежий, и расхождение между ними сразу видно. Проверять географию выхода смысла мало: пул собран как микс со всего мира, адреса приходят из множества стран, выборка по отдельной стране не делается. Разные страны в соседних запросах это штатное поведение <a href="https://iprazon.com/proxy/anonimnye">нашего пакета анонимных прокси</a>.</p>
<h2 id="proverka-dostupnosti-porta-otdelno">Проверка доступности порта отдельно</h2>
<p>Когда curl падает мгновенно, стоит отделить сетевой уровень от прикладного. Проверка порта отвечает на один вопрос: доходит ли пакет вообще.</p>
<pre><code>nc -vz -w 5 203.0.113.10 8000</code></pre>
<pre><code>Test-NetConnection 203.0.113.10 -Port 8000 -InformationLevel Detailed</code></pre>
<p>Исходов ровно три, и они читаются по-разному. <code>succeeded</code> означает, что порт открыт и слушается. Мгновенный <code>connection refused</code> означает, что машина на месте, но на порту никто не отвечает: чаще всего в строке перепутан порт. Тишина до истечения таймаута означает, что пакет отбрасывается молча, и вот это самый частый случай при доступе по привязке.</p>
<p>Логика простая. При доступе по привязанному адресу сервис принимает соединения только с известных ему адресов, остальные отбрасываются без ответа. В пакет входит две привязки, менять их можно свободно в настройках кабинета. Если провайдер выдал новый адрес, старая привязка перестаёт совпадать, и снаружи это выглядит как полностью мёртвый порт. Отсюда правило: перед разбором сети сначала сверьте привязанный адрес с текущим внешним адресом машины.</p>
<p>Ещё одна деталь про потоки. При двух привязанных адресах общий лимит потоков делится пополам, а пакеты по потокам не складываются. Обычные пакеты дают до 1000 потоков, корпоративный до 3000. Когда проверка идёт с двух машин одновременно, каждая работает со своей половиной лимита, и это нормальная работа <a href="https://iprazon.com/proxy/privatnye">приватного доступа к пулу адресов</a>.</p>
<h2 id="razreshenie-imen-vnutri-tunnelya">Разрешение имён внутри туннеля</h2>
<p>Отдельный уровень, о котором вспоминают последним. Домен нужно превратить в адрес, и сделать это может либо ваша машина, либо посредник. Для HTTP-посредника вопрос закрыт по устройству протокола: метод CONNECT передаёт имя хоста, разрешает его удалённая сторона. Для SOCKS всё зависит от схемы в строке подключения.</p>
<pre><code># имя разрешает посредник, запрос к DNS уходит внутри туннеля
curl -s -m 15 -x socks5h://203.0.113.10:1080 https://api.ipify.org; echo " exit=$?"

# имя разрешает локальная машина, наружу уходит только адрес
curl -s -m 15 -x socks5://203.0.113.10:1080 https://api.ipify.org; echo " exit=$?"</code></pre>
<p>Буква <code>h</code> в схеме <code>socks5h</code> переключает разрешение имён на удалённую сторону. Разница видна сразу: если первая команда отвечает, а вторая падает с кодом 6, локальный резолвер до домена не добирается. Обратная картина тоже показательна. Когда обе команды работают одинаково, проверьте, куда уходят запросы к DNS, потому что при схеме без <code>h</code> они идут через провайдера и видны ему целиком.</p>
<p>Тот же переключатель есть почти везде. В curl это схема, в Python-библиотеке requests это <code>socks5h://</code> в словаре прокси, в Firefox это галочка про DNS, в антидетект-браузерах отдельный пункт настроек профиля. Протокол SOCKS4 имён не передаёт вовсе, расширение SOCKS4a передаёт, поэтому для задач с доменами берут <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с протоколом SOCKS5</a>: он умеет и имена, и авторизацию, и работу с UDP.</p>
<p>Проверить утечку можно и по косвенному признаку. Поднимите запрос к домену, которого нет в кэше локального резолвера, и посмотрите время первого ответа. При разрешении внутри туннеля задержка складывается с временем хода до посредника, при локальном разрешении она заметно короче. Способ грубый, но для быстрой проверки годится.</p>
<h2 id="seriya-zaprosov-vmesto-odnogo">Серия запросов вместо одного</h2>
<p>Один успешный запрос доказывает, что связка настроена. Он ничего не говорит о том, выдержит ли она прогон. Ротация внутри пула означает, что следующий запрос уйдёт с другого выхода, и поведение серии отличается от поведения одиночного обращения.</p>
<pre><code>for i in $(seq 1 20); do
  curl -s -o /dev/null -m 15 -w '%{http_code}\n' \
    -x http://203.0.113.10:8000 https://api.ipify.org
done | sort | uniq -c | sort -rn</code></pre>
<p>Вывод вида <code>18 200</code> и <code>2 000</code> читается однозначно: восемнадцать ответов с кодом 200 и два обрыва, где кода нет вовсе. Доля успешных ответов и есть тот показатель, по которому связку допускают к работе. Разброс времени снимается тем же циклом с ключом <code>%{time_total}</code>, и по нему видно, ровный канал или пилообразный.</p>
<p>Вторая часть серии: собрать выходные адреса и посмотреть, сколько их набралось.</p>
<pre><code>for i in $(seq 1 20); do
  curl -s -m 15 -x http://203.0.113.10:8000 https://api.ipify.org
  echo
done | sort | uniq -c | sort -rn</code></pre>
<p>Сообщение «у меня половина запросов проходит, половина висит» почти всегда объясняется темпом. Площадка считает обращения по своим правилам, и при частоте выше её порога включается ограничение. Пауза между запросами, снижение параллельности и распределение по разным выходам снимают картину за пару минут. Ровные серии на длинной дистанции держат <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a>: канал у них предсказуемый, темп ответа держится одинаковым от первого запроса до последнего.</p>
<p>Есть и третий срез, про который забывают: проверка изнутри рабочего сценария. Прогон curl из терминала и прогон боевого скрипта это разные наборы заголовков, таймаутов и повторов. Если серия из терминала ровная, а рабочий инструмент сыплет ошибками, дело в его настройках, и разбирать надо их.</p>
<h2 id="razbor-otvetov-chto-oznachaet-kazhdyy-ishod">Разбор ответов: что означает каждый исход</h2>
<p>Дальше самое полезное. Формулировка «я не понимаю, чей это отказ» снимается таблицей: по одному видимому признаку определяется источник проблемы и следующее действие.</p>
<div class="tabl"><table><thead><tr><th>Что видно</th><th>Источник</th><th>Что это означает</th><th>Что делать</th></tr></thead><tbody><tr><td><code>Connection refused</code>, ответ мгновенный</td><td>сеть</td><td>на порту никто не слушает, чаще перепутан порт</td><td>сверить строку подключения по полям</td></tr><tr><td>Тишина до таймаута</td><td>сеть</td><td>пакет отбрасывается, привязанный адрес не совпадает</td><td>сверить привязку с текущим внешним адресом</td></tr><tr><td><code>HTTP/1.1 407</code></td><td>посредник</td><td>логин и пароль не приняты либо доступ идёт по привязке</td><td>проверить формат IP:PORT:LOGIN:PASS</td></tr><tr><td><code>CONNECT tunnel failed, response 502</code></td><td>посредник</td><td>запрос принят, до площадки соединение не дошло</td><td>повторить, взять другую строку из списка</td></tr><tr><td><code>200 Connection established</code>, дальше тишина</td><td>площадка</td><td>туннель поднят, ответа от сайта нет</td><td>поднять таймаут, повторить запрос</td></tr><tr><td>Код 200, адрес совпал с прямым</td><td>клиент</td><td>запрос ушёл мимо посредника</td><td>проверить конфиг и переменные окружения</td></tr><tr><td>Код 403 или капча</td><td>площадка</td><td>канал рабочий, отказ пришёл от сайта</td><td>снизить темп, сменить выход</td></tr><tr><td>Ошибка TLS при согласовании</td><td>сеть</td><td>сертификат подменён по пути</td><td>проверить антивирус и корпоративный фильтр</td></tr></tbody></table></div>
<p>Коды завершения curl дополняют картину и часто отвечают быстрее, чем чтение подробного вывода.</p>
<div class="tabl"><table><thead><tr><th>Код</th><th>Название</th><th>Что означает</th></tr></thead><tbody><tr><td>5</td><td>Couldn't resolve proxy</td><td>имя посредника не разрешилось, в ключе <code>-x</code> стоит домен</td></tr><tr><td>6</td><td>Couldn't resolve host</td><td>имя площадки не разрешилось локально, помогает схема <code>socks5h</code></td></tr><tr><td>7</td><td>Failed to connect</td><td>порт закрыт либо пакет отброшен фильтром</td></tr><tr><td>28</td><td>Operation timed out</td><td>ответа нет в отведённое время</td></tr><tr><td>35</td><td>SSL connect error</td><td>согласование TLS оборвалось</td></tr><tr><td>56</td><td>Recv failure</td><td>соединение разорвано после установки</td></tr><tr><td>97</td><td>Proxy handshake failed</td><td>рукопожатие SOCKS отклонено посредником</td></tr></tbody></table></div>
<p>Общее правило чтения такое: коды 5, 6, 7 и 28 относятся к пути до посредника, код 97 к самому посреднику, 407 к авторизации, а всё, что приходит после строки <code>Connection established</code>, относится к целевой площадке. Разделение экономит массу времени, потому что убирает бесполезные попытки чинить настройки там, где отказ пришёл от сайта.</p>
<p>Отличить отказ посредника от отказа площадки помогают три признака. Первый признак: заголовки. Ответ посредника приходит без заголовков целевого сайта, в нём часто стоит <code>Proxy-Connection</code> и очень короткое тело. Второй признак: момент. Посредник отвечает до строки <code>Connection established</code>, площадка после неё. Третий признак: повторяемость. Отказ посредника воспроизводится на любом адресе назначения, отказ площадки привязан к конкретному домену. Прогоните ту же строку на нейтральном эхо-сервисе: код 200 оттуда означает, что канал рабочий и разбирать нужно поведение запросов к площадке.</p>
<h2 id="proverka-spiska-adresov-pachkoy">Проверка списка адресов пачкой</h2>
<p>Список выдаётся ссылкой или файлом, в двух форматах на выбор. Проверять его построчно руками смысла нет, весь прогон умещается в один цикл.</p>
<pre><code>while IFS=: read -r ip port user pass; do
  code=$(curl -s -m 12 -o /dev/null -w '%{http_code}' \
    -x "http://${user}:${pass}@${ip}:${port}" https://api.ipify.org)
  printf '%s:%s %s\n' "$ip" "$port" "$code"
done &lt; list.txt</code></pre>
<p>Последовательный прогон списка на несколько сотен строк занимает недопустимо долго, поэтому проверку распараллеливают. Двадцати одновременных проверок хватает с запасом, а лимит потоков пакета остаётся почти нетронутым.</p>
<pre><code>xargs -P 20 -I{} sh -c '
  p="{}"
  ip=$(echo "$p" | cut -d: -f1); port=$(echo "$p" | cut -d: -f2)
  u=$(echo "$p"  | cut -d: -f3); pw=$(echo "$p"   | cut -d: -f4)
  c=$(curl -s -m 12 -o /dev/null -w "%{http_code}" \
      -x "http://$u:$pw@$ip:$port" https://api.ipify.org)
  echo "$ip:$port $c"
' &lt; list.txt | sort -k2 -r</code></pre>
<p>На Windows тот же прогон делается штатными средствами оболочки, вызов curl остаётся прежним.</p>
<pre><code>Get-Content list.txt | ForEach-Object -Parallel {
  $p = $_ -split ':'
  $code = curl.exe -s -m 12 -o NUL -w '%{http_code}' `
    -x "http://$($p[2]):$($p[3])@$($p[0]):$($p[1])" https://api.ipify.org
  "$($p[0]):$($p[1]) $code"
} -ThrottleLimit 20</code></pre>
<p>Итог прогона удобно свести в два числа: доля строк с кодом 200 и медиана времени ответа. Первое число говорит о рабочем состоянии списка, второе о том, чего ждать под нагрузкой. Прогонять весь пул смысла нет, список обновляется в режиме реального времени и живёт своей жизнью, достаточно выборки в несколько десятков строк.</p>
<p>Первый прогон удобно делать на бесплатном тесте до 2 часов: пакет включается примерно за 5 минут, за оставшееся время список проверяется пачкой, снимаются доли успехов и время отклика. Проверка на своих задачах убедительнее любых обещаний, и <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет прокси IPv4 с доступом к пулу</a> оценивается именно так, своими командами и своими цифрами. Трафик безлимитный на всех пакетах, поэтому объём тестовых запросов ограничен только временем.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="chem-proveryat-proksi-esli-konsoli-pod-rukoy">Чем проверять прокси, если консоли под рукой нет?</h3>
<p>Мы рекомендуем чекер от Zennolab, у него есть демо-версия и её хватает для проверки списка. Он показывает доступность строки, время отклика и тип протокола, а разбор ошибок при необходимости добирается браузером: эхо-страница плюс поле Remote Address во вкладке «Сеть» дают ту же картину, что и подробный вывод curl.</p>
<h3 id="mne-vydali-spisok-na-12-000-strok-proveryat-">Мне выдали список на 12 000 строк, проверять каждую?</h3>
<p>Достаточно выборки. Список обновляется в режиме реального времени, состав пула меняется постоянно, поэтому полный обход даёт срез, который устареет через минуту. Возьмите 30-50 случайных строк, прогоните их пачкой и смотрите на долю успешных ответов. Вопрос «подойдёт ли пул под мои задачи» закрывается тем же способом: бесплатным тестом до 2 часов на реальном сценарии.</p>
<h3 id="pochemu-moy-vyhodnoy-adres-kazhdyy-raz-iz-dr">Почему мой выходной адрес каждый раз из другой страны?</h3>
<p>Так устроен пул: это микс со всего мира, адреса приходят из 200+ стран, выборка по отдельной стране не делается. Ротация внутри пула автоматическая, поэтому соседние запросы уходят с разных выходов. Для проверки работоспособности важен сам факт смены адреса относительно прямого запроса, география тут вторична.</p>
<h3 id="chto-delat-esli-u-menya-dinamicheskiy-adres-">Что делать, если у меня динамический адрес и привязка слетает?</h3>
<p>Привязанный адрес меняется без ограничений прямо в настройках кабинета, в пакет входит две одновременные привязки. При смене адреса провайдером старая привязка перестаёт совпадать, соединение начинает отбрасываться молча, и проверка порта показывает таймаут. Обновите привязку, повторите короткую команду curl, доступ восстанавливается сразу.</p>
<p>Проверка работоспособности это первый шаг, дальше идут более узкие замеры. Разбор заголовков и того, что уходит на сторону площадки, собран в материале про <a href="/proverka/proverka-anonimnosti/">проверку анонимности и утечку заголовков</a>. Как правильно снимать время ответа и не путать задержку канала с задержкой сайта, разобрано в заметке про <a href="/proverka/skorost-i-otklik/">замер скорости и времени отклика</a>. Отдельный частый исход вынесен в <a href="/proverka/oshibka-407/">разбор ошибки 407</a>, там же порядок сверки учётных данных. Если проверка спотыкается уже на входе, начните с материала про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения по полям</a>: половина неудачных проверок объясняется перепутанным портом или лишним пробелом в строке.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/kak-proverit/">https://kupit-proxy-ipv4.ru/proverka/kak-proverit/</a></p>]]></content:encoded></item>
<item><title>Проверка анонимности прокси: какие заголовки уходят на сервер</title><link>https://kupit-proxy-ipv4.ru/proverka/proverka-anonimnosti/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/proverka-anonimnosti/</guid><description>Проверка анонимности сводится к одному действию: снять сырой запрос на стороне приёмника и посмотреть, появились ли в нём служебные поля, которых мы не…</description><content:encoded><![CDATA[
<p class="vvod">Проверка анонимности сводится к одному действию: снять сырой запрос на стороне приёмника и посмотреть, появились ли в нём служебные поля, которых мы не отправляли. Для этого поднимается своя страница-эхо на обычном порту, через посредник уходит запрос по HTTP, и полученный набор заголовков сверяется с набором прямого запроса построчно.</p>
<p>Ниже разобрана именно методика замера. Как поднять приёмник за несколько минут, как снять сырой дамп через <code>nc</code>, какие поля искать, чем отличается сверка по составу от сверки по порядку, что делать с отпечатком рукопожатия TLS, как проверяться при работе по SOCKS5 и как загнать всю процедуру в скрипт, который гоняет список сам. Теория трёх уровней вынесена в отдельный разбор про <a href="/osnovy/urovni-anonimnosti/">уровни анонимности прокси</a>, общая проверка доступности живёт в материале <a href="/proverka/kak-proverit/">как проверить, что прокси работает</a>, здесь только замер.</p>
<h2 id="chto-my-proveryaem-i-chem-eto-otlichaetsya-o">Что мы проверяем и чем это отличается от проверки доступности</h2>
<p>Проверка доступности отвечает на вопрос «запрос проходит». Проверка анонимности отвечает на другой: «что из наших сведений дошло до сервера сверх адреса выходного узла». Это разные замеры, у них разный инструмент и разный признак успеха. Первый закрывается кодом ответа. Второй закрывается дампом запроса.</p>
<p>Замер держится на трёх вопросах. Первый: какой адрес виден в самом соединении, то есть в поле <code>remote_addr</code> на приёмнике. Второй: какие служебные поля дописал посредник в заголовки. Третий: совпадает ли отпечаток клиента с тем, за кого клиент себя выдаёт по строке <code>User-Agent</code>. Первые два вопроса закрываются приёмником на своём сервере, третий требует отдельной пробы по рукопожатию.</p>
<p>Важная оговорка про протокол. Дописать что-либо в заголовки посредник может только там, где он эти заголовки видит, то есть на обычном HTTP. При работе по HTTPS открывается туннель методом <code>CONNECT</code>, шифрованный поток проходит насквозь, и внутрь него узел не заглядывает. Отсюда прямое следствие для методики: замер заголовков всегда делается по HTTP, иначе любой узел покажет ровную картину просто потому, что вмешаться ему нечем. Устройство самого туннеля разобрано в материале про <a href="/protokoly/tunnel-connect/">туннель CONNECT</a>.</p>
<p>Мы делаем оба захода подряд. Сначала HTTP на свой приёмник и разбор полей, затем HTTPS на тот же домен и сверка адреса соединения. Пара замеров занимает минуту и даёт полную картину по узлу.</p>
<h2 id="zagolovki-markery-polnyy-spisok-i-chto-vydae">Заголовки-маркеры: полный список и что выдаёт каждый</h2>
<p>Служебных полей, по которым читается работа через посредника, немного, и все они известны наперёд. Часть добавляют прокси-серверы вроде Squid по своим настройкам, часть дописывают балансировщики и обратные прокси на стороне площадки. Смотреть надо на всё сразу, потому что одно поле без адреса клиента ещё терпимо, а связка из двух даёт площадке готовый признак.</p>
<div class="tabl"><table><thead><tr><th>Заголовок</th><th>Что в нём лежит</th><th>Что выдаёт</th></tr></thead><tbody><tr><td><code>X-Forwarded-For</code></td><td>Адрес клиента, иногда цепочка через запятую</td><td>Прямая выдача исходного адреса, худший случай</td></tr><tr><td><code>Forwarded</code></td><td>Пары <code>for</code>, <code>by</code>, <code>proto</code>, <code>host</code> одной строкой</td><td>То же самое в стандартизованном виде, читается так же</td></tr><tr><td><code>X-Real-IP</code></td><td>Один адрес клиента без цепочки</td><td>Исходный адрес, ставится обратными прокси</td></tr><tr><td><code>Client-IP</code>, <code>X-Client-IP</code></td><td>Адрес клиента</td><td>Старые варианты того же поля, встречаются реже</td></tr><tr><td><code>Via</code></td><td>Версия протокола и имя узла, часто с версией софта</td><td>Факт посредника и его тип, адрес клиента не раскрывает</td></tr><tr><td><code>Proxy-Connection</code></td><td>Значение <code>keep-alive</code> или <code>close</code></td><td>Поле от клиента к прокси, наружу уходить не должно</td></tr><tr><td><code>X-Proxy-ID</code>, <code>X-Cache</code>, <code>X-Cache-Lookup</code></td><td>Идентификаторы кеша узла</td><td>Работа через кеширующий прокси</td></tr><tr><td><code>X-Forwarded-Proto</code>, <code>X-Forwarded-Host</code>, <code>X-Forwarded-Port</code></td><td>Исходная схема, домен и порт</td><td>Признак разворота запроса на промежуточном узле</td></tr><tr><td><code>Proxy-Authorization</code></td><td>Логин и пароль доступа к посреднику</td><td>Поле для узла, до площадки доходить не должно вовсе</td></tr><tr><td><code>Warning</code>, <code>Age</code></td><td>Служебные пометки кеша</td><td>Ответ отдан кешем узла, не самой площадкой</td></tr></tbody></table></div>
<p>Отдельно про <code>Via</code>. Само по себе это поле сообщает только факт посредника и не раскрывает исходный адрес, поэтому оно относится к среднему уровню и для многих задач терпимо. Ровная картина без единого служебного поля держится там, где узел ничего не дописывает по своей конфигурации: так работают <a href="https://iprazon.com/proxy/anonimnye">анонимные прокси без служебных заголовков</a>, и проверить это на своём приёмнике можно за одну команду.</p>
<p>Значения полей читаются так же внимательно, как их имена. <code>X-Forwarded-For</code> умеет содержать цепочку через запятую, и тогда первым в ней стоит исходный клиент, дальше идут промежуточные узлы по порядку прохождения. Дубль одного и того же имени двумя строками означает, что запрос прошёл через два узла подряд и каждый дописал своё. Значение <code>unknown</code> вместо адреса ставят узлы, которые сообщают факт пересылки без выдачи клиента: такая строка к провалу не относится.</p>
<p>Ещё один признак живёт не в самих полях. Кеширующий узел иногда переписывает <code>Accept-Encoding</code>, срезает <code>Accept</code> до звёздочки и добавляет собственный <code>User-Agent</code> при разворотах. Такие правки заметны только при сверке с прямым запросом, потому что по одному дампу отличить свой заголовок от переписанного нельзя.</p>
<h2 id="svoya-stranica-eho-pochemu-priemnik-na-svoem">Своя страница-эхо: почему приёмник на своём сервере точнее готового чекера</h2>
<p>Готовый чекер отвечает быстро, и в этом его вся польза. Дальше начинаются неудобства, которые прямо портят замер.</p>
<p>Первое: почти любой публичный сервис стоит за собственным обратным прокси либо за сетью доставки. Этот слой сам дописывает <code>X-Forwarded-For</code> и <code>X-Real-IP</code>, и в ответе они лежат рядом с полями вашего узла. Разобрать, кто именно их поставил, по такому ответу невозможно. Второе: сервис отдаёт разобранный JSON, где заголовки уже приведены к единому виду, склеены дубли и потерян исходный порядок строк. Третье: сервис видит весь ваш трафик проверки и держит свои ограничения по частоте, поэтому прогон списка из тысячи строк упирается в отказы.</p>
<p>Приёмник на своём сервере снимает все три неудобства сразу. Он стоит на голом порту без промежуточных слоёв, печатает байты ровно в том виде, в котором они пришли, и выдерживает столько запросов, сколько мы через него пропустим. Требования к нему простые: обычный HTTP без сети доставки перед ним, никаких редиректов, никаких cookie, никакой сторонней логики. Любая из этих вещей меняет набор полей в следующем запросе и путает картину.</p>
<p>Порт под приёмник берём нестандартный, например 9000: он не пересекается с рабочими службами и сразу виден в логах. Часть узлов пропускает наружу ограниченный список портов, и тогда приёмник переносится на 80 либо на 8080, где проходит любой посредник. Проверяется это одним прямым запросом до начала замера: ответ пришёл, значит порт открыт по всему маршруту.</p>
<p>Держим такой приёмник на отдельном домене на серверной машине, где кроме него ничего нет. Годится любая площадка с внешним адресом: под задачу хватает самой скромной конфигурации, потому что нагрузка на приёмник исчерпывается разбором пары килобайт текста. Как устроены сами узлы, через которые пойдёт проверка, описано на странице про <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a>.</p>
<h2 id="syroy-damp-zaprosa-nc-i-priemnik-na-python">Сырой дамп запроса: nc и приёмник на Python</h2>
<p>Самый короткий путь снять сырые байты занимает одну строку. На сервере запускается <code>nc</code> в режиме прослушивания, с клиентской машины через посредник уходит запрос, и в терминале появляется всё, что дошло.</p>
<pre><code># на приёмнике: слушаем порт и печатаем то, что придёт
nc -l -p 9000

# на клиенте: гоним обычный GET через посредник
curl -x http://45.132.19.7:8000 http://echo.example.net:9000/probe</code></pre>
<p><code>nc</code> ничего не отвечает, поэтому <code>curl</code> подождёт и оборвётся по таймауту. Для замера это неважно: запрос уже напечатан целиком. Когда нужен короткий ответ и приём нескольких проб подряд, порт переоткрывается циклом, а заготовленный ответ подаётся на вход <code>nc</code>.</p>
<pre><code># после каждого запроса порт открывается заново, пришедшие байты идут в консоль
while true; do
  printf 'HTTP/1.1 200 OK\r\nContent-Length: 2\r\nConnection: close\r\n\r\nok' \
    | nc -l -p 9000 -q 1
  echo '--- запрос принят ---'
done</code></pre>
<p>Под регулярную работу удобнее приёмник на Python: он печатает запрос в консоль, возвращает его же в теле ответа и не требует внешних пакетов.</p>
<pre><code># echo9000.py: печатает сырой запрос и возвращает его обратно клиенту
import socketserver

class Dump(socketserver.StreamRequestHandler):
    def handle(self):
        raw = b""
        while b"\r\n\r\n" not in raw:
            line = self.rfile.readline()
            if not line:
                break
            raw += line
        text = raw.decode("latin-1")
        print("--- from %s ---" % self.client_address[0])
        print(text, end="", flush=True)
        payload = ("remote_addr: %s\n%s" % (self.client_address[0], text)).encode("latin-1")
        head = (
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/plain; charset=utf-8\r\n"
            "Content-Length: %d\r\n"
            "Connection: close\r\n\r\n" % len(payload)
        )
        self.wfile.write(head.encode("latin-1") + payload)

class Server(socketserver.ThreadingTCPServer):
    allow_reuse_address = True

Server(("0.0.0.0", 9000), Dump).serve_forever()</code></pre>
<p>Запускается одной командой, работает на любой версии Python третьей ветки:</p>
<pre><code>python3 echo9000.py
curl -s -x http://45.132.19.7:8000 http://echo.example.net:9000/probe</code></pre>
<p>Ответ приходит текстом, первая строка отдаёт адрес соединения, дальше идёт запрос как он пришёл. Строка <code>remote_addr</code> должна показывать выходной узел пула. Если там оказался адрес рабочей машины, запрос ушёл мимо посредника, и разбирать надо конфиг клиента вместе с переменными окружения <code>http_proxy</code> и <code>HTTPS_PROXY</code>.</p>
<p>Проверку по логину и паролю снимаем той же командой, меняется только строка подключения. Список выдаётся в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, и оба варианта проверяются одинаково.</p>
<pre><code>curl -s -x http://user5521:pf39kd@45.132.19.7:8000 http://echo.example.net:9000/probe</code></pre>
<p>Отдельно смотрим, чтобы в дампе не оказалось поля <code>Proxy-Authorization</code>. Оно предназначено узлу и до площадки доходить не должно ни при каких настройках.</p>
<h2 id="sravnenie-pryamogo-i-proksirovannogo-zaprosa">Сравнение прямого и проксированного запроса построчно</h2>
<p>Один дамп отвечает на половину вопроса. Вторую половину закрывает сверка: те же самые заголовки уходят напрямую, оба ответа кладутся в файлы, и разница читается штатным <code>diff</code>. Тогда видно и добавленные поля, и переписанные значения, и потерянные строки.</p>
<pre><code># прямой запрос
curl -s http://echo.example.net:9000/probe &gt; direct.txt

# тот же запрос через посредник
curl -s -x http://45.132.19.7:8000 http://echo.example.net:9000/probe &gt; proxied.txt

# разница построчно
diff -u direct.txt proxied.txt</code></pre>
<p>Чтобы сверка была честной, оба запроса должны выйти с одинаковым набором заголовков. <code>curl</code> по умолчанию ставит свой <code>User-Agent</code> и <code>Accept</code>, поэтому проще задать их руками и убрать всё лишнее.</p>
<pre><code>curl -s --http1.1 \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36' \
  -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
  -H 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8' \
  -H 'Accept-Encoding: gzip, deflate' \
  -x http://45.132.19.7:8000 http://echo.example.net:9000/probe</code></pre>
<p>Читается вывод по одному правилу. Строки со знаком плюс, которых не было в прямом запросе, дописал посредник. Строки со знаком минус посредник срезал. Совпавшие строки прошли насквозь. Пустая разница по служебным полям и различие только в поле <code>remote_addr</code> означают ровный проход: до площадки дошёл наш запрос и адрес выходного узла.</p>
<p>Одна тонкость про стартовую строку. При работе через HTTP-прокси клиент отправляет в ней полный адрес вида <code>GET http://echo.example.net:9000/probe HTTP/1.1</code>, при прямом запросе там стоит только путь. Это штатное различие протокола, к анонимности оно отношения не имеет, и в разнице его надо просто пропустить. Заголовок <code>Host</code> при этом остаётся на месте в обоих случаях, поэтому по нему сверка проходит без оговорок.</p>
<p>Полезно прогнать сверку дважды с разным набором исходных полей. Первый заход с минимальным набором из четырёх заголовков показывает, что узел дописывает от себя. Второй заход с полным браузерным набором показывает, что он переписывает в присланном. Два прохода занимают полминуты и разделяют два разных типа вмешательства, которые при одном заходе сливаются в общую разницу. Обе схемы доступа, по обычному HTTP и через шифрованный туннель, входят в один пакет: как они устроены, описано на странице, где оформляется <a href="https://iprazon.com/products/kupit-proxy-http">доступ по протоколам HTTP и HTTPS</a>.</p>
<h2 id="poryadok-zagolovkov-i-otpechatok-rukopozhati">Порядок заголовков и отпечаток рукопожатия TLS</h2>
<p>Состав полей это первый слой картины. Второй слой это их порядок. Каждый клиент выставляет заголовки в устойчивой последовательности, и площадки давно читают её как подпись: браузер Chrome даёт один порядок, Firefox другой, <code>curl</code> третий, библиотека <code>requests</code> четвёртый. Посредник, который переписывает запрос через свой парсер, порядок иногда меняет, и запрос перестаёт походить на браузерный при полностью ровном составе полей.</p>
<p>Снимается порядок из того же дампа одной командой.</p>
<pre><code># только имена полей, в том порядке, в котором они пришли
grep -o '^[A-Za-z0-9-]\+:' proxied.txt | nl
grep -o '^[A-Za-z0-9-]\+:' direct.txt  | nl

# сверка последовательностей
diff &lt;(grep -o '^[A-Za-z0-9-]\+:' direct.txt) &lt;(grep -o '^[A-Za-z0-9-]\+:' proxied.txt)</code></pre>
<p>Пустой вывод последней команды означает, что последовательность прошла без правок. Любая переставленная строка это повод присмотреться к узлу.</p>
<p>Третий слой лежит ещё ниже, до первого байта HTTP. При рукопожатии TLS клиент отправляет сообщение <code>ClientHello</code>, где перечислены версия протокола, наборы шифров, поддерживаемые группы и расширения. Порядок этих списков складывается в устойчивый отпечаток, который считают многие площадки. Через <code>CONNECT</code> рукопожатие идёт насквозь, поэтому отпечаток формирует ваш клиент, и посредник на него не влияет. Проверяется он сравнением двух проб.</p>
<pre><code># рукопожатие напрямую
openssl s_client -connect tls.example.net:443 -servername tls.example.net -tls1_2 &lt;/dev/null

# то же рукопожатие через туннель CONNECT
openssl s_client -proxy 45.132.19.7:8000 -connect tls.example.net:443 -servername tls.example.net -tls1_2 &lt;/dev/null</code></pre>
<p>Совпадение согласованного набора шифров и версии протокола в обоих выводах означает, что туннель прозрачный и подмены по пути нет. Расхождение говорит о разборе шифрованного потока где-то на маршруте: чаще всего это локальный антивирус либо фильтр в корпоративной сети, и проверяются они на клиентской машине.</p>
<p>Практический вывод из третьего слоя простой. Отпечаток <code>curl</code> заметно отличается от браузерного, поэтому для сценариев, где на той стороне сидит браузерная проверка, замер повторяют настоящим браузером с профилем из антидетекта. Как это устроено, разобрано на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<h2 id="proverka-pri-rabote-po-socks5">Проверка при работе по SOCKS5</h2>
<p>У SOCKS другой слой работы. Протокол занимается установкой соединения: клиент передаёт узлу адрес и порт назначения, узел открывает канал и дальше перекладывает байты в обе стороны, содержимого потока он не разбирает. Дописать <code>Via</code> или <code>X-Forwarded-For</code> через SOCKS5 попросту некому.</p>
<p>Методика от этого не отменяется, у неё меняется предмет. По SOCKS5 мы проверяем три вещи: адрес соединения на приёмнике, полное совпадение состава заголовков с прямым запросом и сторону, на которой разрешается доменное имя.</p>
<pre><code># имя разбирает клиент, наружу уходит уже адрес
curl -s -x socks5://45.132.19.7:1080 http://echo.example.net:9000/probe

# имя разбирает узел, запрос к службе имён уходит с его стороны
curl -s -x socks5h://45.132.19.7:1080 http://echo.example.net:9000/probe</code></pre>
<p>Разница в одной букве меняет картину целиком. В схеме <code>socks5</code> домен разрешает локальная машина, и на стороне службы имён остаётся след вашей сети при том, что дамп на приёмнике выглядит безупречно. Поэтому проверку анонимности по SOCKS5 всегда дополняем замером запросов к службе имён, он снимается отдельной пробой и разобран соседним материалом.</p>
<p>Сверка состава делается тем же <code>diff</code> по двум файлам, что и для HTTP. Ожидаемый результат жёстче: через SOCKS5 разница по заголовкам должна быть нулевой, включая стартовую строку, потому что запрос уходит байт в байт таким, каким его собрал клиент. Любое расхождение означает, что запрос прошёл не через тот узел, который указан в строке подключения. В пакете доступны SOCKS4 и SOCKS5 на выбор, и для проверок берём второй: он принимает доменные имена и умеет авторизацию по логину. Строки подключения и настройки собраны там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-socks5">покупка прокси SOCKS5 для скриптов</a>.</p>
<h2 id="poryadok-proverki-po-shagam">Порядок проверки по шагам</h2>
<p>Шаги идут в фиксированной последовательности: каждый следующий читается только при пройденном предыдущем. Смотреть порядок заголовков при промахе по адресу соединения бесполезно.</p>
<div class="tabl"><table><thead><tr><th>Шаг</th><th>Что делаем</th><th>Признак прохождения</th><th>Что означает промах</th></tr></thead><tbody><tr><td>1</td><td>Поднимаем приёмник на своём домене, порт 9000</td><td>Прямой запрос вернул текст с полями</td><td>Порт закрыт фильтром, проверяем сеть на сервере</td></tr><tr><td>2</td><td>Снимаем эталон прямым запросом в <code>direct.txt</code></td><td>Файл содержит стартовую строку и заголовки</td><td>Запрос ушёл через системный прокси, чистим окружение</td></tr><tr><td>3</td><td>Тот же запрос через посредник в <code>proxied.txt</code></td><td>Ответ пришёл, код 200</td><td>Разбираем доступность отдельно, замер откладываем</td></tr><tr><td>4</td><td>Читаем <code>remote_addr</code> в ответе</td><td>Адрес выходного узла пула</td><td>Совпал с адресом машины: запрос идёт мимо посредника</td></tr><tr><td>5</td><td>Сверяем состав полей через <code>diff</code></td><td>Служебных полей из таблицы нет</td><td>Найденное поле определяет уровень узла</td></tr><tr><td>6</td><td>Сверяем порядок имён полей</td><td>Последовательности совпали</td><td>Узел переписывает запрос своим парсером</td></tr><tr><td>7</td><td>Повторяем замер по HTTPS</td><td>Адрес соединения тот же</td><td>Туннель уводит трафик другим маршрутом</td></tr><tr><td>8</td><td>Сверяем рукопожатие через <code>openssl</code></td><td>Версия и набор шифров совпали</td><td>Поток разбирается по пути, ищем фильтр на клиенте</td></tr><tr><td>9</td><td>Для SOCKS5 проверяем сторону разбора имён</td><td>Схема <code>socks5h</code>, запрос к службе имён с узла</td><td>Имя разрешается локально, меняем схему</td></tr><tr><td>10</td><td>Прогоняем серию по списку скриптом</td><td>Провалов ноль на всей выборке</td><td>Отдельные строки отсеиваются до прогона</td></tr></tbody></table></div>
<p>Первые шесть шагов занимают минуты три при готовом приёмнике. Полный круг с рукопожатием и серией укладывается в четверть часа. Бесплатный тест длительностью до 2 часов покрывает такую программу с большим запасом, и после него картина по узлам уже известна.</p>
<h2 id="avtomatizaciya-regulyarnoy-proverki-i-chto-s">Автоматизация регулярной проверки и что считать провалом</h2>
<p>Разовый замер отвечает за момент. Регулярный отвечает за рабочий режим, поэтому проверку удобно повесить на планировщик и получать короткий отчёт. Скрипт ниже берёт список в формате <code>IP:PORT</code>, гонит каждую строку через приёмник, ищет маркеры и возвращает ненулевой код завершения при первом же провале.</p>
<pre><code>#!/bin/bash
# anon-check.sh: гоняем список через свою страницу-эхо и ищем служебные поля
ECHO="http://echo.example.net:9000/probe"
MARKERS='^(X-Forwarded-For|Forwarded|X-Real-IP|X-Client-IP|Client-IP|Via|Proxy-Connection|Proxy-Authorization|X-Proxy-ID):'
MY_ADDR=$(curl -s --max-time 10 http://echo.example.net:9000/probe | head -1 | awk '{print $2}')
fail=0; total=0

while read -r line; do
  [ -z "$line" ] &amp;&amp; continue
  total=$((total + 1))
  out=$(curl -s --max-time 15 --http1.1 -x "http://$line" "$ECHO")
  if [ -z "$out" ]; then
    echo "NOANSWER $line"; fail=$((fail + 1)); continue
  fi
  seen=$(printf '%s\n' "$out" | head -1 | awk '{print $2}')
  hits=$(printf '%s\n' "$out" | grep -Ei "$MARKERS" | cut -d: -f1 | paste -sd, -)
  if [ "$seen" = "$MY_ADDR" ]; then
    echo "BYPASS   $line addr=$seen"; fail=$((fail + 1)); continue
  fi
  if [ -n "$hits" ]; then
    echo "MARKERS  $line -&gt; $hits"; fail=$((fail + 1)); continue
  fi
  echo "OK       $line addr=$seen"
done &lt; proxy.txt

echo "итого: $total, провалов: $fail"
[ "$fail" -eq 0 ]</code></pre>
<p>Запускается он одной строкой и годится для планировщика: код завершения ноль означает, что вся выборка прошла.</p>
<pre><code>bash anon-check.sh &amp;&amp; echo "выборка ровная" || echo "есть строки на разбор"</code></pre>
<p>Гонять весь список из примерно 12 000 адресов при каждом запуске незачем. Пул обновляется в реальном времени, ротация внутри него автоматическая, поэтому осмысленнее брать случайную выборку строк на полсотни и смотреть картину по ней.</p>
<pre><code>shuf -n 50 full-list.txt &gt; proxy.txt &amp;&amp; bash anon-check.sh</code></pre>
<p>На планировщик скрипт вешаем раз в сутки перед основным прогоном. Вывод пишется в файл с отметкой времени, отдельная строка с числом провалов уходит в конец сводного журнала. Три минуты работы и полстраницы текста дают понятную картину перед каждым запуском боевого сценария, и разбор начинается с готовых цифр.</p>
<p>Теперь про признак провала. Формулировка нужна жёсткая, потому что «вроде нормально» на выборке из полусотни строк ничего не означает.</p>
<div class="tabl"><table><thead><tr><th>Что видим в замере</th><th>Как читается</th><th>Провал</th></tr></thead><tbody><tr><td><code>remote_addr</code> совпал с адресом рабочей машины</td><td>Запрос ушёл мимо посредника</td><td>Да, замер недействителен целиком</td></tr><tr><td><code>X-Forwarded-For</code> или <code>Forwarded</code> содержит адрес машины</td><td>Исходный адрес уходит открытым текстом</td><td>Да, узел выводится из работы</td></tr><tr><td><code>X-Real-IP</code> либо <code>Client-IP</code> с адресом машины</td><td>То же самое другим полем</td><td>Да</td></tr><tr><td><code>Proxy-Authorization</code> дошёл до приёмника</td><td>Доступ к узлу утекает на площадку</td><td>Да</td></tr><tr><td><code>Via</code> без адреса клиента</td><td>Виден факт посредника</td><td>Нет, средний уровень, для многих задач рабочий</td></tr><tr><td><code>Proxy-Connection</code> дошёл до приёмника</td><td>Служебное поле не срезано узлом</td><td>Нет, признак посредника без выдачи адреса</td></tr><tr><td>Порядок имён полей переставлен</td><td>Запрос собран заново парсером узла</td><td>Нет, повод присмотреться к узлу</td></tr><tr><td>Ответ пустой либо код отличается от 200</td><td>Строка не отвечает</td><td>Нет, случай проверки доступности</td></tr><tr><td>Отпечаток рукопожатия разошёлся с прямым</td><td>Поток разбирается по пути</td><td>Да, разбираем клиентскую машину</td></tr><tr><td>Разница по заголовкам при работе по SOCKS5</td><td>Запрос прошёл не через указанный узел</td><td>Да</td></tr></tbody></table></div>
<p>Отчёт складываем в один файл с датами прогонов и долей провалов. Через месяц накапливается ряд, по которому видно поведение связки целиком поверх отдельных строк. Именно ряд отвечает на вопрос, держится ли картина ровной при переходе на боевой объём: разовый замер такого не показывает.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="nuzhno-li-proveryat-anonimnost-na-kazhdom-ad">Нужно ли проверять анонимность на каждом адресе из списка?</h3>
<p>Пул держится в районе 12 000 активных адресов, список обновляется в реальном времени, ротация внутри пула автоматическая. Проверять каждую строку перед каждым прогоном смысла мало: за время прогона состав выборки успевает смениться. Рабочий порядок такой: случайная выборка на полсотни строк через скрипт, и по ней видно поведение пула целиком.</p>
<h3 id="chem-proveryat-proksi-esli-svoego-servera-po">Чем проверять прокси, если своего сервера под приёмник нет?</h3>
<p>Для массовой проверки списка подойдёт чекер от Zennolab, у него есть демонстрационная версия: он проходит выборку пачкой и показывает отвечающие строки, время отклика и тип прокси. Для разбора заголовков приёмник всё же удобнее, и поднять его можно на любой машине с внешним адресом за несколько минут по коду из раздела выше.</p>
<h3 id="mozhno-li-uspet-proverit-anonimnost-za-bespl">Можно ли успеть проверить анонимность за бесплатный тест?</h3>
<p>Бесплатный тест длится до 2 часов под ваш запрос, и полная программа замера укладывается в четверть часа. Порядок запуска короткий: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Остаток окна уходит на боевой сценарий.</p>
<h3 id="chto-pokazyvaet-zamer-pri-dostupe-po-loginu-">Что показывает замер при доступе по логину и паролю?</h3>
<p>Ровно то же самое. Список выдаётся в двух форматах на выбор, <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, забрать его можно ссылкой или файлом. Меняется только строка подключения в ключе <code>-x</code>, набор полей на приёмнике остаётся прежним. Отдельно смотрим, чтобы поле <code>Proxy-Authorization</code> до приёмника не дошло. Работу через привязанный адрес держат <a href="https://iprazon.com/proxy/anonimnye">приватные серверные прокси с привязкой по адресу</a>, и замер для них ничем не отличается.</p>
<p>Дальше по диагностике собраны соседние разборы: <a href="/proverka/utechka-dns/">утечка запросов к DNS</a> с настройками для браузеров и парсеров, <a href="/proverka/webrtc/">проверка и отключение WebRTC</a> для браузерных сценариев, <a href="/proverka/skorost-i-otklik/">замер скорости и времени отклика</a> с методикой серии и подсчётом медианы. Полный перечень признаков, по которым площадка узнаёт посетителя, разобран в материале про то, <a href="/osnovy/chto-vidit-sayt/">что сайт видит о посетителе</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/proverka-anonimnosti/">https://kupit-proxy-ipv4.ru/proverka/proverka-anonimnosti/</a></p>]]></content:encoded></item>
<item><title>Скорость прокси и время отклика: как измерить правильно</title><link>https://kupit-proxy-ipv4.ru/proverka/skorost-i-otklik/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/skorost-i-otklik/</guid><description>Время отклика и скорость передачи это две разные величины, и меряются они по-разному. Отклик показывает, сколько прошло от отправки запроса до первого байта…</description><content:encoded><![CDATA[
<p class="vvod">Время отклика и скорость передачи это две разные величины, и меряются они по-разному. Отклик показывает, сколько прошло от отправки запроса до первого байта ответа, и считается в миллисекундах. Скорость показывает, сколько байт в секунду идёт после первого байта, и считается в мегабитах. Корректный замер снимается серией из нескольких десятков запросов на свой целевой домен с разбором по фазам через <code>curl -w</code>, после чего берётся медиана и разброс.</p>
<p>Дальше разобрано, из каких кусков складывается задержка, как снять все величины одной командой, зачем нужна серия, как мерить под нагрузкой в несколько потоков, что портит замер до полной непригодности, как перевести полученные цифры в число потоков для прогона и как отличить медленный посредник от медленного целевого сайта.</p>
<h2 id="otklik-i-skorost-pochemu-ih-putayut">Отклик и скорость: почему их путают</h2>
<p>Фраза «прокси медленный» почти всегда означает отклик. Человек открыл страницу, она думала пару секунд, и вывод готов. При этом сама страница потом загрузилась мгновенно, потому что после первого байта канал отработал на полную. Отклик и пропускная способность живут отдельно друг от друга, и узкое место у них разное.</p>
<p>Разница видна на простом примере. Канал в сто мегабит с откликом в 700 миллисекунд отдаёт страницу в сто килобайт примерно за 710 миллисекунд: почти всё время ушло на ожидание. Канал в десять мегабит с откликом в 60 миллисекунд отдаст ту же страницу за 140 миллисекунд. На мелких объектах побеждает отклик. На выгрузке архивов и картинок побеждает канал.</p>
<p>Отсюда практическое правило замера. Для парсинга страниц и работы с кабинетами меряем отклик и его разброс, потому что общая длительность прогона складывается из тысяч ожиданий. Для выгрузки крупных объектов меряем скорость передачи тела. Обе величины снимаются одной командой, поэтому спорить о том, какая важнее, незачем: берём обе и смотрим на свою задачу.</p>
<p>Мы разводим эти две величины с первого разговора, потому что от этого зависит, что вообще мерить. Вопрос «какая у вас скорость» без уточнения ответа не имеет: у одного и того же узла отклик на лёгкой странице и скорость выгрузки архива ведут себя совершенно по-разному. Спрашиваем, что именно идёт в работу, и дальше берём подходящий инструмент замера.</p>
<p>Третья величина стоит рядом и путается с первыми двумя. Это пропускная способность прогона в запросах за час. Она вычисляется из отклика и числа потоков, и именно она отвечает на вопрос «успеем ли за ночь». Одиночный отклик сам по себе на этот вопрос не отвечает.</p>
<h2 id="iz-chego-skladyvaetsya-zaderzhka">Из чего складывается задержка</h2>
<p>Задержка одного запроса собирается из четырёх последовательных кусков. Каждый меряется отдельно, и это главное преимущество разбора по фазам: узкое место видно сразу, гадать не приходится.</p>
<div class="tabl"><table><thead><tr><th>Фаза</th><th>Как получить из <code>curl</code></th><th>Что происходит</th><th>От чего зависит</th></tr></thead><tbody><tr><td>Разбор имени</td><td><code>time_namelookup</code></td><td>Домен превращается в адрес</td><td>Настройки службы имён, локальный кеш</td></tr><tr><td>Установка соединения</td><td><code>time_connect</code> минус <code>time_namelookup</code></td><td>Тройное рукопожатие TCP до посредника</td><td>Расстояние до узла и качество маршрута</td></tr><tr><td>Рукопожатие шифрования</td><td><code>time_appconnect</code> минус <code>time_connect</code></td><td>Туннель <code>CONNECT</code> и согласование TLS до площадки</td><td>Версия протокола, число обменов, загрузка сторон</td></tr><tr><td>Ожидание первого байта</td><td><code>time_starttransfer</code> минус <code>time_pretransfer</code></td><td>Площадка приняла запрос и готовит ответ</td><td>Скорость самого сайта и его очередь</td></tr><tr><td>Передача тела</td><td><code>time_total</code> минус <code>time_starttransfer</code></td><td>Ответ идёт по каналу</td><td>Размер ответа и пропускная способность</td></tr></tbody></table></div>
<p>Первые три куска относятся к пути и к посреднику. Четвёртый относится к площадке. Пятый относится к каналу и к объёму. Разделение работает безотказно: если общее время выросло, достаточно посмотреть, какая из пяти величин прибавила, и разговор сразу становится предметным.</p>
<p>Одна особенность касается работы через посредника. Величина <code>time_connect</code> при ключе <code>-x</code> показывает соединение до узла, а <code>time_appconnect</code> включает открытие туннеля и рукопожатие с площадкой внутри него. Поэтому на HTTPS фаза шифрования выглядит крупнее, чем при прямом обращении: в неё входит лишний обмен с посредником. Устройство самого туннеля разобрано в материале про <a href="/protokoly/tunnel-connect/">туннель CONNECT</a>.</p>
<p>Разбор имени в серии обычно нулевой начиная со второго запроса: адрес уже лежит в локальном кеше. При схеме <code>socks5h</code> имя разбирает узел, и эта фаза уходит внутрь фазы соединения целиком.</p>
<h2 id="zamer-cherez-curl-w-polnyy-nabor-velichin">Замер через curl -w: полный набор величин</h2>
<p>Все величины снимаются одной командой. Формат вывода удобнее держать отдельным файлом: строка получается длинной, и править её каждый раз утомительно.</p>
<pre><code># fmt.txt: формат вывода для curl -w
dns          %{time_namelookup}
connect      %{time_connect}
tls          %{time_appconnect}
pretransfer  %{time_pretransfer}
ttfb         %{time_starttransfer}
total        %{time_total}
size         %{size_download} байт
speed        %{speed_download} байт/с
code         %{http_code}
redirects    %{num_redirects}</code></pre>
<p>Дальше замер запускается в одну строку:</p>
<pre><code>curl -s -o /dev/null -w @fmt.txt \
  --max-time 30 \
  -x http://91.208.63.22:8000 \
  https://shop.example.net/catalog/page/17</code></pre>
<p>Типовой вывод по рабочему узлу выглядит так:</p>
<pre><code>dns          0.004
connect      0.071
tls          0.243
pretransfer  0.243
ttfb         0.612
total        0.688
size         146820 байт
speed        213401 байт/с
code         200
redirects    0</code></pre>
<p>Читается он по разностям. Соединение до узла заняло 67 миллисекунд, рукопожатие добавило 172, площадка думала 369 миллисекунд, тело в 143 килобайта пришло за 76 миллисекунд. Узкое место здесь стоит на стороне площадки, и никакая смена узла его не уберёт.</p>
<p>Сравнительная проба снимается тем же форматом без ключа <code>-x</code>. Два вывода рядом отвечают на вопрос о накладных расходах посредника точнее любых рассуждений.</p>
<pre><code>curl -s -o /dev/null -w @fmt.txt --max-time 30 https://shop.example.net/catalog/page/17</code></pre>
<p>Разница по <code>ttfb</code> между прямым и проксированным запросом это и есть цена посредника на этом маршруте. Величины в пределах сотни миллисекунд считаются рабочими для серверных узлов, потому что трафик идёт через дополнительный пункт и физику маршрута никто не отменял.</p>
<p>Ключ <code>--max-time</code> держим обязательным во всех замерах. Без него зависший запрос стоит до системного таймаута и портит серию длиной в несколько минут вместо честного обрыва. Значение берём с двойным запасом от ожидаемого времени: тридцать секунд для страниц каталога, минуту для тяжёлых объектов. Ключ <code>-o /dev/null</code> тоже нужен всегда, иначе тело ответа сыплется в терминал и мешается с цифрами. Проверить, что связка вообще отвечает, удобно до замера, порядок такой пробы разобран отдельно. Сами узлы, по которым мы гоняем эти пробы, входят в общий пакет, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 и SOCKS5</a>.</p>
<h2 id="odno-izmerenie-nichego-ne-znachit">Одно измерение ничего не значит</h2>
<p>Единственный замер сообщает погоду на секунду. Ротация внутри пула автоматическая, поэтому следующий запрос уйдёт с другого выхода, и время у него будет своё. Разговор о скорости начинается с серии в тридцать и больше запросов.</p>
<pre><code>for i in $(seq 1 30); do
  curl -s -o /dev/null --max-time 20 -w '%{time_starttransfer} %{time_total} %{http_code}\n' \
    -x http://91.208.63.22:8000 "https://shop.example.net/catalog/page/$i"
done &gt; series.txt</code></pre>
<p>Среднее по такой серии почти бесполезно: пара долгих ответов тянет его вверх и картина смазывается. Берём медиану и края.</p>
<pre><code>sort -n series.txt | awk '{a[NR]=$1} END {
  printf "мин %.3f  медиана %.3f  p90 %.3f  макс %.3f  запросов %d\n",
    a[1], a[int(NR*0.5)+1], a[int(NR*0.9)], a[NR], NR
}'</code></pre>
<p>Пример вывода: <code>мин 0.402 медиана 0.611 p90 0.940 макс 2.310 запросов 30</code>. Медиана отвечает за типовое поведение, p90 отвечает за то, сколько ждать в худших случаях, максимум показывает наличие выбросов. Разброс между медианой и p90 важнее самой медианы: связка с медианой в 600 миллисекунд и p90 в 700 предсказуема, связка с той же медианой и p90 в две с половиной секунды заставит прогон стоять на длинных ответах.</p>
<p>Долю успешных ответов считаем той же серией, по третьему полю.</p>
<pre><code>awk '{print $3}' series.txt | sort | uniq -c | sort -rn</code></pre>
<p>Вывод вида <code>28 200</code> и <code>2 000</code> читается однозначно: двадцать восемь ответов с кодом 200 и два обрыва без кода. Доля успешных и медиана отклика это та пара цифр, по которой связка допускается к работе. Ровные серии на длинной дистанции держат <a href="https://iprazon.com/proxy/servernye">серверные прокси на собственном оборудовании</a>: маршрут у них предсказуемый, и разброс между медианой и p90 остаётся узким от первого запроса до последнего.</p>
<p>Первый запрос серии стоит отбросить. В нём сидит разбор имени, установка соединения с нуля и прогрев маршрута, поэтому он всегда выпадает из ряда и портит статистику на выборке из тридцати штук.</p>
<h2 id="zamer-pod-nagruzkoy-v-neskolko-potokov">Замер под нагрузкой в несколько потоков</h2>
<p>Последовательная серия описывает поведение одного канала. Боевой прогон идёт в десятки потоков, и там начинается другая физика: очереди на стороне площадки, ограничения по частоте, конкуренция за канал. Поэтому после последовательной серии всегда снимаем параллельную.</p>
<pre><code># 200 запросов в 20 потоков, каждая строка это время и код
seq 1 200 | xargs -P 20 -I{} \
  curl -s -o /dev/null --max-time 30 -w '%{time_starttransfer} %{http_code}\n' \
    -x http://91.208.63.22:8000 "https://shop.example.net/catalog/page/{}" &gt; load20.txt

awk '{s+=$1; n++} END {printf "среднее %.3f на %d запросов\n", s/n, n}' load20.txt
awk '{print $2}' load20.txt | sort | uniq -c | sort -rn</code></pre>
<p>Замер повторяется на нескольких уровнях параллельности: 5, 10, 20, 40, 80. Получается ряд, по которому видно, где площадка перестаёт держать темп.</p>
<div class="tabl"><table><thead><tr><th>Потоков</th><th>Медиана отклика</th><th>Доля кода 200</th><th>Как читается</th></tr></thead><tbody><tr><td>5</td><td>0.61</td><td>100%</td><td>Запас есть, поднимаем дальше</td></tr><tr><td>10</td><td>0.63</td><td>100%</td><td>Отклик держится, площадка не замечает нагрузки</td></tr><tr><td>20</td><td>0.72</td><td>99%</td><td>Рабочая точка, отклик подрос слегка</td></tr><tr><td>40</td><td>1.35</td><td>94%</td><td>Очередь на стороне площадки, появились отказы</td></tr><tr><td>80</td><td>3.90</td><td>61%</td><td>Ограничение по частоте, дальше поднимать бессмысленно</td></tr></tbody></table></div>
<p>Рабочей точкой берём последний уровень, где доля успешных держится около сотни процентов при умеренном росте отклика. В примере это двадцать потоков. Дальше рост параллельности удлиняет прогон: время каждого запроса растёт быстрее, чем прибавляется параллельных каналов.</p>
<p>Отдельный момент про лимиты пакета. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000, при двух привязанных адресах общее число делится между ними пополам. Замер под нагрузкой упирается в ограничение площадки задолго до этих величин, поэтому цифра из таблицы описывает поведение сайта, потолок доступа лежит заметно выше. Состав пакета по потокам и привязкам разобран отдельно в материале про то, <a href="/pokupka/chto-vhodit-v-paket/">что входит в пакет</a>.</p>
<p>Мы снимаем такой ряд на каждом новом целевом домене, и занимает он минут десять. Полученная рабочая точка потом переносится в настройки софта один раз, дальше прогон идёт на ней без правок. Повторяем ряд, когда площадка меняет поведение: рост доли отказов на прежней параллельности это первый признак того, что пороги на её стороне сдвинулись.</p>
<h2 id="chto-portit-zamer">Что портит замер</h2>
<p>Испорченный замер хуже отсутствующего: по нему принимают настройки, и потом прогон ведёт себя непонятно. Ошибок немного, все они повторяются.</p>
<div class="tabl"><table><thead><tr><th>Что сделали</th><th>Что получилось</th><th>Как мерить правильно</th></tr></thead><tbody><tr><td>Замер на общем чекере скорости</td><td>Померили чужой сервис и путь до него</td><td>Мерить на своём целевом домене</td></tr><tr><td>Взяли один запрос</td><td>Поймали случайную точку ряда</td><td>Серия от тридцати запросов, медиана и p90</td></tr><tr><td>Оставили первый запрос в выборке</td><td>Прогрев маршрута ушёл в статистику</td><td>Отбросить первый результат</td></tr><tr><td>Дёргали один и тот же адрес страницы</td><td>Второй ответ пришёл из кеша площадки</td><td>Разные адреса либо параметр против кеширования</td></tr><tr><td>Гоняли <code>curl</code> с несколькими адресами в одной команде</td><td>Соединение переиспользовалось, отклик занижен</td><td>Отдельный вызов на каждый запрос</td></tr><tr><td>Мерили по HTTP, работать будете по HTTPS</td><td>Фаза рукопожатия выпала из подсчёта</td><td>Замер тем же протоколом, что и прогон</td></tr><tr><td>Брали страницу в пару килобайт</td><td>Скорость передачи посчитать не по чему</td><td>Взять объект того размера, что в работе</td></tr><tr><td>Мерили с домашней машины по беспроводной сети</td><td>В цифры вошёл свой последний участок</td><td>Замер с серверной машины</td></tr><tr><td>Не смотрели на коды ответов</td><td>Часть строк это отказы с быстрым временем</td><td>Считать медиану только по коду 200</td></tr><tr><td>Сравнивали замеры разных часов</td><td>Нагрузка на площадке гуляет по суткам</td><td>Прямой и проксированный замер подряд</td></tr></tbody></table></div>
<p>Про кеш стоит сказать подробнее, потому что эта ошибка встречается чаще прочих. Площадка отдаёт повторный запрос из кеша за десятки миллисекунд, и серия из тридцати обращений к одному адресу страницы показывает медиану вчетверо ниже настоящей. Лечится это перебором адресов, как в примерах выше, либо параметром против кеширования в конце строки. Свой локальный кеш ведёт себя так же: <code>time_namelookup</code> со второго запроса падает в ноль, и это нормально, потому что в боевом прогоне имя разбирается один раз на всю пачку.</p>
<p>Последняя строка таблицы важнее остальных. Любое сравнение делается парой замеров, снятых подряд в пределах минуты: прямой и через посредника. Замер, снятый вчера, сравнивать с сегодняшним бесполезно, потому что за сутки успевает поменяться и загрузка площадки, и маршрут.</p>
<p>Ещё одна ловушка сидит в кодах ответов. Отказ по коду 403 приходит быстро, и такие строки занижают медиану на десятки процентов при полностью нерабочем прогоне. Поэтому фильтруем выборку по коду перед подсчётом, а разбор самих отказов вынесен в материал про <a href="/proverka/oshibka-403/">ошибку 403 при работе через прокси</a>.</p>
<h2 id="kak-perevesti-zamery-v-chislo-potokov">Как перевести замеры в число потоков</h2>
<p>Цифры из замера превращаются в настройку прогона одной формулой. Требуемая скорость в запросах за секунду умножается на медианное время отклика в секундах, и получается число одновременных потоков.</p>
<p>Считаем на живом примере. Нужно собрать 300 000 карточек за десять часов. Это 30 000 запросов в час, то есть 8,3 запроса в секунду. Медиана отклика по замеру 1,2 секунды. Умножаем: 8,3 на 1,2 даёт ровно 10 потоков. Прибавляем треть на выбросы и длинные ответы, получаем 13. Проверяем по таблице нагрузки: рабочая точка держалась до двадцати потоков, значит настройка проходит с запасом.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Объём и срок</th><th>Требуемая скорость</th><th>Медиана отклика</th><th>Потоков с запасом</th></tr></thead><tbody><tr><td>Каталог поставщика за ночь</td><td>60 000 страниц за 8 часов</td><td>2,1 в секунду</td><td>0,9 с</td><td>3</td></tr><tr><td>Прайсы конкурентов днём</td><td>120 000 страниц за 6 часов</td><td>5,6 в секунду</td><td>0,7 с</td><td>6</td></tr><tr><td>Крупный сбор карточек</td><td>300 000 страниц за 10 часов</td><td>8,3 в секунду</td><td>1,2 с</td><td>13</td></tr><tr><td>Съём позиций по семантике</td><td>45 000 запросов за 5 часов</td><td>2,5 в секунду</td><td>1,8 с</td><td>6</td></tr><tr><td>Сверка остатков каждый час</td><td>9 000 страниц за 40 минут</td><td>3,8 в секунду</td><td>0,6 с</td><td>3</td></tr></tbody></table></div>
<p>Формула работает в обе стороны. Если число потоков задано лимитом софта, делим его на медиану отклика и получаем достижимую скорость в запросах за секунду. Умножаем на срок прогона и сразу видим, укладывается задача в отведённое окно или нет. Для парсеров вроде A-Parser эта арифметика прямо ложится в настройки: подробности по настройке под пул собраны на странице про <a href="https://iprazon.com/instrumenty/a-parser">прокси для A-Parser</a>.</p>
<p>Одна поправка касается тяжёлых ответов. Когда средний объект весит мегабайты, к отклику прибавляется время передачи тела, и в формулу идёт <code>time_total</code> вместо <code>ttfb</code>. Считать объём выкачки при этом не требуется: трафик безлимитный на всех пакетах, и на выбор потоков он не влияет. Как считать нужное число адресов под такую нагрузку, разобрано в материале про то, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a>.</p>
<h2 id="medlennyy-posrednik-ili-medlennyy-celevoy-sa">Медленный посредник или медленный целевой сайт</h2>
<p>Самый частый вопрос звучит как «у меня всё тормозит, дело в прокси?». Отвечает на него разбор по фазам, снятый парой замеров подряд.</p>
<div class="tabl"><table><thead><tr><th>Что видно в выводе</th><th>Где узкое место</th><th>Что делать</th></tr></thead><tbody><tr><td><code>connect</code> крупный, <code>ttfb</code> минус <code>pretransfer</code> маленький</td><td>Путь до узла</td><td>Взять другую строку из списка, замерить снова</td></tr><tr><td><code>connect</code> маленький, <code>ttfb</code> крупный</td><td>Площадка готовит ответ долго</td><td>Смена узла ничего не даст, снижаем темп</td></tr><tr><td><code>tls</code> минус <code>connect</code> крупный, остальное ровно</td><td>Рукопожатие шифрования</td><td>Проверить версию протокола на клиенте</td></tr><tr><td>Прямой замер такой же медленный</td><td>Площадка</td><td>Работаем с темпом и параллельностью</td></tr><tr><td>Прямой быстрый, проксированный медленный на всех строках</td><td>Маршрут до узлов</td><td>Проверить свой канал и фильтры на машине</td></tr><tr><td>Прямой быстрый, проксированный медленный на части строк</td><td>Отдельные выходы пула</td><td>Отсеять строки серией перед прогоном</td></tr><tr><td><code>speed</code> низкий при крупном <code>size</code></td><td>Пропускная способность канала</td><td>Сравнить с прямой выгрузкой того же объекта</td></tr><tr><td>Медиана ровная, p90 в разы выше</td><td>Выбросы на длинном хвосте</td><td>Поднять таймаут, добавить повтор запроса</td></tr><tr><td>Отклик растёт с числом потоков</td><td>Ограничение по частоте на площадке</td><td>Вернуться к рабочей точке из таблицы нагрузки</td></tr><tr><td>Время скачет от минуты к минуте</td><td>Загрузка площадки по времени суток</td><td>Перенести прогон, повторить замер</td></tr></tbody></table></div>
<p>Разделительная проба занимает полминуты. Снимаем прямой замер, снимаем проксированный, сравниваем <code>ttfb</code>. Совпали в пределах сотни миллисекунд, значит посредник работает ровно и цифры задаёт площадка. Разошлись в разы, значит смотрим на маршрут: повторяем замер на трёх других строках списка и на другом целевом домене. Одинаковая картина по разным доменам указывает на клиентскую машину, разная картина указывает на конкретную площадку.</p>
<p>Полезен и третий замер, на нейтральном лёгком адресе. Он отсекает влияние целевого сайта целиком и показывает голую задержку маршрута.</p>
<pre><code>curl -s -o /dev/null -w 'ttfb %{time_starttransfer} total %{time_total}\n' \
  --max-time 15 -x http://91.208.63.22:8000 http://echo.example.net:9000/ping</code></pre>
<p>Значение в пределах десятых долей секунды означает, что путь до узла и обратно рабочий, и всё, что видно сверх этого на боевом домене, добавляет площадка. Именно такие ровные маршруты нужны при постоянном сборе данных, поэтому под регулярные прогоны берут <a href="https://iprazon.com/proxy/dlya-parsinga">прокси для парсинга с широким пулом</a>.</p>
<h2 id="zhurnal-zamerov-i-regulyarnyy-kontrol">Журнал замеров и регулярный контроль</h2>
<p>Разовые цифры живут неделю. Дальше их забывают и меряют заново, обычно посреди сорванного прогона. Журнал снимает этот круг: одна строка после каждого замера, и через месяц видно поведение связки на длинной дистанции.</p>
<pre><code>#!/bin/bash
# speed-log.sh: серия из 30 запросов, строка в журнал
TARGET="https://shop.example.net/catalog/page"
PROXY="http://91.208.63.22:8000"
STAMP=$(date +'%d.%m %H:%M')
TOTAL=30

for i in $(seq 1 $TOTAL); do
  curl -s -o /dev/null --max-time 20 \
    -w '%{time_starttransfer} %{http_code}\n' -x "$PROXY" "$TARGET/$i"
done &gt; series.raw

awk '$2 == 200 {print $1}' series.raw | sort -n | awk -v stamp="$STAMP" -v total="$TOTAL" '
  { t[NR] = $1 }
  END {
    printf "%s  медиана %.3f  p90 %.3f  успешных %d из %d\n",
      stamp, t[int(NR*0.5)+1], t[int(NR*0.9)], NR, total
  }' &gt;&gt; speed.log</code></pre>
<p>Сортировка вынесена в отдельный шаг намеренно: встроенная сортировка массива есть только в gawk, а связка <code>sort -n</code> с последующим <code>awk</code> работает на любой машине. Строка в журнале выглядит коротко и читается сразу: отметка времени, медиана, p90 и доля успешных в одном ряду. Через две недели таких строк накапливается три десятка, и любое изменение видно глазом без графиков.</p>
<p>Замер повторяем при трёх событиях: перед крупным прогоном, после смены целевого домена и при жалобе на скорость от того, кто работает с прогоном. Первые два случая занимают минуту, третий закрывает разговор цифрами вместо ощущений. Планировать выгрузку по объёму при этом не нужно совсем, потому что трафик на всех вариантах доступа <a href="https://iprazon.com/proxy/bezlimitnye">безлимитный по объёму выкачки</a>, и в журнал идут только время и коды.</p>
<p>Журнал удобен ещё одним свойством: он показывает форму ряда поверх отдельных всплесков. Медиана, которая держится на одном уровне двадцать прогонов подряд, говорит о связке больше любого разового замера. Ползущая вверх медиана при ровной доле успешных обычно указывает на площадку, которая набрала нагрузку. Прыгающая доля успешных при ровной медиане указывает на пороги по частоте.</p>
<p>Отдельно держим замер по протоколу, которым реально идёт работа. Для программ на сокетах это SOCKS5, для браузеров и парсеров обычно HTTPS. Смешивать нельзя: рукопожатие у них разное, и цифры получаются несопоставимые.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-zaprosov-nuzhno-dlya-dostovernogo-zam">Сколько запросов нужно для достоверного замера?</h3>
<p>Тридцати достаточно для медианы и p90 по одному узлу, двухсот в двадцать потоков достаточно для проверки под нагрузкой. Первый запрос серии отбрасываем: в него входит разбор имени и установка соединения с нуля. Считать медиану надо только по ответам с кодом 200, потому что быстрые отказы занижают её на десятки процентов.</p>
<h3 id="uspeyu-li-snyat-polnyy-zamer-za-besplatnyy-t">Успею ли снять полный замер за бесплатный тест?</h3>
<p>Бесплатный тест длится до 2 часов под ваш запрос, а полная программа с последовательной серией, параллельными прогонами на пяти уровнях и разделительной пробой укладывается примерно в полчаса. Остаток окна уходит на боевой сценарий с рабочими настройками софта, и после него цифры для выбора пакета уже есть.</p>
<h3 id="vliyaet-li-chislo-adresov-na-skorost-progona">Влияет ли число адресов на скорость прогона?</h3>
<p>На отклик одного запроса не влияет, на общую скорость прогона влияет прямо. Пул держится в районе 12 000 активных адресов, ротация внутри него автоматическая, список обновляется в реальном времени, поэтому параллельные потоки расходятся по разным выходам и площадка видит равномерную нагрузку. Отсюда и ровный отклик при росте параллельности до рабочей точки.</p>
<h3 id="chem-esche-pomerit-spisok-krome-curl">Чем ещё померить список кроме curl?</h3>
<p>Для массовой проверки списка подойдёт чекер от Zennolab, у него есть демонстрационная версия: он проходит выборку пачкой и показывает отвечающие строки, время отклика и тип прокси. Разбор по фазам он не даёт, поэтому под точные замеры берём <code>curl</code> с форматом вывода, а чекер оставляем для быстрого отсева нерабочих строк перед прогоном. Пул с потоками и безлимитным трафиком под такие прогоны оформляется там, где берут <a href="https://iprazon.com/proxy/servernye">доступ к серверным адресам IPv4</a>.</p>
<p>Соседние разборы по диагностике: <a href="/proverka/kak-proverit/">как проверить, что прокси работает</a> с командами и разбором кодов завершения, <a href="/proverka/proverka-anonimnosti/">проверка анонимности по заголовкам запроса</a> со своей страницей-эхо, <a href="/proverka/utechka-dns/">утечка запросов к DNS</a> и настройки резолвинга. План замеров под своё окно проверки собран в материале про <a href="/pokupka/besplatnyy-test/">бесплатный тест до 2 часов</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/skorost-i-otklik/">https://kupit-proxy-ipv4.ru/proverka/skorost-i-otklik/</a></p>]]></content:encoded></item>
<item><title>Утечка DNS через прокси: как проверить и закрыть запросы к службе имён</title><link>https://kupit-proxy-ipv4.ru/proverka/utechka-dns/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/utechka-dns/</guid><description>Утечка запросов к службе имён происходит тогда, когда программа сама превращает домен в адрес через локальный резолвер и только после этого открывает…</description><content:encoded><![CDATA[
<p class="vvod">Утечка запросов к службе имён происходит тогда, когда программа сама превращает домен в адрес через локальный резолвер и только после этого открывает соединение через посредника. Закрывается она переносом разрешения имени на сторону прокси: в SOCKS за это отвечает схема <code>socks5h</code>, в HTTP-прокси домен и так уходит внутри запроса, остальное настраивается по месту.</p>
<p>Дальше разбираем механику по шагам: почему обращение к службе имён живёт отдельно от полезного трафика, чем <code>socks5</code> отличается от <code>socks5h</code>, как поймать утечку через <code>tcpdump</code> и через журнал своего сервера имён, как перевести на посредника браузеры, <code>curl</code>, Python, Node.js, парсеры и антидетект-браузеры. Отдельно смотрим на системные службы и на DNS поверх HTTPS.</p>
<h2 id="chto-takoe-utechka-zaprosov-k-sluzhbe-imen">Что такое утечка запросов к службе имён</h2>
<p>Любое соединение с сайтом состоит из двух разных операций. Сначала домен превращается в адрес, потом по этому адресу открывается канал. Первая операция идёт по своему протоколу на порт 53, вторая по TCP на порт сайта. Прокси стоит на второй операции, и если первую никто не перенаправил, она уходит с машины напрямую.</p>
<p>Со стороны наблюдателя картина складывается за минуту. Владелец резолвера видит перечень доменов, точное время обращений и адрес машины, которая спрашивает. Целевой сайт при этом видит выходной адрес из пула и считает картину нормальной. Два наблюдателя смотрят на разные половины одного действия, и полнота маскировки теряется на первой половине.</p>
<p>Практических последствий три. Первое: список посещаемых доменов оказывается у стороны, которой его видеть не нужно. Второе: авторитетный сервер зоны фиксирует обращение с адреса, который географически и по подсети никак не связан с выходным адресом прокси. Третье, самое обидное для рабочих задач, это расхождение ответов. Локальный резолвер отдаёт один адрес балансировщика, посредник открыл бы соединение с другим, и площадка отвечает иначе, чем ожидалось.</p>
<p>Мы проверяем эту связку первой, когда пользователь пишет «адрес подменился, а сайт всё равно ведёт себя странно». Выходной адрес в таких случаях показывается верно, серия запросов проходит, коды ответов приличные. Ломается поведение: разные версии страницы, лишние проверки, случайные редиректы. Причина сидит в том, что имя разрешалось локально и соединение пошло к другому узлу площадки.</p>
<p>Отдельно стоит запомнить: утечка запросов к службе имён никак не связана с качеством адресов. Тут работает настройка софта. Один и тот же пакет прокси с одной и той же строкой подключения течёт в одной программе и держится плотно в другой.</p>
<h2 id="shemy-socks5-i-socks5h-gde-imenno-razreshaet">Схемы socks5 и socks5h: где именно разрешается имя</h2>
<p>Протокол SOCKS умеет принимать в команде подключения два вида цели: адрес и доменное имя. Тип цели передаётся отдельным байтом, и клиент выбирает его сам. Отсюда и родилось разделение схем в строке подключения, которое многие принимают за косметику.</p>
<p>Схема <code>socks5://</code> говорит библиотеке: разреши имя сам, дальше передай посреднику готовый адрес. Схема <code>socks5h://</code> говорит обратное: передай посреднику само имя, пусть он спросит свой резолвер. Буква <code>h</code> в конце означает «hostname», и это единственное, что отделяет закрытую схему от текущей. У SOCKS4 та же история: базовая версия имён не принимает совсем, расширение <code>socks4a</code> принимает.</p>
<pre><code># имя разрешается на машине, наружу уходит запрос к службе имён
curl -x socks5://user5521:pf39kd@185.24.87.14:1080 https://example.com

# имя разрешает посредник, с машины наружу не уходит ничего лишнего
curl -x socks5h://user5521:pf39kd@185.24.87.14:1080 https://example.com</code></pre>
<div class="tabl"><table><thead><tr><th>Схема подключения</th><th>Кто превращает имя в адрес</th><th>Что уходит с машины наружу</th><th>Течёт</th></tr></thead><tbody><tr><td><code>socks4://</code></td><td>локальный резолвер</td><td>запрос на порт 53 плюс TCP через посредника</td><td>да</td></tr><tr><td><code>socks4a://</code></td><td>сервер прокси</td><td>только TCP через посредника</td><td>нет</td></tr><tr><td><code>socks5://</code></td><td>локальный резолвер</td><td>запрос на порт 53 плюс TCP через посредника</td><td>да</td></tr><tr><td><code>socks5h://</code></td><td>сервер прокси</td><td>только TCP через посредника</td><td>нет</td></tr><tr><td><code>http://</code> к обычной странице</td><td>сервер прокси</td><td>домен в первой строке запроса</td><td>нет</td></tr><tr><td><code>http://</code> к странице с шифрованием</td><td>сервер прокси</td><td>домен в заголовке CONNECT</td><td>нет</td></tr><tr><td>системная служба мимо настроек</td><td>локальный резолвер</td><td>запрос на порт 53</td><td>да</td></tr></tbody></table></div>
<p>Важная деталь про поддержку схем. Слово <code>socks5h</code> понимают <code>curl</code>, библиотека <code>requests</code> в Python и почти все обёртки поверх неё, а вот интерфейсы многих программ дают одно поле «SOCKS5» и переключатель рядом. Переключатель называется по-разному: «resolve hostnames remotely», «проксировать DNS», «remote DNS». Смысл у него ровно один, и он включается один раз на профиль. Такую передачу имён поддерживает <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с протоколом SOCKS5 для программ</a>: адреса те же самые, меняется только схема в строке.</p>
<p>Ещё одна тонкость касается UDP. Обращение к службе имён по умолчанию идёт по UDP, и SOCKS5 умеет пропускать UDP через команду ассоциации. Это отдельная механика, разобранная в материале про <a href="/protokoly/tcp-i-udp/">TCP и UDP через SOCKS5</a>. Для закрытия утечки она не требуется: при <code>socks5h</code> резолвит сам сервер прокси, и UDP с машины никуда не идёт.</p>
<h2 id="http-proksi-i-tunnel-connect-imya-uhodit-sam">HTTP-прокси и туннель CONNECT: имя уходит само</h2>
<p>С HTTP-прокси ситуация проще, и это тот случай, когда протокол работает в нашу пользу по умолчанию. Клиент отправляет посреднику запрос с полным адресом ресурса в первой строке. Домен лежит прямо там, в тексте запроса, и разрешать его на машине незачем.</p>
<pre><code>GET http://example.com/catalog/page-2 HTTP/1.1
Host: example.com
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk</code></pre>
<p>Для страниц с шифрованием работает туннель. Клиент просит посредника открыть канал командой <code>CONNECT</code>, и в этой команде тоже стоит домен с портом:</p>
<pre><code>CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk</code></pre>
<p>Посредник принимает имя, разрешает его у себя, открывает TCP и дальше просто гоняет байты в обе стороны. Разбор самой механики туннеля собран в отдельном материале, а нам здесь важен один вывод: при работе через <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP и HTTPS для браузеров</a> запросы к службе имён с машины не уходят, если только браузер не резолвит имена заранее по своим причинам.</p>
<p>Причины такие есть. Браузеры делают упреждающее разрешение имён для ссылок на странице, чтобы ускорить переходы. Эта функция живёт отдельно от настроек прокси и включена по умолчанию. Ещё один источник это расширения: они ходят на свои эндпоинты своими средствами. Поэтому даже с HTTP-прокси браузер проверяется отдельно. Считать его закрытым по одному факту протокола рано.</p>
<h2 id="proverka-svoimi-rukami-dva-nadezhnyh-sposoba">Проверка своими руками: два надёжных способа</h2>
<p>Спорить о схемах бессмысленно, когда есть возможность посмотреть на трафик. Два способа дают однозначный ответ за пару минут.</p>
<h3 id="tcpdump-na-portu-53">tcpdump на порту 53</h3>
<p>Ставим захват на интерфейс, фильтруем по порту службы имён, запускаем проверяемый запрос из соседнего окна и смотрим, появились ли пакеты.</p>
<pre><code># слушаем обращения к службе имён на всех интерфейсах
sudo tcpdump -n -i any port 53

# в другом окне: заведомо текущая схема
curl -s -x socks5://185.24.87.14:1080 https://example.com -o /dev/null

# и закрытая схема, вывод tcpdump должен остаться пустым
curl -s -x socks5h://185.24.87.14:1080 https://example.com -o /dev/null</code></pre>
<p>При текущей схеме в захвате появится строка вида <code>IP 10.0.0.5.51234 &gt; 1.1.1.1.53: 42817+ A? example.com. (29)</code>. Тут видно всё: адрес машины, адрес резолвера, тип записи и сам домен. При схеме <code>socks5h</code> окно захвата остаётся пустым, и это самый убедительный вид проверки.</p>
<p>На Windows тот же приём делается через <code>Wireshark</code> с фильтром отображения <code>dns</code>. Логика одинаковая: запускаем захват, дёргаем один запрос, смотрим на список пакетов. Пустой список означает, что имя разрешил посредник.</p>
<h3 id="zhurnal-svoego-servera-imen">Журнал своего сервера имён</h3>
<p>Второй способ подходит там, где до консоли рабочей машины не дотянуться. Мы поднимаем свой авторитетный сервер зоны, направляем на него отдельный поддомен и смотрим журнал обращений. Каждый запрос к уникальному имени оставляет строку с адресом того, кто спрашивал.</p>
<pre><code># на своём сервере включаем журнал запросов
rndc querylog on
tail -f /var/log/named/queries.log

# с рабочей машины дёргаем уникальное имя через проверяемый софт
curl -s -x socks5h://185.24.87.14:1080 http://t7k3q.probe.example.net/ -o /dev/null</code></pre>
<p>В журнале появится строка с адресом резолвера, который пришёл за записью. При закрытой схеме это будет резолвер провайдера, где стоит сервер прокси, и подсеть совпадёт с подсетью выходного адреса. При утечке в журнале окажется резолвер домашнего или офисного канала. Способ хорош тем, что показывает конкретный адрес, который выдал утечку, вместе с точным временем обращения.</p>
<div class="tabl"><table><thead><tr><th>Шаг проверки</th><th>Инструмент</th><th>Признак утечки</th><th>Признак закрытой схемы</th></tr></thead><tbody><tr><td>1. Захват трафика</td><td><code>tcpdump -n port 53</code></td><td>пакеты с доменом в теле запроса</td><td>пустой вывод во время запроса</td></tr><tr><td>2. Уникальное имя</td><td>свой сервер зоны и журнал</td><td>в журнале адрес локального канала</td><td>в журнале адрес со стороны прокси</td></tr><tr><td>3. Выходной адрес</td><td><code>curl https://ifconfig.me</code></td><td>адрес машины</td><td>адрес из пула</td></tr><tr><td>4. Браузерная проверка</td><td>страница проверки утечки</td><td>резолвер провайдера в списке</td><td>резолвер со стороны посредника</td></tr><tr><td>5. Повтор под нагрузкой</td><td>прогон на 200 запросов</td><td>часть обращений уходит мимо</td><td>вывод захвата остаётся пустым</td></tr></tbody></table></div>
<p>Пятый шаг пропускают чаще всего, и напрасно. Некоторые библиотеки держат свой кэш имён и при разогретом кэше ничего наружу не отправляют, поэтому единичная проверка проходит успешно. Утечка вылезает через полчаса прогона, когда записи в кэше протухли. Мы всегда повторяем проверку на живом прогоне. Одиночного запроса для вывода мало.</p>
<h2 id="brauzery-kak-perevesti-razreshenie-imen-na-p">Браузеры: как перевести разрешение имён на посредника</h2>
<p>Firefox настраивается через <code>about:config</code> и делает это честнее прочих. Нужны три параметра.</p>
<pre><code>network.proxy.socks_remote_dns = true
network.dns.disablePrefetch = true
network.dns.disablePrefetchFromHTTPS = true</code></pre>
<p>Первый переводит разрешение имён на сторону SOCKS. Второй и третий выключают упреждающее разрешение ссылок со страницы, которое идёт мимо настроек прокси. После правки браузер перезапускается, и проверка делается заново через захват трафика.</p>
<p>Браузеры на Chromium в настройке SOCKS передают имена посреднику самостоятельно, когда прокси задан ключом запуска. Проблема сидит в упреждающем разрешении и в служебных обращениях самого браузера. Отключается это ключами и настройкой политики:</p>
<pre><code>chrome.exe --proxy-server="socks5://185.24.87.14:1080" ^
  --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 185.24.87.14" ^
  --disable-features=AsyncDns</code></pre>
<p>Правило <code>host-resolver-rules</code> заворачивает любое имя в отказ на уровне локального резолвера и оставляет живым только адрес самого прокси. Если что-то попробует разрешить имя мимо посредника, оно просто не получит ответа. Приём жёсткий, зато проверяемый: после него в захвате трафика тишина.</p>
<p>Для постоянной работы это же задаётся политикой браузера. На Windows ветка <code>HKLM\SOFTWARE\Policies\Google\Chrome</code>, параметры <code>ProxyMode</code> со значением <code>fixed_servers</code>, <code>ProxySettings</code> с описанием сервера и <code>BuiltInDnsClientEnabled</code> со значением ноль. Политика переживает обновления браузера и не сбрасывается пользователем.</p>
<h2 id="curl-python-i-node-js-rabochie-stroki-podkly">curl, Python и Node.js: рабочие строки подключения</h2>
<p>В <code>curl</code> всё решается схемой, разбор которой был выше. Для проверки полезен ключ <code>-v</code>: он показывает, что именно уходит посреднику.</p>
<pre><code>curl -v -x socks5h://user5521:pf39kd@185.24.87.14:1080 https://example.com 2&gt;&amp;1 | grep -i socks</code></pre>
<p>В Python библиотека <code>requests</code> работает через <code>PySocks</code>. Установка <code>pip install requests[socks]</code>, дальше словарь прокси со схемой <code>socks5h</code>:</p>
<pre><code>import requests

proxies = {
    "http": "socks5h://user5521:pf39kd@185.24.87.14:1080",
    "https": "socks5h://user5521:pf39kd@185.24.87.14:1080",
}
r = requests.get("https://example.com", proxies=proxies, timeout=20)
print(r.status_code, len(r.content))</code></pre>
<p>Одна буква в обеих строках, и разрешение имён переезжает на сервер. Тот же приём работает в <code>httpx</code> и в <code>aiohttp</code> через <code>aiohttp_socks</code>. В <code>aiohttp</code> берётся <code>ProxyConnector.from_url</code> с той же схемой <code>socks5h</code>.</p>
<p>В Node.js через <code>axios</code> или <code>undici</code> используется агент <code>socks-proxy-agent</code>, и он передаёт имя посреднику по умолчанию. Проверить это стоит явно, потому что часть кода в проектах написана через <code>SocksClient</code> с ручным разрешением имени:</p>
<pre><code>const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');

const agent = new SocksProxyAgent('socks5h://user5521:pf39kd@185.24.87.14:1080');

axios.get('https://example.com', { httpAgent: agent, httpsAgent: agent })
  .then(res =&gt; console.log(res.status, res.headers['content-type']))
  .catch(err =&gt; console.error(err.message));</code></pre>
<p>Отдельно про пул соединений. Библиотеки переиспользуют TCP между запросами, и при смене выходного адреса это иногда мешает. Когда нужна разная точка выхода на каждый запрос, агент создаётся заново либо ставится заголовок <code>Connection: close</code>. Ротация внутри пула автоматическая, поэтому новое соединение штатно уходит с другого адреса. Такой режим удобен для сбора данных, и под него берут <a href="https://iprazon.com/proxy/dlya-parsinga">прокси для парсинга и массового сбора</a>.</p>
<h2 id="parsery-i-antidetekt-brauzery">Парсеры и антидетект-браузеры</h2>
<p>A-Parser берёт прокси списком и работает с ним по своей схеме. В настройках прокси-чекера указывается тип <code>socks5</code>, а передача имён включается галочкой в свойствах потока. ZennoPoster работает через свой сетевой слой: там прокси задаётся на уровне инстанса браузера, и имена уходят посреднику, когда выбран режим SOCKS5. Key Collector использует прокси на уровне HTTP-запросов, и там доменное имя всегда лежит в строке запроса.</p>
<p>Антидетект-браузеры закрывают вопрос настройкой профиля. В карточке профиля есть поле прокси и рядом с ним переключатель передачи имён. Смысл конструкции в том, что профиль хранит весь набор параметров сразу: выходной адрес, отпечаток, часовой пояс, язык интерфейса и режим разрешения имён. Мы советуем сверять эти поля между собой при создании профиля, потому что несогласованный набор виден площадке лучше, чем открытый адрес. Профиль с передачей имён на посредника и выходным адресом из пула выглядит ровно, и именно к такому состоянию мы ведём настройку.</p>
<p>Проверка профиля делается так же, как проверка любого софта: захват трафика на порту 53 и одна навигация внутри профиля. Одна навигация, один взгляд на вывод. Если строки появились, переключатель стоит в неверном положении либо расширение внутри профиля ходит своим маршрутом.</p>
<h2 id="chto-ostaetsya-vne-nastroek-softa-sistemnye-">Что остаётся вне настроек софта: системные службы и шифрованный DNS</h2>
<h3 id="sluzhby-kotorye-hodyat-k-imenam-mimo-posredn">Службы, которые ходят к именам мимо посредника</h3>
<p>Настройка софта закрывает софт. Операционная система живёт своей жизнью и обращается к службе имён по своим поводам: проверка обновлений, синхронизация времени, телеметрия, проверка доступности сети, сетевые диски, клиенты обмена сообщениями в автозапуске. Все они резолвят имена локально и не знают ничего про прокси в браузере.</p>
<p>На рабочей станции самый практичный порядок такой. Смотрим, что вообще стучится на порт 53, и разбираемся адресно:</p>
<pre><code># кто именно обращается к службе имён прямо сейчас
sudo tcpdump -n -i any port 53 -c 20

# на Windows: активные соединения и процессы
netstat -ano -p udp | findstr :53</code></pre>
<p>Дальше есть два рабочих пути. Первый: развернуть рабочую задачу на отдельной виртуальной машине или в контейнере, где системных служб почти нет, и весь исходящий трафик заворачивается на посредника. Второй: поднять локальный перенаправитель, который принимает запросы на порт 53 и уводит их в туннель. Для серверных задач первый путь удобнее, потому что контейнер поднимается за минуту и не тянет за собой лишние процессы.</p>
<pre><code># контейнер с прокси в переменных окружения
docker run --rm \
  -e ALL_PROXY=socks5h://user5521:pf39kd@185.24.87.14:1080 \
  -e HTTPS_PROXY=socks5h://user5521:pf39kd@185.24.87.14:1080 \
  python:3.12-slim python -c "import urllib.request;print(urllib.request.urlopen('https://ifconfig.me').read())"</code></pre>
<p>Переменные <code>ALL_PROXY</code>, <code>HTTP_PROXY</code> и <code>HTTPS_PROXY</code> понимают <code>curl</code>, <code>wget</code>, <code>pip</code>, <code>git</code>, <code>requests</code> и десятки других инструментов. Одна строка в окружении закрывает большую часть консольной работы. Регистр имеет значение на части систем, поэтому мы обычно прописываем оба варианта, строчными и заглавными буквами.</p>
<p>Серверная сторона проще станции. Там мы держим минимум служб, весь исходящий трафик задачи идёт через один канал, и проверка сводится к одному захвату. Постоянные прогоны с серверов удобно вести через <a href="https://iprazon.com/proxy/privatnye">приватный доступ к серверным адресам</a>, где картина трафика предсказуема от запуска к запуску.</p>
<h3 id="dns-poverh-https-chto-menyaetsya-i-chto-osta">DNS поверх HTTPS: что меняется и что остаётся</h3>
<p>DNS поверх HTTPS прячет содержимое запроса от провайдера, упаковывая его в обычное шифрованное соединение с известным сервисом. Для наблюдателя на канале домены становятся невидимыми, и это полезная механика сама по себе. Только к прокси она отношения не имеет.</p>
<p>Механика такая: браузер с включённым DoH обращается к своему провайдеру имён напрямую с адреса машины. Домен уходит от площадки-наблюдателя, зато провайдер имён получает и домен, и адрес спрашивающего. С точки зрения работы через посредника это та же утечка, только упакованная в шифрование. Хуже того, включённый DoH иногда перебивает настройку <code>socks_remote_dns</code>, потому что браузер идёт к своему сервису раньше, чем обращается к прокси.</p>
<p>Порядок настройки поэтому такой: если разрешение имён отдано посреднику, DoH в браузере выключается. Дублировать одно другим смысла нет, а конфликт двух механизмов даёт непредсказуемое поведение.</p>
<pre><code># Firefox, about:config
network.trr.mode = 5

# Chromium через политику: параметр DnsOverHttpsMode
DnsOverHttpsMode = "off"</code></pre>
<p>Значение <code>5</code> в Firefox означает полное выключение DoH пользователем. Значения <code>2</code> и <code>3</code> включают режимы с разной степенью настойчивости, и оба они уводят запросы мимо SOCKS. После правки проверяем захватом: обращения на порт 53 отсутствуют, шифрованных обращений к сервису DoH тоже нет.</p>
<p>Отдельный случай это операционная система с собственным шифрованным резолвером. Такой резолвер работает вне браузера и обслуживает все программы разом. Он выключается в сетевых настройках системы, и проверяется тем же захватом трафика по адресу известного сервиса имён.</p>
<h2 id="chto-ostaetsya-proverit-posle-nastroyki">Что остаётся проверить после настройки</h2>
<p>Настройка считается законченной, когда три проверки подряд дают одинаковый результат. Захват трафика на порту 53 молчит во время запроса. Журнал своего сервера зоны показывает резолвер со стороны прокси. Выходной адрес совпадает с адресом из пула. Три совпадения означают, что имя и соединение идут одним маршрутом.</p>
<p>Повторять проверку стоит после каждого обновления браузера и после каждой смены версии библиотеки. Обновления сбрасывают часть настроек к значениям по умолчанию, и упреждающее разрешение имён возвращается тихо. Проверка занимает две минуты, поэтому мы ставим её в тот же список, где лежит проверка выходного адреса.</p>
<p>Удобнее всего провести всю серию на бесплатном тесте до 2 часов. Пакет включается примерно за 5 минут, список адресов приходит в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, и оставшегося времени хватает на настройку софта, три проверки и короткий прогон под нагрузкой. Свои команды и свои цифры отвечают на вопрос точнее любого описания, и <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет прокси IPv4 с доступом к пулу</a> проверяется именно так.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-vybrat-chtoby-imena-uhodili">Какой тип прокси выбрать, чтобы имена уходили посреднику?</h3>
<p>В пакете IPv4 доступны SOCKS4 и SOCKS5 на выбор, рекомендуется SOCKS5. Базовый SOCKS4 доменные имена не принимает совсем, поэтому передача имён на сторону сервера там работает только через расширение. SOCKS5 принимает имя штатно, и в строке подключения для этого достаточно схемы <code>socks5h</code>. Строку удобно собирать сразу под нужный софт, взяв адреса из <a href="https://iprazon.com/products/kupit-proxy-socks5">списка SOCKS5 для скриптов и парсеров</a>.</p>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu-esli-sof">Подойдут ли прокси под мою задачу, если софт нестандартный?</h3>
<p>Заранее предугадать поведение каждой программы нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Порядок такой: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Проверка передачи имён как раз входит в те действия, которые успеваются за тестовое окно.</p>
<h3 id="pochemu-vyhodnoy-adres-kazhdyy-raz-drugoy-et">Почему выходной адрес каждый раз другой, это влияет на разрешение имён?</h3>
<p>Пул держится в районе 12 000 активных адресов, ротация идёт автоматически внутри пула, список обновляется в реальном времени. Смена выходного адреса между запросами это штатная работа. На разрешение имён она не влияет: при схеме <code>socks5h</code> имя разрешает тот сервер, через который идёт конкретное соединение, и обращение к службе имён с вашей машины не уходит в любом случае.</p>
<h3 id="chem-proverit-pachku-adresov-esli-ih-neskolk">Чем проверить пачку адресов, если их несколько сотен?</h3>
<p>Для массовой проверки подходит чекер от Zennolab, у него есть демонстрационная версия: он проходит список пачкой и показывает отвечающие строки, время отклика и тип прокси. Проверку передачи имён он не заменяет, поэтому её мы делаем захватом трафика на одном произвольном адресе из списка. Поведение схемы одинаково для всего пула, поэтому одной пробы достаточно.</p>
<p>Дальше по диагностике собраны соседние разборы: базовая проверка доступа командами и браузером лежит в материале про то, <a href="/proverka/kak-proverit/">как проверить работу прокси</a>, разбор заголовков и того, что уходит на сторону площадки, собран в <a href="/proverka/proverka-anonimnosti/">проверке анонимности</a>, а второй канал раскрытия адреса разобран в заметке про <a href="/proverka/webrtc/">проверку и отключение WebRTC</a>. Если настройки нужно закрепить на уровне рабочей машины и серверных задач, порядок описан в материале про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/utechka-dns/">https://kupit-proxy-ipv4.ru/proverka/utechka-dns/</a></p>]]></content:encoded></item>
<item><title>WebRTC утечка: как проверить и отключить показ реального адреса</title><link>https://kupit-proxy-ipv4.ru/proverka/webrtc/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/webrtc/</guid><description>WebRTC способен показать площадке настоящий адрес машины даже при исправно работающем прокси, потому что собирает сетевые кандидаты своими средствами и…</description><content:encoded><![CDATA[
<p class="vvod">WebRTC способен показать площадке настоящий адрес машины даже при исправно работающем прокси, потому что собирает сетевые кандидаты своими средствами и обращается к серверам STUN напрямую по UDP. Проверяется это маленькой страницей на javascript, которая выводит перечень кандидатов, а закрывается настройкой браузера: в Firefox переключателем в <code>about:config</code>, в браузерах на Chromium политикой или расширением, в антидетект-браузерах полем в карточке профиля.</p>
<p>Разбираем по порядку: зачем браузеру эта технология, как устроен сбор кандидатов, что читается в их перечне, как собрать проверочную страницу за десять строк, какие настройки закрывают вопрос в каждом браузере и почему пустой перечень кандидатов сам по себе тоже выглядит приметно.</p>
<h2 id="zachem-brauzeru-webrtc-i-otkuda-beretsya-pok">Зачем браузеру WebRTC и откуда берётся показ адреса</h2>
<p>WebRTC отвечает за прямую связь между браузерами: видеозвонки, голос, обмен файлами, демонстрация экрана, игровые каналы. Прелесть технологии в том, что данные идут напрямую между участниками, без пересылки через сервер посередине. Задержка падает, канал держится, качество картинки растёт.</p>
<p>Прямая связь требует знания адресов. Браузеру нужно понять, по каким маршрутам до него можно достучаться: адрес внутри локальной сети, адрес на внешней стороне домашнего или офисного маршрутизатора, адрес через ретранслятор. Этот перечень маршрутов и называется кандидатами.</p>
<p>Главное тут в том, как кандидаты собираются. Сбор идёт на уровне сетевого стека браузера, ниже слоя обычных HTTP-запросов, и настройка прокси в браузере на него исторически не влияла. Обращения к серверу STUN уходят по UDP на порт 3478, посредник по TCP их не видит и не может перенаправить. Браузер добросовестно узнаёт свой внешний адрес и складывает его в перечень.</p>
<p>Дальше страница читает перечень обычным скриптом. Никаких особых разрешений для этого не нужно: объект <code>RTCPeerConnection</code> создаётся из javascript, кандидаты приходят событиями, и площадка получает список маршрутов без единого вопроса пользователю. Отсюда и родилась вся история с проверками, расширениями и настройками профилей.</p>
<p>Мы разбираем этот сценарий отдельно, потому что он ломает картину незаметно. Все прочие проверки говорят, что доступ работает: выходной адрес из пула, заголовки ровные, коды ответов рабочие. А страница тем временем получила пару адресов, к прокси отношения не имеющих.</p>
<h2 id="kak-sobirayutsya-kandidaty-stun-udp-i-obhod-">Как собираются кандидаты: STUN, UDP и обход посредника</h2>
<p>Механика короткая. Браузер создаёт соединение, получает от страницы адреса серверов STUN и начинает опрос. Локальные сетевые интерфейсы он перечисляет сам, читая адреса с сетевых карт. Внешний адрес узнаёт у сервера STUN: отправляет пакет и получает ответ, в котором сервер пишет, с какого адреса и порта этот пакет пришёл.</p>
<pre><code># запрос к серверу STUN уходит по UDP и минует TCP-посредника
stun.l.google.com:19302
stun1.l.google.com:19302</code></pre>
<p>Опрос идёт по всем доступным интерфейсам. Проводная карта, беспроводная карта, виртуальный адаптер гипервизора, туннельный интерфейс: каждый даёт свой кандидат. Поэтому на рабочей станции с виртуальными машинами перечень получается длинным и рассказывает о конфигурации больше, чем хотелось бы.</p>
<p>Браузеры на Chromium с некоторого времени прячут локальные адреса за случайными именами вида <code>a1b2c3d4-....local</code>. Приём называется mDNS-обфускацией и закрывает адреса внутренней сети. Внешний адрес от сервера STUN он не трогает, поэтому основной вопрос остаётся открытым.</p>
<p>Отдельно про порядок сборки. Кандидаты приходят по одному, событиями <code>onicecandidate</code>, и последним прилетает пустое событие, означающее конец перечня. Страница может собрать всё за долю секунды и отправить на свой сервер до того, как пользователь заметит хоть что-то. Проверка поэтому делается заранее, до первого захода на целевую площадку.</p>
<p>Работу через посредника здесь спасает согласованность настроек в браузерном профиле. Именно поэтому вопрос закрывают на стороне профиля, а связку с адресами из пула удобно смотреть на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<h2 id="perechen-kandidatov-chto-v-nem-chitaetsya">Перечень кандидатов: что в нём читается</h2>
<p>Кандидат приходит строкой заданного формата. Выглядит она так:</p>
<pre><code>candidate:842163049 1 udp 1677729535 93.184.216.34 54321 typ srflx
  raddr 0.0.0.0 rport 0 generation 0 ufrag k7Qm network-cost 999</code></pre>
<p>Разбирается строка слева направо: идентификатор, номер компонента, транспорт, приоритет, адрес, порт, тип. Тип это самое ценное поле, и типов всего четыре.</p>
<div class="tabl"><table><thead><tr><th>Тип кандидата</th><th>Откуда берётся</th><th>Что показывает площадке</th><th>Опасность при работе через прокси</th></tr></thead><tbody><tr><td><code>host</code></td><td>сетевые карты машины</td><td>адрес внутри локальной сети, вид сетевой конфигурации</td><td>средняя, в Chromium скрыт за <code>.local</code></td></tr><tr><td><code>srflx</code></td><td>ответ сервера STUN</td><td>внешний адрес канала машины</td><td>высокая, это и есть открытие настоящего адреса</td></tr><tr><td><code>prflx</code></td><td>ответ второй стороны соединения</td><td>внешний адрес, добытый в обход STUN</td><td>высокая, возникает при активном звонке</td></tr><tr><td><code>relay</code></td><td>сервер TURN</td><td>адрес ретранслятора</td><td>низкая, настоящий адрес прикрыт</td></tr></tbody></table></div>
<p>Кроме типа читается ещё несколько вещей. Поле <code>network-cost</code> намекает на характер интерфейса, число интерфейсов говорит о наличии виртуальных машин и туннелей, диапазон портов иногда выдаёт версию сетевого стека. Проверяющий скрипт площадки складывает это с прочими признаками и получает отдельную характеристику браузера.</p>
<p>Самое неприятное сочетание такое: выходной адрес из пула в заголовках соединения и <code>srflx</code> с адресом домашнего канала в кандидатах. Расхождение видно мгновенно, разбирать его не требуется. Поэтому проверку кандидатов мы ставим в один ряд с проверкой заголовков и с разбором того, <a href="/osnovy/chto-vidit-sayt/">что сайт видит о вас через прокси</a>.</p>
<h2 id="proverochnaya-stranica-na-javascript">Проверочная страница на javascript</h2>
<p>Готовые сервисы проверки удобны, но собственная страница честнее: она лежит у вас, ничего не отправляет наружу и работает даже без сети. Кода в ней десяток строк.</p>
<pre><code>&lt;pre id="out"&gt;сбор кандидатов...&lt;/pre&gt;
&lt;script&gt;
const out = document.getElementById('out');
const rows = [];
const pc = new RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
pc.createDataChannel('probe');
pc.onicecandidate = e =&gt; {
  if (!e.candidate) { out.textContent = rows.join('\n') || 'кандидатов нет'; return; }
  const c = e.candidate.candidate;
  const m = c.match(/candidate:\S+ \d+ (\S+) \d+ (\S+) (\d+) typ (\S+)/);
  rows.push(m ? `${m[4].padEnd(6)} ${m[1]} ${m[2]}:${m[3]}` : c);
  out.textContent = rows.join('\n');
};
pc.createOffer().then(o =&gt; pc.setLocalDescription(o));
&lt;/script&gt;</code></pre>
<p>Файл сохраняется как <code>webrtc-probe.html</code> и открывается в проверяемом браузере. Через секунду в окне появится перечень кандидатов с типом в первой колонке. Читать его просто: строки с <code>srflx</code> содержат внешний адрес, и он должен совпадать с выходным адресом прокси либо отсутствовать совсем.</p>
<p>Ту же страницу удобно держать внутри антидетект-браузера, в профиле, где идёт работа. Мы кладём её локальным файлом и открываем сразу после создания профиля, до первого захода на площадку. Занимает это секунд двадцать.</p>
<p>Для сверки рядом открывается обычный эхо-сервис, который показывает адрес соединения:</p>
<pre><code>curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me</code></pre>
<p>Совпадение двух цифр означает согласованную настройку. Расхождение означает, что сбор кандидатов идёт мимо посредника и требует правки в настройках браузера.</p>
<h2 id="firefox-otklyuchenie-cherez-about-config">Firefox: отключение через about:config</h2>
<p>Firefox даёт самый прямой доступ к настройке. Открываем <code>about:config</code>, соглашаемся с предупреждением и правим параметры.</p>
<pre><code>media.peerconnection.enabled = false
media.peerconnection.ice.default_address_only = true
media.peerconnection.ice.no_host = true
media.peerconnection.ice.proxy_only_if_behind_proxy = true</code></pre>
<p>Первый параметр выключает технологию целиком: объект <code>RTCPeerConnection</code> перестаёт создаваться, и проверочная страница напишет про ошибку. Три остальных работают мягче. <code>default_address_only</code> оставляет один кандидат по умолчанию, <code>no_host</code> убирает кандидаты с локальных интерфейсов, <code>proxy_only_if_behind_proxy</code> заставляет весь трафик технологии идти через настроенный прокси при его наличии.</p>
<p>Для повседневной работы удобнее мягкий набор без полного выключения. Видеозвонки при этом остаются рабочими, а перечень кандидатов ужимается до одной строки с адресом посредника. Полное выключение берут там, где браузер занят прогонами и звонки в нём не нужны.</p>
<p>Параметры переживают перезапуск браузера, но сбрасываются при создании нового профиля и иногда после крупных обновлений. Поэтому проверочная страница открывается заново после каждого обновления.</p>
<p>Отдельно про <code>network.proxy.socks_remote_dns</code>. Он к кандидатам отношения не имеет, зато закрывает соседний канал раскрытия, и включать его стоит в том же заходе. Подробности собраны в материале про <a href="/proverka/utechka-dns/">утечку запросов к DNS</a>.</p>
<h2 id="brauzery-na-chromium-politika-i-rasshirenie">Браузеры на Chromium: политика и расширение</h2>
<p>В Chrome, Edge, Brave и прочих сборках на Chromium доступа к внутренним параметрам через интерфейс нет: флаг из <code>chrome://flags</code> убрали, а поле в настройках не завезли. Работают два пути.</p>
<p>Первый путь это политика браузера. Параметр <code>WebRtcIPHandling</code> принимает четыре значения и задаётся в реестре на Windows либо файлом политики на Linux и macOS.</p>
<pre><code># Windows, ветка реестра
HKLM\SOFTWARE\Policies\Google\Chrome
  WebRtcIPHandling = "disable_non_proxied_udp"

# Linux, файл /etc/opt/chrome/policies/managed/webrtc.json
{
  "WebRtcIPHandling": "disable_non_proxied_udp",
  "WebRtcLocalIpsAllowedUrls": []
}</code></pre>
<p>Значение <code>disable_non_proxied_udp</code> запрещает UDP-трафик технологии мимо посредника: при настроенном прокси кандидаты собираются через него, при отсутствии прокси соединение просто не устанавливается. Значение <code>default_public_interface_only</code> оставляет один внешний интерфейс, <code>default_public_and_private_interfaces</code> добавляет к нему локальные адреса. Политика применяется после перезапуска браузера и проверяется на странице <code>chrome://policy</code>.</p>
<p>Второй путь это расширение. В магазине есть несколько расширений, которые дёргают тот же внутренний параметр через <code>chrome.privacy.network.webRTCIPHandlingPolicy</code>. Работают они предсказуемо, ставятся за минуту и подходят там, где до реестра нет доступа. Одно замечание: расширение видно на странице списка расширений, и оно само по себе становится частью отпечатка браузера.</p>
<div class="tabl"><table><thead><tr><th>Браузер</th><th>Способ закрытия</th><th>Что меняется</th><th>Видно ли изменение снаружи</th></tr></thead><tbody><tr><td>Firefox</td><td>параметры в <code>about:config</code></td><td>кандидаты сокращаются до одного или исчезают</td><td>при полном выключении объект недоступен</td></tr><tr><td>Chrome и Edge</td><td>политика <code>WebRtcIPHandling</code></td><td>UDP мимо посредника запрещён</td><td>перечень кандидатов пустой либо один <code>srflx</code></td></tr><tr><td>Brave</td><td>штатный переключатель в настройках</td><td>режим обработки адресов</td><td>так же, как в Chrome</td></tr><tr><td>Любой Chromium</td><td>расширение из магазина</td><td>тот же внутренний параметр</td><td>расширение видно в списке установленных</td></tr><tr><td>Антидетект-браузер</td><td>поле в карточке профиля</td><td>адрес в кандидатах подменяется на адрес прокси</td><td>перечень выглядит согласованно</td></tr><tr><td>Контейнер без графики</td><td>технология отсутствует</td><td>кандидатов нет вовсе</td><td>площадка видит браузер без поддержки</td></tr></tbody></table></div>
<h2 id="antidetekt-brauzery-vopros-zakryvaetsya-nast">Антидетект-браузеры: вопрос закрывается настройкой профиля</h2>
<p>Здесь механика устроена иначе, и это главное отличие. Обычный браузер умеет только выключить сбор кандидатов или ограничить его. Антидетект-браузер умеет подставить в кандидаты нужные значения: он берёт выходной адрес прокси из карточки профиля и отдаёт странице кандидат <code>srflx</code> именно с ним.</p>
<p>В карточке профиля поле обычно называется «WebRTC» и принимает три состояния. «Отключён» убирает технологию целиком. «Реальный» отдаёт настоящие адреса машины. «Подменённый» или «на основе прокси» подставляет адрес из поля прокси того же профиля. Рабочее состояние для задач с несколькими кабинетами это третье.</p>
<p>Смысл именно в согласованности. Профиль хранит весь набор сразу: выходной адрес, отпечаток холста, часовой пояс, язык интерфейса, разрешение экрана, набор шрифтов и режим WebRTC. Все поля берутся из одного набора и не спорят друг с другом. Мы держим этот принцип базовым: адрес из пула, часовой пояс под адрес, кандидаты под адрес.</p>
<p>Проверка профиля делается той же локальной страницей. Открыли профиль, открыли файл, посмотрели на строку <code>srflx</code>, сверили с выходным адресом. Совпало значит готово. В Dolphin Anty, Octo Browser, AdsPower и Undetectable поле называется по-разному, логика одна.</p>
<p>Мы обычно заводим один эталонный профиль и дальше клонируем его под задачи. В эталоне заранее выставлены режим WebRTC, часовой пояс, язык и поле прокси, поэтому копия рождается согласованной и требует замены одной строки подключения. Такой порядок экономит время на серии из десятка профилей и снимает самую частую ошибку, когда новый профиль наследует режим «Реальный» от шаблона по умолчанию. Что именно принимает каждое поле и в каком виде туда кладётся строка, разобрано на странице про <a href="https://iprazon.com/instrumenty/antidetekt">антидетект-браузеры и работу с профилями</a>.</p>
<p>Отдельно про источник адресов. Подмена работает корректно тогда, когда прокси в профиле живой и отдаёт стабильный выход на время сессии. Под такую работу берут <a href="https://iprazon.com/proxy/privatnye">приватный доступ к пулу адресов</a> с привязкой рабочей машины, а строку подключения кладут в поле профиля целиком. Про связку с конкретной программой есть отдельный разбор на странице про <a href="https://iprazon.com/instrumenty/dolphin">настройку Dolphin Anty с прокси</a>.</p>
<h2 id="pochemu-vyklyuchennyy-webrtc-tozhe-zameten">Почему выключенный WebRTC тоже заметен</h2>
<p>Полное выключение технологии закрывает адрес и создаёт другой признак. Доля браузеров без поддержки WebRTC в живом трафике мала, и проверяющий скрипт эту долю знает. Браузер последней версии на настольной системе, который отвечает отказом на создание <code>RTCPeerConnection</code>, выглядит настроенным вручную.</p>
<p>Так же читается пустой перечень кандидатов при работающем объекте. Объект создался, событие конца перечня пришло, кандидатов ноль. Штатная машина такого не показывает почти никогда.</p>
<p>Согласованная настройка выглядит иначе. Технология доступна, объект создаётся, кандидаты приходят, и в них стоит внешний адрес, совпадающий с адресом соединения. Локальные адреса при этом либо скрыты за <code>.local</code>, либо отсутствуют, что для Chromium вполне обычное состояние. Такой перечень ничем не выделяется среди обычного трафика.</p>
<div class="tabl"><table><thead><tr><th>Состояние браузера</th><th>Что видит проверяющий скрипт</th><th>Насколько обычно выглядит</th></tr></thead><tbody><tr><td>Технология выключена целиком</td><td>ошибка при создании объекта</td><td>приметно на настольной системе</td></tr><tr><td>Объект есть, кандидатов ноль</td><td>пустой перечень до события конца</td><td>приметно</td></tr><tr><td>Кандидаты с адресом машины</td><td><code>srflx</code> спорит с адресом соединения</td><td>сразу читаемое расхождение</td></tr><tr><td>Кандидаты с адресом прокси</td><td><code>srflx</code> совпадает с адресом соединения</td><td>обычная картина</td></tr><tr><td>Только <code>relay</code> через TURN</td><td>адрес ретранслятора</td><td>обычная картина за корпоративной сетью</td></tr></tbody></table></div>
<p>Отсюда рабочий порядок. Для разовых проверок и прогонов, где браузер отвечает только за загрузку страниц, полное выключение подходит. Для работы с несколькими кабинетами берётся подмена на адрес прокси, потому что там браузер должен выглядеть обычным на длинной дистанции.</p>
<p>Мы держим оба режима под рукой и выбираем по характеру задачи. Разовый съём страницы через скрипт с браузерным движком получает выключенную технологию: кандидаты там никому не нужны, и лишний сетевой обмен только замедляет прогон. Долгая работа в кабинете получает подмену, потому что площадка смотрит на профиль неделями и накапливает статистику по каждому признаку. Смешивать режимы внутри одного набора профилей смысла мало: половина выглядит одним образом, половина другим, и разнородность сама становится приметой.</p>
<h2 id="chto-proveryat-posle-izmeneniy">Что проверять после изменений</h2>
<p>Первое: перечень кандидатов на локальной странице. Смотрим тип каждой строки и адрес в строках <code>srflx</code>. Второе: выходной адрес соединения через эхо-сервис в том же окне. Третье: сверка двух цифр между собой. Четвёртое: часовой пояс и язык браузера, потому что они читаются тем же скриптом и должны соответствовать общей картине.</p>
<p>Проверять стоит после каждого обновления браузера, после создания нового профиля и после смены пакета прокси. Обновления возвращают часть параметров к значениям по умолчанию, а новый профиль наследует настройки шаблона, который мог остаться от прежней задачи.</p>
<p>Мы держим проверочную страницу в закладках каждого рабочего профиля, рядом с эхо-сервисом. Две вкладки, один взгляд, десять секунд. Такой порядок дешевле разбора последствий: профиль, отработавший неделю с настоящим адресом в кандидатах, уже накопил историю, и переделывать её задним числом бессмысленно. Смотрим сразу, до первого захода на площадку.</p>
<pre><code># быстрая сверка адреса соединения из консоли
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 https://api.ipify.org</code></pre>
<p>Два независимых эхо-сервиса берутся намеренно: один может отдать кэшированный ответ. Совпадение обоих с адресом в кандидатах закрывает вопрос.</p>
<p>Всю серию удобно пройти на бесплатном тесте до 2 часов. Пакет включается примерно за 5 минут, список приходит в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code> ссылкой или файлом, дальше идёт настройка профиля и проверка кандидатов. Двух часов хватает на несколько профилей подряд. Под браузерные профили обычно берут <a href="https://iprazon.com/products/kupit-proxy-socks5">адреса SOCKS5 для работы в браузере</a>, они принимаются полем прокси во всех перечисленных программах.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="kakoy-tip-proksi-stavit-v-profil-antidetekt-">Какой тип прокси ставить в профиль антидетект-браузера?</h3>
<p>В пакете IPv4 доступны SOCKS4 и SOCKS5 на выбор, рекомендуется SOCKS5. Он принимает доменные имена, работает с авторизацией по логину и паролю и поддерживается полем прокси во всех известных антидетект-браузерах. Подмена адреса в кандидатах при этом опирается на тот адрес, который стоит в карточке профиля, поэтому строка подключения вписывается целиком.</p>
<h3 id="podoydut-li-proksi-pod-rabotu-s-brauzernymi-">Подойдут ли прокси под работу с браузерными профилями?</h3>
<p>Заранее предугадать поведение каждой площадки нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Порядок запуска короткий: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ и написать оператору логин и тип прокси. Проверка кандидатов на своей странице как раз укладывается в тестовое окно.</p>
<h3 id="pochemu-v-kandidatah-adres-kazhdyy-raz-drugo">Почему в кандидатах адрес каждый раз другой?</h3>
<p>Пул держится в районе 12 000 активных адресов, ротация идёт автоматически внутри пула, список обновляется в реальном времени. Смена выходного адреса между сессиями это штатная работа сервиса. Если под задачу нужна одинаковая точка выхода на всю сессию, соединение держится открытым, и адрес в кандидатах остаётся прежним до его завершения. Подробности про режимы работы смотрите там, где описан <a href="https://iprazon.com/proxy/anonimnye">анонимный доступ через общий пул</a>.</p>
<h3 id="skolko-profiley-mozhno-vesti-na-odnom-pakete">Сколько профилей можно вести на одном пакете?</h3>
<p>Ограничений на число пакетов у аккаунта нет, а внутри пакета работа идёт по числу потоков: стандартные пакеты дают до 1000 потоков, корпоративный до 3000. При двух привязанных адресах общий лимит делится пополам, и пакеты по потокам не складываются. Один браузерный профиль занимает несколько соединений, поэтому даже стандартный пакет закрывает десятки профилей одновременно.</p>
<p>Дальше по разделу диагностики собраны соседние разборы: базовая проверка доступа командами и браузером описана в материале про то, <a href="/proverka/kak-proverit/">как убедиться, что прокси работает</a>, разбор уходящих заголовков лежит в <a href="/proverka/proverka-anonimnosti/">проверке анонимности прокси</a>, а замер задержки без искажений разобран в заметке про <a href="/proverka/skorost-i-otklik/">скорость и время отклика</a>. Прикладную сторону работы с профилями и площадками смотрите в материале про <a href="/zadachi/socseti-i-smm/">соцсети и отложенный постинг</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/webrtc/">https://kupit-proxy-ipv4.ru/proverka/webrtc/</a></p>]]></content:encoded></item>
<item><title>Ошибка 407 при работе через прокси: что означает и как её снять</title><link>https://kupit-proxy-ipv4.ru/proverka/oshibka-407/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/oshibka-407/</guid><description>Код 407 означает, что узел-посредник принял соединение и отказался пропускать запрос дальше, пока клиент не подтвердит право доступа. Отказ приходит от…</description><content:encoded><![CDATA[
<p class="vvod">Код 407 означает, что узел-посредник принял соединение и отказался пропускать запрос дальше, пока клиент не подтвердит право доступа. Отказ приходит от самого прокси, целевой сайт этого обращения ещё не видел, поэтому чинится всё на стороне подключения: привязка адреса, пара логина и пароля, формат строки, схема протокола.</p>
<p>Ниже разобрано, чем 407 отличается от похожего на вид 401, как читается ответ с заголовком <code>Proxy-Authenticate</code>, шесть причин в порядке от частой к редкой и что делать, когда отказ авторизации приходит внутри сокетного соединения, где кода 407 не бывает вовсе.</p>
<h2 id="ot-kogo-prihodit-407-i-pochemu-on-poyavlyaet">От кого приходит 407 и почему он появляется так рано</h2>
<p>Разберём путь запроса по шагам. Программа открывает соединение с узлом на указанном порту, отправляет ему запрос, узел смотрит на источник и на переданные учётные данные, и только после этого решает, идти ли дальше к целевому домену. Отказ 407 выносится на втором шаге. Целевой сервер в этот момент ещё ничего не получил, его журналы пусты, его настройки к делу отношения не имеют.</p>
<p>Отсюда первое практическое следствие: 407 воспроизводится на любом адресе назначения. Мы проверяем это одной командой, подставив вместо рабочего домена нейтральный эхо-сервис. Если отказ повторился, вопрос точно в доступе, и дальше остаётся перебрать шесть причин по списку. Если на эхо-сервисе прошло, а на рабочем домене нет, это уже другая история и другой код ответа.</p>
<p>Второе следствие касается сетевого уровня. Раз 407 пришёл, соединение до узла установилось: маршрут рабочий, порт открыт, фильтры пропустили. Отказ на уровне сети выглядит совсем иначе, там нет ни кода, ни тела ответа, соединение обрывается или висит до таймаута. Мы держим это разделение в голове при каждом разборе, потому что оно сразу отсекает половину бесполезных проверок.</p>
<p>Третье следствие про темп. Отказ приходит мгновенно, за первые миллисекунды. Ждать нечего.</p>
<h2 id="chem-407-otlichaetsya-ot-401-dva-raznyh-otka">Чем 407 отличается от 401: два разных отказа</h2>
<p>Оба кода говорят про подтверждение права доступа, оба сопровождаются заголовком-подсказкой, оба выглядят в консоли одинаково коротко. Разница сидит в том, кто их выписал. Код 401 приходит от целевого сайта, который защищает свой раздел паролем. Код 407 приходит от посредника, который защищает право пользоваться пулом.</p>
<div class="tabl"><table><thead><tr><th>Признак</th><th>407</th><th>401</th></tr></thead><tbody><tr><td>Источник ответа</td><td>Узел-посредник</td><td>Целевой сайт</td></tr><tr><td>Заголовок в ответе</td><td><code>Proxy-Authenticate</code></td><td><code>WWW-Authenticate</code></td></tr><tr><td>Заголовок в запросе</td><td><code>Proxy-Authorization</code></td><td><code>Authorization</code></td></tr><tr><td>Воспроизводится на любом домене</td><td>Да</td><td>Нет, только на своём разделе</td></tr><tr><td>Приходит до туннеля CONNECT</td><td>Да</td><td>Нет, приходит после установки туннеля</td></tr><tr><td>Где чинится</td><td>Строка подключения и кабинет</td><td>Учётная запись на целевом сайте</td></tr></tbody></table></div>
<p>Путаница между кодами стоит дороже всего в скриптах, где обработчик ошибок написан по одной ветке. Программа получила 407, обработчик решил, что не хватает пароля от сайта, подставил в запрос заголовок <code>Authorization</code> и отправил заново. Узел снова ответил 407, потому что нужный ему заголовок так и не появился. Цикл повторяется до исчерпания попыток, а в журнале скрипта висит невнятная строка про отказ авторизации.</p>
<p>Есть и обратная ситуация. Через посредник открывается раздел, закрытый паролем: узел пропустил запрос, сайт ответил 401. Здесь настройки прокси в порядке, разбирать нужно учётную запись на стороне сайта. Различить эти два случая помогает подробный вывод: в первом стоит <code>Proxy-Authenticate</code>, во втором <code>WWW-Authenticate</code>.</p>
<h2 id="kak-vyglyadit-polnyy-otvet-s-zagolovkom-prox">Как выглядит полный ответ с заголовком Proxy-Authenticate</h2>
<p>Сырой ответ узла короткий. Строка статуса, заголовок со схемой подтверждения, служебные поля, крошечное тело или полное его отсутствие. Заголовков целевого сайта в нём нет вовсе, и это самый быстрый способ понять, кто ответил.</p>
<pre><code>HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="proxy"
Proxy-Connection: close
Content-Length: 0</code></pre>
<p>Поле <code>Proxy-Authenticate</code> говорит, какую схему узел готов принять. Базовая схема <code>Basic</code> означает пару логина и пароля, закодированную в base64. Значение <code>realm</code> это просто имя области доступа, оно ни на что не влияет и в запрос не переносится. Поле <code>Proxy-Connection: close</code> показывает, что узел закрывает соединение сразу после отказа, и следующая попытка пойдёт по новому соединению.</p>
<p>Ответ клиента на такой отказ выглядит одной строкой в заголовках запроса:</p>
<pre><code>GET http://example.com/ HTTP/1.1
Host: example.com
Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk
User-Agent: curl/8.5.0</code></pre>
<p>Значение после слова <code>Basic</code> это база64 от строки <code>логин:пароль</code>. Раскодировать её можно на месте, и это первая проверка при разборе спорного случая: расшифрованная строка сверяется с парой из кабинета символ в символ.</p>
<pre><code># что реально ушло в заголовке
echo -n 'dXNlcjU1MjE6cGYzOWtk' | base64 -d
# user5521:pf39kd

# как собрать значение самому и сверить
printf '%s' 'user5521:pf39kd' | base64</code></pre>
<h2 id="shest-prichin-407-v-poryadke-ot-chastoy-k-re">Шесть причин 407 в порядке от частой к редкой</h2>
<p>Причины идут по убыванию частоты обращений, которые мы разбираем. Порядок стоит соблюдать: верхние проверяются за минуту, нижние требуют захода в кабинет.</p>
<h3 id="dostup-otkryt-po-privyazke-zapros-prishel-s-">Доступ открыт по привязке, запрос пришёл с другого адреса</h3>
<p>Самая частая причина вообще не связана с паролем. В кабинете указан адрес рабочей машины, узел сверяет источник соединения со списком доступа и не находит совпадения. Пары логина и пароля в запросе тоже нет, потому что список брали в коротком формате <code>IP:PORT</code>. Узлу остаётся ответить отказом и попросить учётные данные, которых у клиента нет.</p>
<p>Признак простой: доступ работал вчера и перестал сегодня, настройки софта никто не трогал. Провайдер выдал новый адрес после переподключения, скрипт переехал на другой сервер, запуск пошёл из контейнера с отдельным сетевым интерфейсом. Мы начинаем разбор именно с этого: сверяем текущий внешний адрес машины с тем, что вписан в настройках.</p>
<pre><code># внешний адрес машины, с которой уходит запрос
curl -s https://ifconfig.me
# сверяем результат со строкой в кабинете</code></pre>
<p>Порядок действий: открыть настройки пакета, переписать привязку на текущий адрес, подождать применения и повторить запрос. Привязку разрешено менять без ограничений, в пакет входит одновременная привязка 2 адресов, поэтому рабочая машина и сервер спокойно живут вместе. При двух привязанных адресах общий лимит потоков делится между ними пополам, эту цифру полезно помнить при расчёте нагрузки. Механика самой привязки подробно разобрана в отдельном материале раздела подключения.</p>
<h3 id="login-i-parol-ne-peredany-vovse">Логин и пароль не переданы вовсе</h3>
<p>Вторая причина выглядит как первая, лечится иначе. Доступ настроен по паре логина и пароля, программа об этом не знает и отправляет голый запрос. Такое случается, когда список забрали в формате <code>IP:PORT</code>, а нужен был формат <code>IP:PORT:LOGIN:PASS</code>. Оба формата доступны в кабинете, и берётся тот, который соответствует выбранному способу доступа.</p>
<p>Второй частый вариант: пара есть, программа её теряет. Часть парсеров хранит адрес и учётные данные в разных полях, и при импорте четырёхчастной строки последние два поля отбрасываются молча. Проверяется это глазами: открыть настройки прокси в программе и убедиться, что поля логина и пароля заполнены.</p>
<pre><code># короткий формат, узел ждал пару
curl -x http://185.24.87.14:8000 https://ifconfig.me

# полный формат, пара внутри строки
curl -x http://user5521:pf39kd@185.24.87.14:8000 https://ifconfig.me

# та же пара отдельным ключом, разбора адресной строки не происходит
curl -x http://185.24.87.14:8000 -U user5521:pf39kd https://ifconfig.me</code></pre>
<p>Ключ <code>-U</code> мы советуем как основной способ проверки. Он снимает сразу два класса ошибок: разбор служебных символов и потерю части строки при копировании. Если с ним запрос проходит, значит пара верна, и вопрос сидит в записи строки. Полный разбор форматов авторизации для браузерного и программного трафика собран там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-http">доступ к прокси HTTP с парой логина и пароля</a>.</p>
<h3 id="specsimvoly-v-parole-ne-ekranirovany">Спецсимволы в пароле не экранированы</h3>
<p>Пароль попадает внутрь адресной строки, и часть символов там имеет служебное значение. Знак <code>@</code> разделяет учётные данные и хост, двоеточие разделяет логин и пароль, косая черта начинает путь, <code>#</code> открывает якорь, <code>?</code> начинает параметры, <code>%</code> начинает процентную запись. Пароль <code>p@ss:1</code> внутри строки разбирается совсем не так, как задумано, и до узла доезжает обрезок.</p>
<p>Признак характерный: пара скопирована из кабинета правильно, отказ приходит стабильно, а тот же пароль в отдельном поле программы работает. Ещё один признак: в подробном выводе видно, что curl пытается соединиться с хостом, имя которого собрано из куска пароля.</p>
<div class="tabl"><table><thead><tr><th>Символ</th><th>Что он значит в адресной строке</th><th>Процентная запись</th></tr></thead><tbody><tr><td><code>@</code></td><td>Граница между парой и хостом</td><td><code>%40</code></td></tr><tr><td><code>:</code></td><td>Граница между логином и паролем</td><td><code>%3A</code></td></tr><tr><td><code>/</code></td><td>Начало пути</td><td><code>%2F</code></td></tr><tr><td><code>#</code></td><td>Начало якоря</td><td><code>%23</code></td></tr><tr><td><code>?</code></td><td>Начало параметров запроса</td><td><code>%3F</code></td></tr><tr><td><code>%</code></td><td>Начало процентной записи</td><td><code>%25</code></td></tr><tr><td><code>&amp;</code></td><td>Разделитель параметров</td><td><code>%26</code></td></tr></tbody></table></div>
<pre><code># кодируем пароль перед подстановкой
python3 -c "import urllib.parse,sys; print(urllib.parse.quote(sys.argv[1], safe=''))" 'p@ss:1'
# p%40ss%3A1

curl -x 'http://user5521:p%40ss%3A1@185.24.87.14:8000' https://ifconfig.me</code></pre>
<p>Разбор строки подключения по полям, включая схему, порт и служебные символы, вынесен в материал про <a href="/podklyuchenie/stroka-podklyucheniya/">строку подключения и её поля</a>.</p>
<h3 id="uchetnye-dannye-uhodyat-tolko-posle-pervogo-">Учётные данные уходят только после первого отказа</h3>
<p>Схема <code>Basic</code> предполагает диалог: клиент отправляет запрос, получает 407, повторяет запрос с заголовком <code>Proxy-Authorization</code>. Так работает браузер, так работает curl. Часть библиотек этот второй шаг не делает: они видят код 407, поднимают исключение и возвращают его в код скрипта, а пара так и остаётся в настройках нетронутой.</p>
<p>Признак узнаётся по журналу: в трассировке видно ровно один запрос без заголовка <code>Proxy-Authorization</code> и один ответ 407. Повторного запроса нет. Лечится это упреждающей отправкой пары: заголовок собирается вручную и ставится в первый же запрос.</p>
<pre><code>import base64, requests

pair = base64.b64encode(b"user5521:pf39kd").decode()
headers = {"Proxy-Authorization": "Basic " + pair}
proxies = {"http": "http://185.24.87.14:8000",
           "https": "http://185.24.87.14:8000"}

r = requests.get("https://ifconfig.me", proxies=proxies, headers=headers, timeout=15)
print(r.status_code, r.text)</code></pre>
<p>Отдельный случай это туннель CONNECT для запросов по HTTPS. Заголовок <code>Proxy-Authorization</code> должен уйти внутри самого запроса CONNECT, до согласования шифрования. Библиотеки, которые ставят заголовки только в прикладной запрос, до узла их не доносят: узел читает строку CONNECT, пары там не видит и отвечает 407 ещё до подъёма туннеля. В таких случаях пара задаётся штатным полем библиотеки, где она вписывается прямо в адрес прокси. Устройство самого туннеля разобрано в разделе про протоколы.</p>
<h3 id="v-stroke-podklyucheniya-ukazana-nevernaya-sh">В строке подключения указана неверная схема</h3>
<p>Схема в начале строки говорит программе, по какому протоколу разговаривать с узлом. Значения <code>http</code>, <code>https</code>, <code>socks4</code>, <code>socks5</code> и <code>socks5h</code> дают четыре разных диалога. Когда к сокетному порту обращаются по схеме <code>http</code>, узел получает набор байт, который не разбирает, и отвечает отказом. Обратная запись даёт ту же картину.</p>
<div class="tabl"><table><thead><tr><th>Схема в строке</th><th>С каким узлом разговаривает</th><th>Где разрешается имя домена</th></tr></thead><tbody><tr><td><code>http://</code></td><td>Порт HTTP, обычные запросы и CONNECT</td><td>На стороне клиента</td></tr><tr><td><code>https://</code></td><td>Порт HTTP через шифрованный канал до узла</td><td>На стороне клиента</td></tr><tr><td><code>socks4://</code></td><td>Сокетный порт, старый вариант протокола</td><td>На стороне клиента</td></tr><tr><td><code>socks5://</code></td><td>Сокетный порт с подтверждением доступа</td><td>На стороне клиента</td></tr><tr><td><code>socks5h://</code></td><td>Тот же сокетный порт</td><td>На стороне узла</td></tr></tbody></table></div>
<p>Признак: отказ приходит на всех адресах списка сразу, при этом на соседнем порту того же узла всё проходит. Мы советуем держать в заметках две проверенные строки, одну под HTTP-порт и одну под сокетный, и подставлять их при любом сомнении. В пакете доступны оба варианта одновременно, докупать ничего не требуется, и переход сводится к правке одной строки. Сокетная часть подробно описана там, где берётся <a href="https://iprazon.com/products/kupit-proxy-socks5">пакет с доступом по SOCKS5</a>.</p>
<h3 id="uchetnaya-zapis-ili-paket-ne-aktivny">Учётная запись или пакет не активны</h3>
<p>Последняя причина редкая, зато снимается за минуту. Срок доступа истёк, пакет ещё не включился после оплаты, учётная запись поставлена на паузу до выяснения из-за подозрительно высокой активности. Узел в таком случае отвечает тем же 407, потому что предъявленные учётные данные он больше не признаёт.</p>
<p>Признак однозначный: строка подключения прежняя, привязка на месте, пара верна, отказ при этом приходит на всех адресах и по всем схемам сразу. Смотрим в кабинет: статус пакета, срок доступа, состояние учётной записи. Включение пакета после оплаты занимает примерно 5 минут, и запрос, отправленный в эту паузу, тоже получит отказ. Если статус в кабинете рабочий, а отказ остался, пишем оператору по контактам с сайта и передаём сразу логин и тип прокси, тогда разбор идёт одним сообщением.</p>
<h2 id="razbor-obmena-cherez-curl-v-chto-smotret-pos">Разбор обмена через curl -v: что смотреть построчно</h2>
<p>Подробный вывод показывает весь диалог целиком, включая заголовки в обе стороны. Строки со стрелкой вправо это то, что ушло от клиента, строки со стрелкой влево это ответ узла. Для разбора 407 нужны обе стороны сразу.</p>
<pre><code>curl -v -x http://user5521:pf39kd@185.24.87.14:8000 https://example.com -o /dev/null</code></pre>
<pre><code>* Connected to 185.24.87.14 (185.24.87.14) port 8000
* CONNECT tunnel: HTTP/1.1 negotiated
* Proxy auth using Basic with user 'user5521'
&gt; CONNECT example.com:443 HTTP/1.1
&gt; Host: example.com:443
&gt; Proxy-Authorization: Basic dXNlcjU1MjE6cGYzOWtk
&gt; User-Agent: curl/8.5.0
&gt;
&lt; HTTP/1.1 407 Proxy Authentication Required
&lt; Proxy-Authenticate: Basic realm="proxy"
&lt; Proxy-Connection: close
* CONNECT tunnel failed, response 407</code></pre>
<p>Читаем сверху вниз. Строка <code>Connected to</code> подтверждает, что до узла дошли. Строка <code>Proxy auth using Basic with user</code> показывает, какой логин взят из строки: если там пусто или стоит обрезок, вопрос в записи пароля. Строка <code>Proxy-Authorization</code> показывает, что заголовок реально ушёл: её отсутствие означает, что программа пару не отправила. Ответ <code>407</code> с полем <code>Proxy-Authenticate</code> подтверждает источник отказа.</p>
<p>Отдельно полезен ключ, который печатает сырой обмен байтами. Он показывает то, что уходит в сеть, без промежуточной обработки, и снимает споры о том, потерялась пара в библиотеке или в строке.</p>
<pre><code># сырой обмен, включая тело запроса CONNECT
curl -v --trace-ascii - -x http://185.24.87.14:8000 -U user5521:pf39kd https://example.com -o /dev/null

# только код ответа, для быстрого перебора строк списка
curl -s -o /dev/null -w '%{http_code}\n' -x http://185.24.87.14:8000 -U user5521:pf39kd https://ifconfig.me</code></pre>
<p>Быстрый перебор пригодится, когда список большой и отказ приходит выборочно. Прогоняем строки циклом, собираем коды и смотрим на долю отказов. Отказ на всех строках указывает на доступ, отказ на единичных строках указывает на устаревший список: он обновляется в реальном времени, поэтому перед крупным прогоном его стоит перечитать. Порты и схемы, которые принимают узлы по протоколу HTTP, перечислены там, где берётся <a href="https://iprazon.com/products/kupit-proxy-http">прокси HTTP для браузеров и парсеров</a>.</p>
<h2 id="otkaz-avtorizacii-vnutri-socks5-tam-svoy-kod">Отказ авторизации внутри SOCKS5: там свой код</h2>
<p>Кода 407 в сокетном протоколе нет вовсе. Он относится к HTTP, а сокетный диалог идёт двоичными байтами и своим порядком согласования. Клиент присылает список поддерживаемых способов подтверждения доступа, узел выбирает один и отвечает его номером. Значение <code>0x00</code> означает, что подтверждение не требуется, значение <code>0x02</code> означает пару логина и пароля, значение <code>0xFF</code> означает отказ: ни один из предложенных способов узел не принял.</p>
<div class="tabl"><table><thead><tr><th>Байт от узла</th><th>Что означает</th><th>Что делать</th></tr></thead><tbody><tr><td><code>0x00</code></td><td>Доступ по привязке, пара не нужна</td><td>Работать по короткому формату</td></tr><tr><td><code>0x02</code></td><td>Узел требует пару логина и пароля</td><td>Взять формат <code>IP:PORT:LOGIN:PASS</code></td></tr><tr><td><code>0xFF</code></td><td>Ни один предложенный способ не принят</td><td>Включить поддержку пары в клиенте</td></tr><tr><td>Статус <code>0x01</code> в ответе на пару</td><td>Пара предъявлена и отклонена</td><td>Сверить логин и пароль с кабинетом</td></tr></tbody></table></div>
<p>В curl эта картина выражается кодом завершения 97 и текстом про отклонённое рукопожатие. Он приходит вместо 407 и означает то же самое по смыслу: право доступа не подтверждено.</p>
<pre><code>curl -v -x socks5h://user5521:pf39kd@185.24.87.14:1080 https://ifconfig.me
# curl: (97) User was rejected by the SOCKS5 server (1 1).
echo $?   # 97</code></pre>
<p>Отдельная тонкость сокетного варианта: часть старых клиентов умеет только способ <code>0x00</code> и пару передавать не умеет физически. Такой клиент получает <code>0xFF</code> при любых верных учётных данных. Здесь помогает переход на доступ по привязке: адрес вписывается в кабинет, пара из строки убирается, диалог сходится на <code>0x00</code>. Оба способа доступа входят в пакет, и переключение между ними ничего не стоит. Устройство обоих вариантов разобрано в статье про <a href="/osnovy/avtorizaciya/">два способа доступа к пулу</a>.</p>
<h2 id="sosednie-kody-s-chem-407-putayut-chasche-vse">Соседние коды: с чем 407 путают чаще всего</h2>
<p>Таблица собрана по обращениям, которые к нам приходят с формулировкой «прокси не работает». Кода в ней достаточно, чтобы определить источник отказа и следующий шаг.</p>
<div class="tabl"><table><thead><tr><th>Код</th><th>Кто прислал</th><th>Что означает</th><th>Первое действие</th></tr></thead><tbody><tr><td>407</td><td>Узел-посредник</td><td>Право доступа не подтверждено</td><td>Сверить привязку и пару логина с паролем</td></tr><tr><td>401</td><td>Целевой сайт</td><td>Раздел сайта закрыт паролем</td><td>Проверить учётную запись на сайте</td></tr><tr><td>403</td><td>Целевой сайт</td><td>Запрос принят и отклонён по содержанию</td><td>Смотреть темп, заголовки и отпечаток</td></tr><tr><td>429</td><td>Целевой сайт</td><td>Частота обращений выше принятой</td><td>Снизить темп, развести запросы по пулу</td></tr><tr><td>502</td><td>Узел-посредник</td><td>Запрос принят, до площадки не дошёл</td><td>Повторить, взять другую строку списка</td></tr><tr><td>503</td><td>Целевой сайт или защита перед ним</td><td>Приём запросов временно закрыт</td><td>Отложить прогон, проверить страницу глазами</td></tr><tr><td>504</td><td>Узел-посредник</td><td>Площадка не ответила в отведённое время</td><td>Поднять таймаут, проверить домен напрямую</td></tr></tbody></table></div>
<p>Коды завершения самой программы дополняют картину и часто отвечают раньше, чем чтение заголовков.</p>
<div class="tabl"><table><thead><tr><th>Код curl</th><th>Название</th><th>Что означает при разборе 407</th></tr></thead><tbody><tr><td>7</td><td>Failed to connect</td><td>До узла не дошли, авторизация тут ни при чём</td></tr><tr><td>28</td><td>Operation timed out</td><td>Ответа нет, отказ авторизации выглядит иначе</td></tr><tr><td>56</td><td>Recv failure</td><td>Соединение сброшено, источник вне списка доступа</td></tr><tr><td>97</td><td>Proxy handshake failed</td><td>Сокетный аналог отказа авторизации</td></tr></tbody></table></div>
<p>Различие между 407 и 403 стоит зафиксировать отдельно, потому что эти два кода путают чаще прочих. Отказ 407 приходит до целевого сайта и воспроизводится на любом домене, включая нейтральный эхо-сервис. Отказ 403 приходит от площадки после того, как узел запрос пропустил, и на эхо-сервисе его не будет никогда. Разбор второго кода по слоям вынесен в соседнюю статью раздела диагностики.</p>
<h2 id="poryadok-razbora-kogda-407-prishel-na-raboch">Порядок разбора, когда 407 пришёл на рабочем пакете</h2>
<p>Ситуация «вчера работало, сегодня 407» разбирается по фиксированной цепочке. Мы идём от того, что меняется чаще всего, к тому, что меняется реже.</p>
<div class="tabl"><table><thead><tr><th>Шаг</th><th>Что проверяем</th><th>Чем проверяем</th><th>Что означает совпадение</th></tr></thead><tbody><tr><td>1</td><td>Внешний адрес машины</td><td><code>curl -s https://ifconfig.me</code></td><td>Адрес сменился, привязка устарела</td></tr><tr><td>2</td><td>Статус пакета в кабинете</td><td>Раздел пакетов</td><td>Срок доступа истёк или включение не завершилось</td></tr><tr><td>3</td><td>Формат списка</td><td>Раздел выдачи</td><td>Взят короткий формат при доступе по паре</td></tr><tr><td>4</td><td>Отправку заголовка</td><td><code>curl -v</code>, строка <code>Proxy-Authorization</code></td><td>Программа пару не отправила</td></tr><tr><td>5</td><td>Запись пароля</td><td>Ключ <code>-U</code> вместо адресной строки</td><td>Спецсимвол сломал разбор строки</td></tr><tr><td>6</td><td>Схему в строке</td><td>Сверка порта и схемы</td><td>Обращение ушло на порт другого протокола</td></tr></tbody></table></div>
<p>Первые три шага занимают минуту и закрывают большую часть обращений. Шаги с четвёртого по шестой нужны там, где доступ настраивается в программе со своими полями и своей библиотекой запросов.</p>
<p>Отдельно про массовые прогоны. Отказ 407 на части потоков при рабочей строке подключения указывает на превышение лимита: стандартные пакеты дают до 1000 потоков, корпоративный до 3000, пакеты по потокам не складываются. При двух привязанных адресах цифра делится пополам, и расчёт, сделанный по полному лимиту, упирается в потолок посреди прогона. Мы советуем считать нагрузку по фактическому лимиту и оставлять запас примерно в треть. Состав пакета по потокам, привязкам и трафику описан там, где берутся <a href="https://iprazon.com/proxy/privatnye">приватные серверные адреса для рабочей группы</a>.</p>
<p>И последнее про повторные попытки. Отправлять тот же самый запрос заново смысла нет: узел вынес отказ по содержанию запроса, содержание не изменилось, ответ будет прежним. Повтор оправдан ровно в одном случае: после правки привязки в кабинете, когда изменение применяется с небольшой задержкой. Во всех остальных случаях меняется строка, формат или настройка, и только потом отправляется новая попытка. Полный набор портов и протоколов, которые принимают узлы пула, собран там, где оформляется <a href="https://iprazon.com/products/kupit-proxy-ipv4">пакет адресов IPv4 на все протоколы</a>.</p>
<h2 id="chto-delat-chtoby-407-ne-poyavlyalsya-na-nov">Что делать, чтобы 407 не появлялся на новых машинах</h2>
<p>Повторяемость снимается тремя привычками. Первая: строка подключения хранится в одном месте и подставляется из переменной окружения, без ручного переписывания в каждом скрипте. Вторая: перед запуском прогона идёт короткая проверка доступа одной командой, и прогон стартует только после кода 200. Третья: список адресов перечитывается из кабинета перед каждым крупным запуском.</p>
<pre><code># одна строка на всю машину
export HTTP_PROXY='http://user5521:pf39kd@185.24.87.14:8000'
export HTTPS_PROXY="$HTTP_PROXY"
export NO_PROXY='localhost,127.0.0.1'

# проверка перед стартом прогона
code=$(curl -s -o /dev/null -w '%{http_code}' https://ifconfig.me)
[ "$code" = "200" ] &amp;&amp; echo "доступ есть" || echo "доступ отказан, код $code"</code></pre>
<p>Переменная <code>NO_PROXY</code> избавляет от лишних обращений к узлу с локальных адресов. Без неё часть служебных запросов уходит в пул и возвращает отказ, который к рабочей задаче отношения не имеет. Мы держим эту строку в стартовом скрипте каждого сервера.</p>
<p>Переезд на новую машину проходит по тому же короткому списку: вписать её внешний адрес в кабинет либо взять формат с парой логина и пароля, поставить переменные окружения, прогнать проверку. При доступе по паре машину вообще не нужно вписывать никуда, и это самый спокойный вариант для контейнеров и облачных запусков, где адрес меняется от старта к старту. Как устроены сами узлы, на которых держится пул, описано на странице про <a href="https://iprazon.com/proxy/servernye">серверные адреса на собственном оборудовании</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="pochemu-407-prihodit-hotya-login-i-parol-sko">Почему 407 приходит, хотя логин и пароль скопированы верно?</h3>
<p>Чаще всего пара теряется по дороге. Спецсимвол внутри адресной строки обрывает разбор, программа раскладывает четырёхчастную строку по своим полям и отбрасывает часть, библиотека не повторяет запрос после первого отказа. Проверяется это ключом <code>-U</code> в curl: он передаёт пару отдельно от адреса, и если так запрос проходит, вопрос сидит в записи строки.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu-i-m">Сколько адресов можно привязать к пакету и мешает ли это авторизации?</h3>
<p>В стоимость входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках кабинета. При двух привязанных адресах общее число потоков делится между ними пополам. Сама авторизация от числа привязок не зависит, отказ приходит только тогда, когда источник запроса отсутствует в списке доступа.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-proksi">В каком формате выдаётся список прокси?</h3>
<p>Форматов два: <code>IP:PORT</code> для работы с привязанным адресом и <code>IP:PORT:LOGIN:PASS</code> для доступа по паре логина и пароля. Забрать список можно ссылкой или файлом, оба варианта лежат в кабинете. Список обновляется в режиме реального времени, поэтому перед прогоном его полезно перечитать заново.</p>
<h3 id="chto-delat-esli-uchetnaya-zapis-ne-aktivirue">Что делать, если учётная запись не активируется?</h3>
<p>Написать по контактам с сайта, там помогут запустить. Оператору сразу передаётся логин и тип прокси, тогда ответ приходит одним сообщением. Пакет после оплаты включается примерно за 5 минут, и запрос, отправленный в эту паузу, тоже получит отказ авторизации.</p>
<p>Соседние разборы диагностики собраны рядом: <a href="/proverka/kak-proverit/">проверка работы прокси командами и в браузере</a> с полным набором исходов, <a href="/proverka/oshibka-403/">отказ 403 от целевой площадки</a> по слоям причин, <a href="/proverka/skorost-i-otklik/">замер скорости и времени отклика</a> без искажений от кеша. Когда доступ восстановлен и запросы проходят, следующий шаг описан в материале про <a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/oshibka-407/">https://kupit-proxy-ipv4.ru/proverka/oshibka-407/</a></p>]]></content:encoded></item>
<item><title>Ошибка 403 при работе через прокси: почему сайт отказывает и что менять</title><link>https://kupit-proxy-ipv4.ru/proverka/oshibka-403/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/proverka/oshibka-403/</guid><description>Код 403 приходит от целевого сайта, который запрос принял, прочитал и отклонил. Узел-посредник тут ни при чём: он честно донёс обращение до площадки, и…</description><content:encoded><![CDATA[
<p class="vvod">Код 403 приходит от целевого сайта, который запрос принял, прочитал и отклонил. Узел-посредник тут ни при чём: он честно донёс обращение до площадки, и площадка ответила отказом по содержанию запроса. Значит разбирать нужно сам запрос: темп обращений, набор и порядок заголовков, cookies, отпечаток шифрованного рукопожатия, доступность конкретного раздела.</p>
<p>Ниже отказ разложен по шести слоям от самого частого к самому редкому, по каждому дан признак, который отличает его от остальных, и правка, которая его снимает. Отдельно разобрано, как снять реальный ответ вместе с телом страницы отказа, чем 403 отличается от 429 и 503 и как выстроить прогон, чтобы отказы перестали появляться.</p>
<h2 id="pochemu-403-prihodit-ot-ploschadki-i-chto-et">Почему 403 приходит от площадки и что это меняет</h2>
<p>Проверка источника отказа занимает одну команду. Тот же запрос отправляется на нейтральный эхо-сервис через тот же выход. Ответ 200 оттуда означает, что канал рабочий: соединение поднялось, туннель встал, ответ вернулся. После этого все дальнейшие правки касаются только запроса.</p>
<pre><code># канал живой?
curl -s -o /dev/null -w '%{http_code}\n' -x http://185.24.87.14:8000 https://ifconfig.me
# 200

# а целевая площадка?
curl -s -o /dev/null -w '%{http_code}\n' -x http://185.24.87.14:8000 https://example.com/catalog
# 403</code></pre>
<p>Два разных кода на двух доменах через один выход дают однозначный вывод: узел пропустил оба обращения, отказ вынесла площадка. Мы начинаем любой разбор именно с этой пары команд, потому что она за пять секунд отсекает подозрения на настройки доступа.</p>
<p>Отсюда второе наблюдение, менее очевидное. Площадка видит запрос целиком: строку запроса, все заголовки в том порядке, в котором они пришли, набор cookies, параметры шифрованного рукопожатия, темп обращений с одного адреса. Отказ выносится по совокупности признаков, и один и тот же адрес получает 200 в одном сценарии и 403 в другом. Смена адреса без правки запроса переносит проблему на новый адрес.</p>
<p>Отказ приходит быстро. Обычно за первые сотни миллисекунд, потому что вердикт выносит слой перед приложением.</p>
<h2 id="shest-sloev-otkaza-ot-chastogo-k-redkomu">Шесть слоёв отказа: от частого к редкому</h2>
<p>Слои идут по убыванию частоты обращений, которые мы разбираем. У каждого свой признак, отличающий его от соседних, и своя правка. Порядок стоит соблюдать: верхние проверяются парой команд, нижние требуют перестройки прогона.</p>
<h3 id="sloy-pervyy-chastota-obrascheniy-vyshe-priny">Слой первый: частота обращений выше принятой</h3>
<p>Самый частый источник отказа. Прогон идёт в тридцать потоков с одного адреса, площадка держит счётчик обращений в минуту, порог перейден, дальше идёт отказ на всё подряд. Признак узнаётся по картине во времени: первые сотни запросов проходят нормально, потом начинается сплошная полоса отказов, и она держится, пока темп не упадёт.</p>
<p>Второй признак: отказ приходит на все адреса пула одновременно, если прогон разложен на несколько выходов и темп на каждом одинаково высокий. Третий признак: пауза в несколько минут снимает отказ без единой правки в запросе.</p>
<p>Правка сводится к трём цифрам. Пауза между обращениями с одного выхода, число одновременных потоков, размер пула, по которому раскладывается нагрузка. Мы считаем так: берём допустимый темп с одного адреса, умножаем на число выходов и получаем общую скорость прогона. Пул держится в районе 12 000 активных адресов, ротация внутри пула автоматическая, поэтому общая скорость набирается шириной, при спокойном темпе на каждом отдельном выходе.</p>
<div class="tabl"><table><thead><tr><th>Величина</th><th>Как задаётся</th><th>Что происходит при завышении</th></tr></thead><tbody><tr><td>Пауза между запросами</td><td>Задержка в настройках прогона</td><td>Счётчик площадки переполняется</td></tr><tr><td>Одновременные потоки</td><td>Лимит в софте</td><td>Всплеск обращений в первую секунду</td></tr><tr><td>Ширина ротации</td><td>Размер пула под прогон</td><td>Нагрузка садится на узкую группу выходов</td></tr><tr><td>Повторы после отказа</td><td>Политика ретраев</td><td>Отказы множатся, счётчик растёт дальше</td></tr></tbody></table></div>
<p>Отдельно про повторы. Скрипт получил 403 и тут же отправил тот же запрос заново, потом ещё раз, потом с задержкой в секунду. Счётчик площадки при этом продолжает расти, и вместо восстановления прогон загоняет себя глубже. Правильный порядок: отказ фиксируется, темп снижается, запрос уходит в отложенную очередь. Пакеты дают до 1000 потоков на стандартных вариантах и до 3000 на корпоративном, при этом сама цифра лимита к порогу площадки отношения не имеет, её задаёт сайт. Рабочие связки по темпу и ширине пула описаны там, где берутся <a href="https://iprazon.com/proxy/dlya-parsinga">прокси для парсинга и сбора данных</a>.</p>
<h3 id="sloy-vtoroy-zagolovki-ne-pohozhi-na-brauzer">Слой второй: заголовки не похожи на браузер</h3>
<p>Второй по частоте источник. Библиотека запросов отправляет минимальный набор полей, площадка ждёт полный набор, разница видна с первого обращения. Признак отличается от первого слоя ровно одним свойством: отказ приходит на самом первом запросе, до всякого темпа, и повторяется стабильно с любого выхода.</p>
<p>Библиотека по умолчанию шлёт три-четыре поля. Браузер шлёт полтора десятка, в фиксированном порядке, с осмысленными значениями. Разница читается автоматом.</p>
<pre><code># то, что уходит из библиотеки без настройки
GET /catalog HTTP/1.1
Host: example.com
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*</code></pre>
<pre><code># то, что уходит из браузера
GET /catalog HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate, br
Sec-Ch-Ua: "Chromium";v="124", "Not:A-Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
Connection: keep-alive</code></pre>
<p>Порядок полей значит не меньше состава. Браузеры отправляют заголовки в устойчивой последовательности, и площадка сверяет её вместе с содержимым <code>User-Agent</code>. Набор, собранный вручную по алфавиту или в случайном порядке, выдаёт себя даже при полном составе полей.</p>
<div class="tabl"><table><thead><tr><th>Поле</th><th>Что показывает площадке</th><th>Частая ошибка</th></tr></thead><tbody><tr><td><code>User-Agent</code></td><td>Программа и версия</td><td>Оставлено значение библиотеки</td></tr><tr><td><code>Accept-Language</code></td><td>Ожидаемый язык ответа</td><td>Отсутствует целиком</td></tr><tr><td><code>Accept-Encoding</code></td><td>Поддерживаемое сжатие</td><td>Нет <code>br</code>, хотя заявлен свежий Chrome</td></tr><tr><td><code>Sec-Fetch-*</code></td><td>Контекст перехода</td><td>Пропущены при заявленном Chromium</td></tr><tr><td><code>Sec-Ch-Ua</code></td><td>Версия движка</td><td>Версия расходится с <code>User-Agent</code></td></tr><tr><td><code>Referer</code></td><td>Откуда пришёл переход</td><td>Стоит на первом же обращении к сайту</td></tr></tbody></table></div>
<p>Правка занимает один проход по коду. Мы снимаем настоящий набор из браузера через панель разработчика, копируем его как команду curl и переносим в прогон целиком, вместе с порядком. Дальше набор держится согласованным: версия в <code>Sec-Ch-Ua</code> совпадает с версией в <code>User-Agent</code>, язык в <code>Accept-Language</code> совпадает с ожидаемым, <code>Referer</code> появляется только со второго перехода.</p>
<h3 id="sloy-tretiy-net-privychnogo-nabora-cookies">Слой третий: нет привычного набора cookies</h3>
<p>Третий слой узнаётся по характерной картине: главная страница отдаётся кодом 200, внутренний раздел отвечает 403. Площадка ставит служебные cookies на первом заходе и ждёт их на всех последующих обращениях. Прогон, который ходит сразу на карточки, эти поля не получает и не отправляет.</p>
<p>Признак, отличающий слой от предыдущего: заголовки в порядке, отказ приходит выборочно по разделам. Проверяется парой запросов подряд с сохранением банки cookies.</p>
<pre><code># первый заход: забираем cookies
curl -s -c jar.txt -x http://185.24.87.14:8000 https://example.com/ -o /dev/null

# второй заход в раздел: отдаём их обратно
curl -s -b jar.txt -c jar.txt -x http://185.24.87.14:8000 https://example.com/catalog -o page.html -w '%{http_code}\n'

# что вообще положила площадка
cat jar.txt</code></pre>
<p>Код 200 на втором запросе при отказе на прямом обращении в раздел подтверждает слой однозначно. Правка простая: прогон начинается с главной страницы, банка cookies живёт на протяжении сессии и привязывается к тому же выходу, с которого была получена. Смена выхода посреди сессии обнуляет доверие: площадка видит, что её cookies пришли с другого адреса.</p>
<p>Отсюда практический вывод про ротацию. Сессия и выход держатся вместе от начала до конца, а новая сессия берёт новый выход. Ротация внутри пула автоматическая, поэтому схема укладывается в один параметр прогона: сессия открывается, отрабатывает свои страницы и закрывается вместе с банкой cookies.</p>
<h3 id="sloy-chetvertyy-otpechatok-rukopozhatiya-ras">Слой четвёртый: отпечаток рукопожатия расходится с User-Agent</h3>
<p>Четвёртый слой встречается там, где перед сайтом стоит защита с разбором шифрованного рукопожатия. Клиент заявляет себя браузером в заголовке, а параметры согласования шифрования у него совсем другие: свой набор наборов шифров, свой порядок расширений, своя поддержка версий протокола. Несовпадение читается до отправки первого прикладного заголовка.</p>
<p>Признак отличается от третьего слоя тем, что отказ приходит на любом разделе, включая главную, и не снимается ни паузой, ни банкой cookies, ни полным набором заголовков. Второй признак: тот же запрос из настоящего браузера через тот же выход проходит нормально.</p>
<div class="tabl"><table><thead><tr><th>Что сравнивает площадка</th><th>Браузер</th><th>Библиотека по умолчанию</th></tr></thead><tbody><tr><td>Набор шифров и его порядок</td><td>Устойчивый для версии</td><td>Порядок берётся из системной библиотеки</td></tr><tr><td>Расширения рукопожатия</td><td>Полный набор, включая перемешивание</td><td>Сокращённый набор</td></tr><tr><td>Заявленные версии протокола</td><td>Свежая версия с откатом</td><td>Часто только одна версия</td></tr><tr><td>Согласование прикладного протокола</td><td><code>h2</code> и запасной вариант</td><td>Нередко отсутствует</td></tr><tr><td>Порядок прикладных заголовков</td><td>Фиксированный для движка</td><td>Порядок словаря в коде</td></tr></tbody></table></div>
<p>Правка идёт в сторону настоящего браузерного стека. Прогон переносится в браузер под управлением, либо берётся клиент, который повторяет рукопожатие движка целиком. Антидетект-браузеры делают ровно это: движок настоящий, поэтому рукопожатие совпадает с заявленным заголовком автоматически. Профили при этом мы разводим по разным выходам, и связка профиля с адресом держится постоянной на всю сессию. Настройки под такие браузеры собраны на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<pre><code># посмотреть, какую версию протокола и какой набор согласовал клиент
curl -v -x http://185.24.87.14:8000 https://example.com -o /dev/null 2&gt;&amp;1 | grep -E 'SSL connection|ALPN|TLSv'</code></pre>
<h3 id="sloy-pyatyy-razdel-zakryt-dlya-vseh">Слой пятый: раздел закрыт для всех</h3>
<p>Пятый слой самый простой и самый обидный, потому что правки в прогоне тут ничего не меняют. Площадка отдаёт 403 на конкретный путь всем подряд, включая обычный браузер без посредника. Каталог убрали под учётную запись, файл лежит вне доступного дерева, служебный путь закрыт настройками веб-сервера.</p>
<p>Проверяется за десять секунд: тот же адрес открывается в браузере напрямую. Отказ там означает, что вопрос в самом разделе. Тело ответа в таком случае обычно короткое и типовое, с формулировкой веб-сервера.</p>
<pre><code>&lt;html&gt;
&lt;head&gt;&lt;title&gt;403 Forbidden&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
&lt;center&gt;&lt;h1&gt;403 Forbidden&lt;/h1&gt;&lt;/center&gt;
&lt;hr&gt;&lt;center&gt;nginx&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>Такая страница означает отказ на уровне веб-сервера. Здесь помогает пересборка маршрута: смотрим, откуда на нужный раздел ведут живые переходы, и повторяем путь пользователя. Часть площадок отдаёт те же данные другим путём, через открытый интерфейс выдачи или через версию страницы для печати, и это дешевле любой борьбы с закрытым путём.</p>
<h3 id="sloy-shestoy-srabotala-zaschita-pered-saytom">Слой шестой: сработала защита перед сайтом</h3>
<p>Шестой слой отличается от пятого содержимым тела. Страница отказа приходит фирменная: заголовок защиты, идентификатор обращения, иногда проверка в браузере. Заголовки ответа тоже говорящие, там появляются служебные поля защитного слоя.</p>
<pre><code># смотрим ответ целиком: заголовки и тело страницы отказа
curl -s -D headers.txt -x http://185.24.87.14:8000 https://example.com/catalog -o body.html
head -20 headers.txt
grep -iE 'ray|request-id|challenge|blocked' body.html | head</code></pre>
<p>Признаки, по которым слой опознаётся: код 403 приходит вместе со служебным идентификатором обращения в заголовках, тело весит несколько килобайт и содержит скрипт проверки, ответ отдаётся быстрее, чем обычные страницы сайта. При этом главная страница может открываться нормально, потому что защита включается на отдельных путях.</p>
<div class="tabl"><table><thead><tr><th>Что в теле ответа</th><th>Что это означает</th><th>Куда смотреть дальше</th></tr></thead><tbody><tr><td>Короткая страница веб-сервера</td><td>Путь закрыт настройками</td><td>Маршрут перехода и доступность раздела</td></tr><tr><td>Страница с идентификатором обращения</td><td>Отработала защита перед сайтом</td><td>Отпечаток рукопожатия и полнота заголовков</td></tr><tr><td>Страница с проверкой в браузере</td><td>Ожидается исполнение скрипта</td><td>Прогон переносится в браузерный движок</td></tr><tr><td>Форма ввода символов с картинки</td><td>Поведение сочтено автоматическим</td><td>Темп, ширина ротации, набор cookies</td></tr><tr><td>Обычная страница сайта с текстом отказа</td><td>Отказ вынесло само приложение</td><td>Учётная запись и права на разделе</td></tr></tbody></table></div>
<p>Правка идёт по совокупности: браузерный движок для исполнения скриптов, полный и согласованный набор заголовков, живая банка cookies, спокойный темп и широкая ротация выходов. Каждый пункт по отдельности отказ не снимает, вместе они дают рабочий прогон.</p>
<h2 id="kak-snyat-realnyy-otvet-i-prochitat-stranicu">Как снять реальный ответ и прочитать страницу отказа</h2>
<p>Отладка начинается с того, чтобы увидеть ответ целиком. Код без тела говорит мало, тело без заголовков тоже. Мы снимаем обе части одной командой и раскладываем их по файлам.</p>
<pre><code>curl -s -D headers.txt -o body.html -w 'code=%{http_code} size=%{size_download} time=%{time_total}\n' \
  -x http://185.24.87.14:8000 \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8' \
  https://example.com/catalog</code></pre>
<p>Три цифры в выводе дают первую подсказку. Размер тела в несколько сотен байт указывает на страницу веб-сервера, несколько килобайт указывают на защитный слой, размер обычной страницы сайта указывает на отказ самого приложения. Время ответа меньше сотни миллисекунд говорит о том, что запрос до приложения не дошёл.</p>
<p>Дальше читаем заголовки ответа. Служебные поля защитного слоя, поля кеша, поле <code>Retry-After</code>, поле <code>Set-Cookie</code> с новой служебной строкой. Каждое из них сужает круг.</p>
<pre><code># коды по серии запросов, чтобы увидеть картину во времени
for i in $(seq 1 40); do
  printf '%s ' "$(curl -s -o /dev/null -w '%{http_code}' -x http://185.24.87.14:8000 https://example.com/catalog)"
  sleep 1
done
echo
# 200 200 200 200 200 403 403 403 403 403 403 ...</code></pre>
<p>Полоса двухсоток, которая обрывается на отказ, указывает на темп. Отказ с первого же запроса указывает на запрос сам по себе. Чередование кодов указывает на ротацию: часть выходов уже под ограничением, часть ещё нет. Как правильно замерять серию и не путать кеш с реальным ответом, разобрано в материале про <a href="/proverka/skorost-i-otklik/">замер скорости и времени отклика</a>.</p>
<h2 id="chem-403-otlichaetsya-ot-429-i-503">Чем 403 отличается от 429 и 503</h2>
<p>Три кода приходят в похожих обстоятельствах и требуют разных действий. Различить их помогает таблица и одно наблюдение: только 429 прямо называет причину, остальные два оставляют её на догадку.</p>
<div class="tabl"><table><thead><tr><th>Код</th><th>Что говорит площадка</th><th>Тело ответа</th><th>Что делать</th></tr></thead><tbody><tr><td>403</td><td>Запрос прочитан и отклонён</td><td>Страница отказа или защиты</td><td>Править запрос: темп, заголовки, cookies, отпечаток</td></tr><tr><td>429</td><td>Частота обращений превышена</td><td>Короткое, часто с полем <code>Retry-After</code></td><td>Ждать указанное время, снижать темп</td></tr><tr><td>503</td><td>Приём запросов временно закрыт</td><td>Страница обслуживания или защиты</td><td>Отложить прогон, проверить сайт глазами</td></tr><tr><td>401</td><td>Раздел требует подтверждения права</td><td>Пустое, с полем <code>WWW-Authenticate</code></td><td>Учётная запись на самой площадке</td></tr><tr><td>407</td><td>Право доступа к пулу не подтверждено</td><td>Пустое, с полем <code>Proxy-Authenticate</code></td><td>Привязка адреса и пара логина с паролем</td></tr><tr><td>404</td><td>Путь отсутствует</td><td>Страница сайта</td><td>Сверить адрес и параметры запроса</td></tr></tbody></table></div>
<p>Код 407 в этом ряду стоит особняком: его выписывает узел-посредник до целевого сайта, и на нейтральном эхо-сервисе он воспроизводится точно так же. Полный разбор этого случая вынесен в соседнюю статью раздела диагностики.</p>
<p>Поле <code>Retry-After</code> в ответе означает, что площадка сама называет паузу. Его стоит читать и соблюдать: игнорирование поля быстро переводит ограничение в постоянный отказ. При коде 503 полезно открыть сайт в браузере: страница обслуживания видна сразу, и тогда прогон просто откладывается.</p>
<h2 id="pochemu-povtor-togo-zhe-zaprosa-nichego-ne-d">Почему повтор того же запроса ничего не даёт</h2>
<p>Отказ 403 вынесен по содержанию запроса. Содержание не изменилось, значит и ответ будет прежним. Повтор при этом добавляет обращение в счётчик площадки и приближает переход ограничения в длительное. Мы видим это в журналах регулярно: скрипт с агрессивной политикой повторов превращает разовый отказ в сплошную полосу за пару минут.</p>
<p>Работающий порядок выглядит иначе. Отказ фиксируется вместе с кодом, размером тела и временем ответа. Запрос уходит в отложенную очередь. Прогон продолжается на других задачах, темп снижается, и отложенная очередь перебирается позже, уже с изменённым запросом или с другого выхода. Повтор без правки допустим ровно в одном случае: когда предыдущий отказ пришёл на пике темпа и пауза заведомо превышает окно счётчика.</p>
<pre><code># порядок обработки отказа: без слепых повторов
import time, collections

deferred = collections.deque()

def handle(url, code, body_len):
    if code == 200:
        return "ok"
    if code == 403:
        deferred.append((url, time.time() + 900))   # разбираем позже
        return "отложено, темп снижен"
    if code == 429:
        return "пауза по полю Retry-After"
    return "разбор по коду " + str(code)</code></pre>
<p>Число 900 в примере это пятнадцать минут ожидания. Цифра подбирается под площадку: где-то хватает трёх минут, где-то нужен час. Замер делается один раз на небольшой серии и дальше остаётся в настройках прогона.</p>
<h2 id="kak-vystroit-progon-chtoby-403-ne-poyavlyali">Как выстроить прогон, чтобы 403 не появлялись</h2>
<p>Устойчивый прогон держится на четырёх настройках, и все они задаются до запуска. Пауза между обращениями с одного выхода, разумное число потоков, ротация внутри пула, согласованный набор заголовков. Порядок важен: сначала считается допустимый темп, потом под него подбирается ширина ротации, и только потом настраивается сам запрос.</p>
<div class="tabl"><table><thead><tr><th>Настройка</th><th>Как подобрать</th><th>Признак того, что цифра завышена</th></tr></thead><tbody><tr><td>Пауза между запросами</td><td>Замер серией по сорок обращений</td><td>Полоса отказов после первых успехов</td></tr><tr><td>Потоки в софте</td><td>Скорость умножить на время отклика</td><td>Всплеск обращений и отказ в первую минуту</td></tr><tr><td>Ширина ротации</td><td>Общая скорость делить на темп с выхода</td><td>Отказы возвращаются на те же выходы</td></tr><tr><td>Набор заголовков</td><td>Снимок из панели разработчика</td><td>Отказ на самом первом запросе</td></tr><tr><td>Длина сессии</td><td>Число страниц до смены выхода</td><td>Отказ появляется в середине сессии</td></tr></tbody></table></div>
<p>Пауза замеряется серией. Запускаем сорок обращений с шагом в секунду, смотрим, на каком номере появляется первый отказ, увеличиваем шаг и повторяем. Цифра, при которой сорок обращений проходят подряд, берётся с запасом примерно в треть. Такой замер занимает четверть часа и экономит дни разбора.</p>
<p>Ширина ротации считается из общей скорости. Нужно 5 000 страниц в час, безопасный темп с одного выхода 20 обращений в минуту: 5 000 делим на 60 и на 20, выходит примерно 4 выхода в постоянной работе плюс запас на отдых каждого. Пул около 12 000 адресов такую ширину закрывает с большим запасом, ротация внутри него автоматическая, поэтому раскладка не требует ручного управления списком. Трафик безлимитный, так что объём выкачанных страниц на расчёт не влияет вовсе.</p>
<p>Сессии выстраиваются по площадке. Одна сессия это вход через главную, набор служебных cookies, серия страниц и закрытие. Выход держится один на всю сессию. Длина сессии подбирается тем же замером: увеличиваем число страниц, пока отказ не появится в середине, и берём цифру ниже границы. Готовые связки под парсеры и антидетект-браузеры собраны на странице, где берутся <a href="https://iprazon.com/proxy/dlya-parsinga">адреса под массовый сбор данных</a>.</p>
<p>Заголовки собираются один раз и живут в конфиге прогона. Пересобирать их приходится редко, а вот сверять на согласованность полезно при каждом обновлении версии в <code>User-Agent</code>: версия движка стоит сразу в трёх полях, и расхождение между ними даёт отказ на любом темпе. Отдельно проверяется, что запросы к службе имён идут через выход, иначе картина по адресу выходит неполной. Как это устроено, разобрано в материале про <a href="/proverka/utechka-dns/">запросы к службе имён и их утечку</a>.</p>
<p>Перед крупным запуском список адресов перечитывается из кабинета. Он обновляется в режиме реального времени, и сохранённый когда-то файл постепенно устаревает: часть строк перестаёт отвечать, прогон получает лишние ошибки, и они смешиваются с настоящими отказами площадки. Список забирается ссылкой или файлом в форматах <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Откуда берутся сами узлы, показано на странице про <a href="https://iprazon.com/proxy/servernye">пул на собственных серверных мощностях</a>, а сокетный вариант подключения разобран там, где берётся <a href="https://iprazon.com/products/kupit-proxy-socks5">доступ по протоколу SOCKS5</a>.</p>
<h2 id="chto-proverit-kogda-403-poyavilsya-na-raboch">Что проверить, когда 403 появился на рабочем прогоне</h2>
<p>Прогон работал неделю и начал отдавать отказы. Разбор идёт по цепочке от внешних причин к внутренним, и первые три шага занимают несколько минут.</p>
<div class="tabl"><table><thead><tr><th>Шаг</th><th>Вопрос</th><th>Чем проверяем</th><th>Вывод</th></tr></thead><tbody><tr><td>1</td><td>Канал живой?</td><td>Запрос на эхо-сервис через тот же выход</td><td>Код 200 означает, что отказ от площадки</td></tr><tr><td>2</td><td>Раздел открыт вообще?</td><td>Тот же путь в браузере напрямую</td><td>Отказ там означает закрытый путь</td></tr><tr><td>3</td><td>Отказ от темпа?</td><td>Серия с паузой в несколько секунд</td><td>Проходит означает превышение темпа</td></tr><tr><td>4</td><td>Заголовки согласованы?</td><td>Снимок из панели разработчика и сверка</td><td>Расхождение версий даёт стабильный отказ</td></tr><tr><td>5</td><td>Cookies живые?</td><td>Заход через главную с сохранением банки</td><td>Код 200 после этого подтверждает слой</td></tr><tr><td>6</td><td>Отпечаток совпадает?</td><td>Тот же запрос из настоящего браузера</td><td>Проходит означает расхождение рукопожатия</td></tr></tbody></table></div>
<p>Отдельная частая история это правка на стороне площадки. Сайт обновил защиту, порог темпа опустился, набор ожидаемых полей вырос. Прогон при этом не менялся ни строчкой. Здесь помогает тот же замер серией, который делался при настройке: он покажет новую границу за четверть часа, и прогон вернётся в работу с обновлёнными цифрами.</p>
<p>Мы советуем держать результаты замеров в конфиге прогона рядом с настройками потоков: темп с одного выхода, длина сессии, набор заголовков, дата последней сверки. Тогда возврат к площадке через месяц начинается с готовых цифр, и вся настройка сводится к одной серии из сорока обращений. Состав пакета по потокам, привязкам и трафику описан там, где берётся <a href="https://iprazon.com/products/kupit-proxy-ipv4">пул IPv4 с безлимитным трафиком</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-moyu-zadachu-esli-plo">Подойдут ли прокси под мою задачу, если площадка отвечает отказом?</h3>
<p>Заранее предугадать поведение каждой площадки нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем софте и на ваших целевых доменах, и за два часа видно, какой темп площадка принимает и какой набор заголовков её устраивает.</p>
<h3 id="mozhno-li-otobrat-proksi-po-strane-chtoby-ob">Можно ли отобрать прокси по стране, чтобы обойти отказ?</h3>
<p>Нет, пул это микс со всего мира, выборка по отдельной стране не делается. Отказ 403 выносится по содержанию запроса, поэтому снимается правкой темпа, заголовков, cookies и отпечатка. Разнообразие подсетей в общем пуле работает на ширину ротации, и её обычно хватает с запасом.</p>
<h3 id="est-li-limity-po-potokam-i-kak-oni-svyazany-">Есть ли лимиты по потокам и как они связаны с отказами?</h3>
<p>У каждого пакета свой лимит: стандартные варианты дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются, при двух привязанных адресах общее число делится пополам. Порог площадки задаётся ей самой и с лимитом пакета не связан, поэтому число потоков в софте подбирается под темп, который принимает конкретный сайт.</p>
<h3 id="chem-proveryat-proksi-pered-progonom">Чем проверять прокси перед прогоном?</h3>
<p>Рекомендуется чекер от Zennolab, у него есть демонстрационная версия. Он проходит список пачкой и показывает отвечающие строки и время отклика. Перед крупным запуском список полезно перечитать из кабинета: он обновляется в режиме реального времени.</p>
<p>Остальную диагностику удобно смотреть по порядку: сначала <a href="/proverka/kak-proverit/">проверка работы прокси командами и в браузере</a>, затем <a href="/proverka/proverka-anonimnosti/">какие заголовки уходят на сервер</a> при разборе анонимности, отдельно <a href="/proverka/oshibka-407/">ошибка 407 от узла-посредника</a> со всеми причинами по списку. Когда прогон настроен и отказы ушли, дальше пригодится материал про <a href="/zadachi/internet-magazin/">сбор прайсов и остатков поставщиков</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/proverka/oshibka-403/">https://kupit-proxy-ipv4.ru/proverka/oshibka-403/</a></p>]]></content:encoded></item>
<item><title>Прокси для съёма позиций: расчёт нагрузки, Key Collector и A-Parser</title><link>https://kupit-proxy-ipv4.ru/zadachi/seo-pozicii/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/zadachi/seo-pozicii/</guid><description>Съём позиций идёт через пул адресов по простой причине: частые однотипные обращения к странице выдачи с одного адреса быстро упираются в проверки. Сначала…</description><content:encoded><![CDATA[
<p class="vvod">Съём позиций идёт через пул адресов по простой причине: частые однотипные обращения к странице выдачи с одного адреса быстро упираются в проверки. Сначала ответ приходит с задержкой, потом вместо разметки открывается страница подтверждения, и сбор останавливается на середине списка. Пул примерно из 12 000 адресов разносит эти обращения между разными подсетями, ротация внутри пула идёт автоматически, и программа продолжает работать с той скоростью, которую задал администратор.</p>
<p>Дальше разобрано всё по порядку: расчёт нагрузки под конкретную семантику, число потоков, которое из расчёта выходит, заполнение полей посредника в Key Collector и A-Parser, роль паузы между обращениями, съём по расписанию, сбор подсказок и частотности, работа с разными языками интерфейса и хранение снятых позиций для сверки между съёмами.</p>
<h2 id="chto-vidit-poiskovaya-sistema-kogda-pozicii-">Что видит поисковая система, когда позиции снимает программа</h2>
<p>Страница выдачи отдаётся обычным запросом: адрес, параметр поиска, параметр номера страницы. Программа шлёт такие запросы пачками, и отличие от человека складывается из мелочей. Одинаковый набор заголовков во всех обращениях. Ровный интервал между ними до сотых долей секунды. Отсутствие подгрузки картинок, шрифтов и скриптов, которые браузер тянет автоматически. Отсутствие прокрутки и переходов по ссылкам после того, как страница открылась.</p>
<p>Счётчик обращений ведётся по адресу источника. Пока обращений мало, ответы приходят обычные. Дальше включается лестница: время ответа растёт, появляется перенаправление на страницу подтверждения, затем приходит код 429 с полем <code>Retry-After</code>, а при упорном продолжении сервер отдаёт 503 и держит адрес в этом состоянии заметное время. Программа при этом продолжает считать такие ответы попытками, очередь ключей стоит, а администратор видит в логе ровные строки с одинаковым кодом.</p>
<p>Посредник меняет картину в одном месте: обращения расходятся по разным адресам, и счётчик каждого из них остаётся низким. Мы держим пул около 12 000 активных адресов из множества стран, список обновляется в режиме реального времени, доступ к нему открыт клиентам сервиса. Программе достаточно получить этот список и раскладывать по нему запросы, дальше работа идёт своим ходом. Разбор самих кодов и того, что делать при их появлении, собран в материале про <a href="/proverka/oshibka-403/">ошибку 403 при работе через прокси</a>.</p>
<p>Отдельно стоит подчеркнуть характер задачи. Съём позиций читает открытую страницу выдачи, ту же самую, которую видит любой посетитель. Никаких учётных записей, никакой авторизации, никакой отправки форм. Поэтому вся настройка сводится к скорости обращений и разбросу адресов, а сложных сценариев с сессиями здесь не возникает.</p>
<h2 id="raschet-nagruzki-zaprosy-glubina-i-okno-sema">Расчёт нагрузки: запросы, глубина и окно съёма</h2>
<p>Считается всё тремя величинами. Первая: число запросов в семантике. Вторая: глубина, то есть сколько страниц выдачи программа открывает по каждому запросу. Третья: окно съёма, отрезок времени, за который прогон должен закончиться.</p>
<p>Формула короткая. Число обращений за съём равно числу запросов, умноженному на глубину. Требуемая скорость равна числу обращений, делённому на длину окна в секундах. Пример: 5 000 запросов при глубине в 3 страницы дают 15 000 обращений, и если окно составляет шесть часов, скорость выходит около 0,7 обращения в секунду.</p>
<p>Глубина задаётся задачей. Для отчёта по топ-10 хватает одной страницы, при выдаче по 10 позиций на страницу. Для отслеживания движения по топ-30 берём три страницы. Пять страниц нужны редко, обычно при работе с широким низкочастотным ядром, где позиции гуляют далеко за первой десяткой. Каждая лишняя страница множит нагрузку на всю семантику сразу, поэтому глубину мы задаём один раз и потом её не трогаем без повода.</p>
<div class="tabl"><table><thead><tr><th>Запросов в семантике</th><th>Глубина, страниц</th><th>Обращений за съём</th><th>Окно съёма</th><th>Обращений в секунду</th></tr></thead><tbody><tr><td>500</td><td>1</td><td>500</td><td>2 часа</td><td>0,07</td></tr><tr><td>500</td><td>3</td><td>1 500</td><td>4 часа</td><td>0,10</td></tr><tr><td>1 500</td><td>3</td><td>4 500</td><td>4 часа</td><td>0,31</td></tr><tr><td>5 000</td><td>3</td><td>15 000</td><td>6 часов</td><td>0,69</td></tr><tr><td>12 000</td><td>3</td><td>36 000</td><td>8 часов</td><td>1,25</td></tr><tr><td>30 000</td><td>5</td><td>150 000</td><td>12 часов</td><td>3,47</td></tr></tbody></table></div>
<p>Окно берётся с запасом. Часть обращений уйдёт в повтор, часть страниц отдастся медленнее обычного, и прогон, рассчитанный впритык, закончится позже расписания. Мы закладываем к расчётному окну примерно четверть сверху и на этом успокаиваемся. Под массовое чтение страниц выдачи и любые другие сборы со страниц подходят <a href="https://iprazon.com/proxy/dlya-parsinga">прокси для парсинга и сбора данных</a>, состав пакета там описан целиком.</p>
<h2 id="skolko-potokov-vyhodit-i-pochemu-standartnog">Сколько потоков выходит и почему стандартного пакета хватает</h2>
<p>Поток это одно одновременно открытое соединение. За единицу времени один поток успевает провести полный цикл: отправить запрос, дождаться ответа, отстоять паузу перед следующим обращением. Значит стоимость одного обращения для потока равна времени отклика плюс паузе.</p>
<p>При отклике 1,4 секунды и паузе 5 секунд цикл занимает 6,4 секунды, и один поток выдаёт около 0,16 обращения в секунду. Делим требуемую скорость на эту величину и получаем число потоков. Расчёт занимает полминуты и снимает главный источник ошибок: потоки, взятые круглым числом наугад.</p>
<div class="tabl"><table><thead><tr><th>Обращений в секунду</th><th>Потоков при паузе 5 с</th><th>Потоков при паузе 10 с</th><th>С запасом в полтора раза</th></tr></thead><tbody><tr><td>0,07</td><td>1</td><td>1</td><td>2</td></tr><tr><td>0,10</td><td>1</td><td>2</td><td>3</td></tr><tr><td>0,31</td><td>2</td><td>4</td><td>6</td></tr><tr><td>0,69</td><td>5</td><td>8</td><td>12</td></tr><tr><td>1,25</td><td>8</td><td>15</td><td>23</td></tr><tr><td>3,47</td><td>23</td><td>40</td><td>60</td></tr></tbody></table></div>
<p>Цифры в правой колонке объясняют, почему для съёма позиций хватает стандартного пакета. Даже ядро на 30 000 запросов с глубиной в пять страниц укладывается в шестьдесят потоков, а стандартные пакеты дают до 1000 потоков. Корпоративный вариант с лимитом до 3000 потоков берут агентства, которые ведут десятки проектов одновременно и гоняют их с нескольких машин параллельно.</p>
<p>Два момента влияют на доступную цифру. Пакеты по потокам не складываются: два стандартных пакета на одном аккаунте работают каждый со своим лимитом. И при двух привязанных адресах общий лимит делится между ними пополам, то есть пакет на 1000 потоков даёт по 500 на каждую машину. Если весь съём идёт с одного сервера, вторую привязку разумнее держать свободной до момента, когда она понадобится. Сколько адресов и потоков требует конкретная задача, подробно разобрано в заметке про <a href="/osnovy/skolko-adresov-nuzhno/">расчёт числа адресов под задачу</a>.</p>
<p>Страницы выдачи весят немного, зато их много, и при ежедневном съёме крупного ядра объём выкачки набегает приличный. Считать гигабайты при этом не нужно: у нас работают <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a>, поэтому планирование сводится к времени и потокам.</p>
<h2 id="nastroyka-key-collector-i-a-parser-pod-rabot">Настройка Key Collector и A-Parser под работу с пулом</h2>
<p>Список адресов забирается в кабинете в двух форматах на выбор: <code>IP:PORT</code> для доступа с привязанного адреса машины и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину с паролем. Получить его можно ссылкой или файлом. Для программ, которые умеют подтягивать список сами, удобнее ссылка: перед каждым запуском они читают актуальные строки без участия администратора.</p>
<pre><code># формат для машины с привязанным адресом
185.24.87.14:8000
185.24.87.15:8000

# формат с парой логина и пароля
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd</code></pre>
<h3 id="key-collector">Key Collector</h3>
<p>Поле посредника лежит в общих настройках программы, в разделе сети. Туда вставляется список целиком, по строке на адрес, тип выбирается из HTTP или SOCKS. Ниже стоит галочка, включающая работу через посредника, и она выставляется отдельно для каждого модуля: съём позиций, сбор частотности, сбор подсказок. Забытая галочка на одном из модулей даёт странную картину, когда позиции снимаются ровно, а частотность встаёт на пятой сотне запросов.</p>
<p>Дальше выставляются три числа: количество потоков, задержка между обращениями и число повторов при неудачном ответе. Программа перебирает список по кругу, поэтому длина списка влияет на разброс напрямую. Порядок заполнения полей с пояснением по каждому вынесен на страницу про <a href="https://iprazon.com/instrumenty/key-collector">настройку Key Collector под работу с пулом</a>.</p>
<p>Отдельно выставляется таймаут ответа. Значение в 20 секунд закрывает большую часть случаев: адрес, который не ответил за это время, отбрасывается, обращение уходит повторно через следующий адрес из списка. Слишком короткий таймаут превращает нормальные медленные ответы в ошибки и раздувает очередь повторов.</p>
<h3 id="a-parser">A-Parser</h3>
<p>Здесь посредник задаётся источником списка. В настройках заводится источник типа «файл» либо «адрес ссылки», указывается формат строки, включается периодическое обновление. Дальше источник назначается заданию, и все запросы задания идут через него.</p>
<pre><code># источник списка адресов
type: link
url: https://&lt;адрес выдачи из кабинета&gt;
format: ip:port:login:pass
update: 600

# параметры задания съёма
threads: 12
proxyretries: 3
requestdelay: 5000
requestdelayrandomize: 40
timeout: 20</code></pre>
<p>Поле <code>requestdelayrandomize</code> даёт разброс паузы: при базовых пяти секундах и разбросе в сорок процентов интервал гуляет от трёх до семи секунд. Такой разброс убирает главный признак программы, ровный такт обращений. Про типовые настройки прогонов написано на странице про <a href="https://iprazon.com/instrumenty/a-parser">прогоны в A-Parser через пул адресов</a>.</p>
<div class="tabl"><table><thead><tr><th>Программа</th><th>Где задаётся посредник</th><th>Формат списка</th><th>Что выставляем рядом</th></tr></thead><tbody><tr><td>Key Collector</td><td>Настройки, раздел сети, поле списка</td><td><code>IP:PORT</code> или <code>IP:PORT:LOGIN:PASS</code></td><td>Потоки, задержка, повторы, таймаут 20 с</td></tr><tr><td>Key Collector, модуль частотности</td><td>Отдельная галочка в том же разделе</td><td>Тот же список</td><td>Своя задержка, обычно вдвое длиннее</td></tr><tr><td>A-Parser</td><td>Источник списка в настройках</td><td>Строка с логином и паролем</td><td><code>threads</code>, <code>requestdelay</code>, <code>proxyretries</code></td></tr><tr><td>A-Parser, обновление списка</td><td>Ссылка на выдачу из кабинета</td><td>Ссылка, период 600 секунд</td><td>Автообновление перед каждым запуском</td></tr><tr><td>Свой скрипт</td><td>Переменные окружения или ключ клиента</td><td>Файл со строками</td><td>Случайный выбор строки на запрос</td></tr></tbody></table></div>
<p>Проверить настройку проще всего одним обращением из командной строки перед запуском задания. Ответ должен показать адрес из пула и рабочий код.</p>
<pre><code>curl -s -o /dev/null -w "%{http_code} %{time_total}\n" \
  -x http://user5521:pf39kd@185.24.87.14:8000 \
  "https://example.org/search?q=test&amp;start=0"</code></pre>
<h2 id="pauza-mezhdu-obrascheniyami-i-to-chem-ona-up">Пауза между обращениями и то, чем она управляет</h2>
<p>Пауза выставляется на поток, поэтому суммарный темп считается умножением. Двенадцать потоков с паузой в 5 секунд дают около двух обращений в секунду по заданию целиком. Администратор, который поднял потоки до сорока и оставил ту же паузу, получает почти восемь обращений в секунду и удивляется появлению страниц подтверждения.</p>
<p>Разброс паузы важнее её длины. Ровный интервал читается по логам сервера мгновенно, случайный разброс в интервале от трёх до семи секунд выглядит совершенно обычно. В Key Collector разброс задаётся диапазоном, в A-Parser полем <code>requestdelayrandomize</code>, в собственном скрипте одной строкой со случайным числом.</p>
<p>Пауза после неудачного ответа считается отдельно. Пришёл код 429, программа отступает и ждёт дольше обычного: первый повтор через 60 секунд, второй через 180, третий через 600. Дальше запрос откладывается в конец очереди и берётся в работу в самом конце прогона. Такой порядок дешевле, чем упрямый повтор через ту же паузу, который тратит потоки впустую.</p>
<div class="tabl"><table><thead><tr><th>Ответ сервера</th><th>Что делаем</th><th>Пауза до повтора</th></tr></thead><tbody><tr><td>200 с ожидаемой разметкой</td><td>Разбираем страницу, идём дальше</td><td>Базовая, 3 до 7 секунд</td></tr><tr><td>200 со страницей подтверждения</td><td>Считаем попытку неудачной, меняем адрес</td><td>60 секунд</td></tr><tr><td>302 на страницу подтверждения</td><td>То же самое, повтор через другой адрес</td><td>60 секунд</td></tr><tr><td>429 с полем <code>Retry-After</code></td><td>Берём значение из поля, если оно пришло</td><td>По полю либо 180 секунд</td></tr><tr><td>503</td><td>Откладываем запрос в конец очереди</td><td>600 секунд</td></tr><tr><td>Таймаут соединения</td><td>Меняем адрес и повторяем сразу</td><td>Без дополнительной паузы</td></tr></tbody></table></div>
<p>Доля неудачных ответов служит рабочим показателем прогона. Пока она держится в пределах пары процентов, настройки в порядке. Рост до десяти процентов означает, что темп высоковат: мы поднимаем паузу на пару секунд и снижаем потоки примерно на треть, после чего доля возвращается к норме.</p>
<h2 id="sem-po-raspisaniyu-kak-stavit-progony-i-ne-s">Съём по расписанию: как ставить прогоны и не собирать отказы</h2>
<p>Регулярный съём удобно ставить в ночное окно. Целевые страницы отдаются быстрее, конкуренции за канал меньше, а к утру отчёт готов. Запуск ставится системным планировщиком: <code>cron</code> на Linux, планировщик заданий на Windows, встроенный планировщик самой программы там, где он есть.</p>
<pre><code># обновление списка адресов и запуск съёма в 02:40 по будням
40 2 * * 1-5 curl -s "https://&lt;адрес выдачи из кабинета&gt;" -o /opt/rank/proxies.txt \
  &amp;&amp; /opt/rank/run-positions.sh --project main --depth 3 --threads 12

# проект помельче стартует на сорок минут позже, чтобы окна не накладывались
20 3 * * 1-5 /opt/rank/run-positions.sh --project shop --depth 1 --threads 6</code></pre>
<p>Первое правило расписания: список обновляется перед каждым стартом. Ротация внутри пула автоматическая, состав меняется, и файл, сохранённый неделю назад, даст часть неотвечающих строк и лишние повторы. Одна строка с <code>curl</code> перед запуском закрывает вопрос навсегда.</p>
<p>Второе правило: прогоны разных проектов разносятся по времени. Три задания, стартующие в одну минуту, складывают свои потоки и суммарный темп, и картина по каждому портится сразу. Сорок минут между стартами обычно достаточно.</p>
<p>Третье правило: неудачные запросы уходят в отдельную очередь и добираются в конце прогона, когда основная масса уже собрана. Мы держим для этого отдельный файл с недобранными ключами, и последним шагом скрипт проходит по нему одним потоком с длинной паузой. Обычно там остаётся меньше процента строк.</p>
<p>Четвёртое правило: результат прогона пишется в лог со сводкой. Число ключей, число обращений, доля неудач, среднее время отклика, общая длительность. Через месяц такой лог показывает, как менялось поведение целевых страниц, и сдвиг видно раньше, чем он превратится в сорванный съём.</p>
<h2 id="podskazki-i-chastotnost-otdelnye-ocheredi-so">Подсказки и частотность: отдельные очереди со своим темпом</h2>
<p>Поисковые подсказки собираются с отдельной точки, которая отвечает коротким списком строк. Отвечает она быстро, зато порог по частоте у неё жёстче обычной выдачи. Мы гоняем подсказки отдельным заданием с паузой около двух секунд и небольшим числом потоков, обычно от четырёх до восьми. Сбор подсказок по ядру в тысячу запросов при таких настройках занимает около получаса.</p>
<p>Частотность собирается через сервис статистики, и там работа идёт под учётной записью. Обращения авторизованы, поэтому темп берётся заметно спокойнее: пауза от пяти до десяти секунд, потоков немного. Всё держится на постоянстве: обращения одной учётной записи разумно вести ровным темпом, без резких всплесков. Формат доступа по логину с паролем подходит для этого лучше всего, потому что не привязывает работу к адресу конкретной машины.</p>
<div class="tabl"><table><thead><tr><th>Тип сбора</th><th>Потоков</th><th>Пауза</th><th>Что учитываем</th></tr></thead><tbody><tr><td>Позиции по выдаче</td><td>По расчёту нагрузки</td><td>3 до 7 секунд</td><td>Глубина множит объём</td></tr><tr><td>Подсказки</td><td>4 до 8</td><td>Около 2 секунд</td><td>Порог по частоте жёстче</td></tr><tr><td>Частотность через сервис статистики</td><td>2 до 4</td><td>5 до 10 секунд</td><td>Работа под учётной записью</td></tr><tr><td>Проверка индексации страниц</td><td>4 до 10</td><td>3 до 5 секунд</td><td>Запросов мало, повторов много</td></tr></tbody></table></div>
<p>Три очереди удобно разносить по времени суток. Позиции ночью, подсказки утром, частотность днём. Тогда суммарный темп по всем заданиям остаётся ровным и ни одна очередь не мешает другой. Все три модуля живут в одной программе, и то, как <a href="https://iprazon.com/instrumenty/key-collector">работает Key Collector через пул адресов</a>, расписано по каждому из них отдельно.</p>
<h2 id="raznye-yazyki-interfeysa-kak-proveryat-vydac">Разные языки интерфейса: как проверять выдачу корректно</h2>
<p>Страница выдачи отдаётся с учётом языка интерфейса, и один и тот же запрос при разных языках приходит с разной разметкой и разным порядком блоков. Для проектов с несколькими языковыми версиями это означает отдельный прогон на каждый язык.</p>
<p>Язык задаётся двумя способами сразу, и они должны совпадать. Первый: параметр языка интерфейса в адресе запроса. Второй: заголовок <code>Accept-Language</code> в самом обращении. Расхождение между ними даёт смешанную выдачу, которую потом невозможно сверить с предыдущим съёмом.</p>
<pre><code># английский интерфейс
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 \
  -H "Accept-Language: en-US,en;q=0.9" \
  "https://example.org/search?q=proxy+setup&amp;hl=en"

# русский интерфейс, тот же запрос
curl -s -x http://user5521:pf39kd@185.24.87.14:8000 \
  -H "Accept-Language: ru-RU,ru;q=0.9" \
  "https://example.org/search?q=настройка+прокси&amp;hl=ru"</code></pre>
<p>В Key Collector язык интерфейса выставляется в настройках модуля позиций, в A-Parser передаётся в параметрах запроса и в списке заголовков задания. В обоих случаях мы заводим отдельный профиль настроек на каждый язык и храним результаты в отдельных таблицах.</p>
<p>Пул у нас представляет микс со всего мира, выборка по отдельной стране не делается, и для съёма это удобно: разнообразие подсетей получается само собой, а язык интерфейса управляется параметрами запроса и заголовком. Настройка одна на весь прогон, менять её от адреса к адресу не требуется.</p>
<h2 id="hranenie-rezultatov-i-sverka-mezhdu-semami">Хранение результатов и сверка между съёмами</h2>
<p>Позиции хранятся построчно, одна строка на сочетание даты, запроса и языка интерфейса. Минимальный набор полей: дата съёма, текст запроса, язык интерфейса, найденный адрес страницы, номер позиции, номер страницы выдачи, признак успешного разбора. По такому набору любые два съёма сравниваются без пересбора.</p>
<pre><code>CREATE TABLE positions (
  snap_date   DATE    NOT NULL,
  query       TEXT    NOT NULL,
  ui_lang     TEXT    NOT NULL,
  page_url    TEXT,
  pos         INTEGER,
  serp_page   INTEGER,
  ok          INTEGER NOT NULL DEFAULT 1,
  PRIMARY KEY (snap_date, query, ui_lang)
);

-- движение позиций между двумя последними съёмами
SELECT a.query, b.pos AS was, a.pos AS now, b.pos - a.pos AS delta
FROM positions a
JOIN positions b
  ON a.query = b.query AND a.ui_lang = b.ui_lang
WHERE a.snap_date = '&lt;новая дата&gt;'
  AND b.snap_date = '&lt;предыдущая дата&gt;'
  AND a.ok = 1 AND b.ok = 1
ORDER BY delta;</code></pre>
<p>Поле <code>ok</code> важнее, чем кажется. Запрос, по которому страница выдачи не разобралась, отличается от запроса, по которому сайт действительно выпал из выдачи. Без такого признака оба случая пишутся одинаково, и отчёт показывает провал там, где произошёл сбой сбора. Мы ставим <code>ok</code> в ноль на любом неудачном обращении и в отчёте эти строки выносим отдельной сводкой.</p>
<p>Сверка идёт по трём величинам. Движение позиций по каждому запросу. Доля запросов, по которым сайт нашёлся в заданной глубине. Доля неудачных обращений за прогон. Если третья величина скакнула, первые две за этот съём читать бессмысленно: сравнивать нужно съёмы с сопоставимым качеством сбора.</p>
<p>Сырые страницы выдачи хранить целиком редко требуется. Достаточно сохранять адрес найденной страницы и её позицию. Исключение делаем для спорных случаев: когда позиция резко изменилась, полезно иметь сохранённый ответ, чтобы посмотреть, что стояло вокруг. Для этого мы держим папку с ответами за последние семь съёмов и старые удаляем автоматически.</p>
<p>Хранилище выбирается по объёму. До сотни тысяч строк за съём хватает файла SQLite на рабочей машине. Дальше удобнее база на сервере, к которой отчёты обращаются напрямую. В обоих случаях структура таблицы остаётся той же самой, меняется только место хранения.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-sem-poziciy-po-moey-s">Подойдут ли прокси под съём позиций по моей семантике?</h3>
<p>Заранее предугадать поведение каждой целевой площадки нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Двух часов достаточно, чтобы прогнать пару сотен запросов на реальных настройках Key Collector или A-Parser, замерить время отклика и долю неудачных ответов, а потом взять пакет по посчитанным цифрам.</p>
<h3 id="est-li-ogranicheniya-po-chislu-potokov">Есть ли ограничения по числу потоков?</h3>
<p>У каждого пакета свой лимит: стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Пакеты по потокам не складываются. При двух привязанных адресах общее число потоков делится между ними пополам. Для съёма позиций эти величины с большим запасом покрывают расчёт даже по крупному ядру. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения, поэтому темп мы держим в пределах посчитанного.</p>
<h3 id="mozhno-li-otobrat-adresa-pod-konkretnuyu-str">Можно ли отобрать адреса под конкретную страну?</h3>
<p>Нет, наш пул представляет микс со всего мира, выборка по отдельной стране не делается. Для съёма позиций это работает в плюс: обращения расходятся по разным подсетям, а язык интерфейса выдачи задаётся параметром запроса и заголовком <code>Accept-Language</code>, что мы и настраиваем в программе.</p>
<h3 id="kak-chasto-obnovlyaetsya-spisok-adresov">Как часто обновляется список адресов?</h3>
<p>Список обновляется в режиме реального времени, забрать его можно ссылкой или файлом в двух форматах, <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Для съёма по расписанию удобнее ссылка: скрипт перечитывает её перед каждым стартом и работает с актуальным составом пула. Сам пакет после оплаты включается примерно за 5 минут, и оформить <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу адресов IPv4</a> можно там же, в кабинете.</p>
<p>Соседние задачи разобраны отдельно: <a href="/zadachi/socseti-i-smm/">работа с соцсетями и отложенным постингом</a> для тех, кто ведёт несколько профилей, <a href="/zadachi/internet-magazin/">сбор прайсов и остатков для интернет-магазина</a> с расчётом окна выгрузки, <a href="/zadachi/neskolko-kabinetov/">несколько рекламных кабинетов одной компании</a> с разведением по адресам. Состав пакета по потокам, привязкам и трафику расписан в материале про то, <a href="/pokupka/chto-vhodit-v-paket/">что входит в пакет</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/zadachi/seo-pozicii/">https://kupit-proxy-ipv4.ru/zadachi/seo-pozicii/</a></p>]]></content:encoded></item>
<item><title>Прокси для соцсетей и отложенного постинга: профили антидетект-браузера и адреса</title><link>https://kupit-proxy-ipv4.ru/zadachi/socseti-i-smm/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/zadachi/socseti-i-smm/</guid><description>Для работы с несколькими учётными записями площадке важен согласованный набор признаков, и адрес занимает в нём одну строку из полутора десятков. Отпечаток…</description><content:encoded><![CDATA[
<p class="vvod">Для работы с несколькими учётными записями площадке важен согласованный набор признаков, и адрес занимает в нём одну строку из полутора десятков. Отпечаток браузера, часовой пояс, язык интерфейса, поведение WebRTC и то, откуда уходят запросы к службе имён, читаются вместе, и расхождение между ними заметно сильнее, чем повтор одного адреса. Рабочая схема выглядит так: отдельный профиль антидетект-браузера, отдельная строка из списка адресов, согласованные между собой настройки внутри профиля.</p>
<p>Дальше разобрано, из чего складывается этот набор признаков, как раскладывать профили по адресам, почему адрес не меняется посреди сессии, как заполняется профиль в Dolphin и его аналогах, где лежит поле посредника в сервисах отложенной публикации, что проверять перед первым заходом и какие ошибки повторяются чаще всего.</p>
<h2 id="iz-chego-skladyvaetsya-nabor-priznakov-profi">Из чего складывается набор признаков профиля</h2>
<p>Площадка собирает признаки на трёх уровнях сразу. Сетевой уровень: внешний адрес, подсеть, набор служебных заголовков запроса, отпечаток рукопожатия TLS. Браузерный уровень: строка User-Agent, платформа, разрешение экрана и глубина цвета, список установленных шрифтов, отрисовка через canvas и WebGL, параметры аудио-контекста, число ядер процессора, объём памяти. Поведенческий уровень: время суток захода, скорость набора текста, характер прокрутки, интервалы между действиями.</p>
<p>Значение имеет согласованность внутри набора. Профиль, который сообщает платформу Windows и одновременно отдаёт отрисовку WebGL от видеоядра Apple, выглядит противоречиво при любом адресе. Профиль с языком интерфейса на одном языке, заголовком <code>Accept-Language</code> на другом и часовым поясом, взятым откуда-то третьим, тоже разъезжается. Мы поэтому начинаем настройку с внутренней согласованности профиля и только потом подключаем адрес.</p>
<div class="tabl"><table><thead><tr><th>Уровень</th><th>Что читается</th><th>Чем управляем</th></tr></thead><tbody><tr><td>Сетевой</td><td>Внешний адрес, подсеть, служебные заголовки</td><td>Строка из списка адресов, протокол HTTP или SOCKS5</td></tr><tr><td>Сетевой</td><td>Откуда уходят запросы к службе имён</td><td>Разбор имён на стороне посредника</td></tr><tr><td>Браузерный</td><td>User-Agent, платформа, разрешение, шрифты</td><td>Настройки профиля антидетект-браузера</td></tr><tr><td>Браузерный</td><td>Canvas, WebGL, аудио-контекст</td><td>Режим подмешивания шума в профиле</td></tr><tr><td>Браузерный</td><td>Часовой пояс, язык, <code>Accept-Language</code></td><td>Автоопределение по внешнему адресу</td></tr><tr><td>Браузерный</td><td>WebRTC</td><td>Режим подмены на внешний адрес</td></tr><tr><td>Поведенческий</td><td>Ритм действий, время захода</td><td>Расписание работы и прогрев профиля</td></tr></tbody></table></div>
<p>Поведенческий уровень мы обычно оставляем людям, при этом одну вещь настраиваем осознанно: ритм работы с профилем. Учётная запись, которая молчит весь день и потом за десять минут выдаёт двадцать действий, читается по логам площадки не хуже совпадающих отпечатков. Прогрев на первой неделе мы держим коротким: по десять минут в день, заход, просмотр ленты, пара подписок, выход. Дальше профиль переходит в рабочий режим и живёт обычным расписанием проекта.</p>
<p>Служебные заголовки стоят отдельным пунктом. Посредник, который добавляет к запросу поля вроде <code>Via</code>, <code>X-Forwarded-For</code> или <code>Proxy-Connection</code>, сообщает о себе прямо. Приватные серверные адреса такие поля не добавляют, и запрос доходит до площадки в том виде, в котором его собрал браузер. Подробный разбор всего, что уходит на сторону площадки, собран в материале про <a href="/osnovy/chto-vidit-sayt/">то, что сайт видит о посетителе</a>.</p>
<h2 id="svyazka-profil-plyus-svoya-stroka-adresa">Связка «профиль плюс своя строка адреса»</h2>
<p>Единица работы здесь одна: профиль антидетект-браузера вместе с назначенной ему строкой из списка. Профиль хранит куки, локальное хранилище, историю и весь набор отпечатков. Строка задаёт, откуда уходят запросы. Пара живёт вместе от создания профиля до конца работы с ним.</p>
<p>Список адресов забирается в кабинете в двух форматах: <code>IP:PORT</code> для машины с привязанным адресом и <code>IP:PORT:LOGIN:PASS</code> для доступа по логину с паролем. Для профилей антидетект-браузера чаще берут второй формат: он переносится вместе с профилем на другую машину и работает там без правки настроек привязки.</p>
<pre><code># строки для назначения профилям
185.24.87.14:8000:user5521:pf39kd
185.24.87.15:8000:user5521:pf39kd
185.24.87.16:8000:user5521:pf39kd

# та же строка в записи, которую понимает большинство браузеров
socks5://user5521:pf39kd@185.24.87.16:8000</code></pre>
<p>Порядок назначения простой. Создали профиль, сразу задали ему строку, сохранили, проверили внешний адрес встроенной кнопкой. Только после этого профиль первый раз идёт на площадку. Профиль, который успел один раз зайти напрямую, дальше несёт этот след в куках и в истории, и переназначение адреса задним числом картину уже не переписывает.</p>
<p>Протокол берётся по возможностям браузера. HTTP и HTTPS понимают все, SOCKS5 поддерживают почти все и он предпочтительнее: имена разбираются на стороне выхода, поэтому запросы к службе имён не уходят мимо посредника. В пакете доступны SOCKS4 и SOCKS5 на выбор, и работу профилей удобно строить на <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для антидетект-браузеров</a>.</p>
<h2 id="kak-raskladyvat-profili-po-adresam">Как раскладывать профили по адресам</h2>
<p>Базовое правило мы формулируем коротко: один рабочий профиль, одна строка списка. Наш пул держит около 12 000 активных адресов, состав обновляется в реальном времени, поэтому строк хватает даже под крупную сетку профилей.</p>
<p>Родственные профили допускают исключение. Личная страница человека и страница бренда, которую он же ведёт, связаны и в жизни, поэтому один адрес на два таких профиля выглядит естественно. То же касается основного профиля и профиля для просмотра статистики того же проекта. Больше трёх связанных профилей на одну строку сводить не стоит.</p>
<div class="tabl"><table><thead><tr><th>Сценарий</th><th>Профилей</th><th>Строк адресов</th><th>Комментарий</th></tr></thead><tbody><tr><td>Один бренд, одна площадка</td><td>1</td><td>1</td><td>Простейший случай, пара живёт неизменной</td></tr><tr><td>Бренд плюс личная страница ведущего</td><td>2</td><td>1</td><td>Связь очевидна и площадке, и людям</td></tr><tr><td>Пять брендов одного агентства</td><td>5</td><td>5</td><td>Пересечений между клиентами не делаем</td></tr><tr><td>Сетка из тридцати профилей</td><td>30</td><td>30</td><td>Разброс по подсетям идёт из состава пула</td></tr><tr><td>Профили разных сотрудников</td><td>По числу людей</td><td>По числу людей</td><td>Каждый работает со своей парой</td></tr><tr><td>Тестовый профиль для проверок</td><td>1</td><td>1</td><td>Держим отдельно от рабочих</td></tr></tbody></table></div>
<p>Профили сотрудников мы разводим по строкам всегда, даже когда люди ведут один проект. Причина практическая: сотрудники работают из разных мест и в разное время, и общая точка входа для двух разных ритмов работы выглядит противоречиво. Отдельная строка на человека снимает вопрос и заодно упрощает передачу дел, когда профиль переходит к другому специалисту.</p>
<p>Раскладка записывается в таблицу и хранится рядом с рабочими файлами. Поля минимальные: имя профиля, площадка, строка адреса, дата создания, ответственный. Через месяц работы сетка на два десятка профилей уже не держится в памяти, и таблица снимает вопрос «какой адрес был у этого профиля» за секунду.</p>
<p>Нагрузка по потокам здесь маленькая. Тридцать профилей, работающих одновременно, дают несколько десятков соединений, а стандартные пакеты рассчитаны до 1000 потоков. При двух привязанных адресах общий лимит делится между ними пополам, поэтому для работы с одной машины вторую привязку разумнее держать свободной. Условия по числу профилей и параллельной работе описаны на странице про <a href="https://iprazon.com/proxy/privatnye">приватные серверные адреса для команды</a>.</p>
<h2 id="pochemu-adres-ne-menyaetsya-posredi-sessii">Почему адрес не меняется посреди сессии</h2>
<p>Сессия на площадке живёт куками и токеном, привязанным к устройству. Площадка сверяет их с тем, откуда пришёл запрос. Резкая смена внешнего адреса в середине активной сессии выглядит подозрительно, и типовая реакция площадки на это предсказуема: повторный запрос подтверждения, иногда выход из учётной записи.</p>
<p>Схема работы с пулом это учитывает. Из списка берётся конкретная строка, она прописывается в профиль и держится там весь рабочий заход. Ротация внутри пула автоматическая, состав меняется, при этом соединение, открытое через выбранную строку, работает всё время сессии. Мы перечитываем список перед началом рабочего дня и в этот момент, если нужно, обновляем строки в профилях: замена делается между сессиями, при закрытом браузере.</p>
<p>Практический порядок выглядит так. Утром скрипт тянет актуальный список ссылкой из кабинета. Раскладка сверяется: строки, пропавшие из списка, заменяются на новые, остальные профили остаются со своими. Дальше рабочий день идёт без правок настроек. Вечером профили закрываются, и следующая сверка проходит уже завтра.</p>
<pre><code># утренняя сверка: тянем актуальный список и сравниваем с раскладкой
curl -s "https://&lt;адрес выдачи из кабинета&gt;" -o /opt/smm/proxies.txt
comm -23 &lt;(cut -d: -f1,2 /opt/smm/profiles.csv | sort) \
         &lt;(cut -d: -f1,2 /opt/smm/proxies.txt | sort)
# вывод показывает строки, которых в актуальном списке уже нет</code></pre>
<h2 id="nastroyka-profilya-v-dolphin-po-shagam">Настройка профиля в Dolphin по шагам</h2>
<p>Dolphin построен вокруг карточки профиля, и все нужные поля лежат в ней. Порядок заполнения такой.</p>
<p>Шаг первый: создание. Кнопка нового браузера, имя профиля, тег или папка. Имя лучше делать говорящим: площадка, проект, порядковый номер. Через полсотни профилей имена вида «профиль 12» перестают что-либо означать.</p>
<p>Шаг второй: вкладка прокси. Выбирается тип, HTTP или SOCKS5, дальше заполняются четыре поля: адрес узла, порт, логин, пароль. Строку из списка можно вставить целиком, программа разберёт её по полям сама. Рядом стоит кнопка проверки, и она отрабатывает до сохранения профиля: показывает внешний адрес, время отклика и часовой пояс, который площадка увидит.</p>
<p>Шаг третий: основные параметры. Платформа, версия браузерного движка, User-Agent. Разрешение экрана и глубина цвета. Здесь достаточно взять предложенный набор: он собран согласованно и внутренних противоречий не содержит.</p>
<p>Шаг четвёртый: часовой пояс и язык. Оба поля переводятся в режим определения по внешнему адресу. Тогда профиль сам подставит пояс и язык интерфейса, согласованные с тем, откуда идут запросы, и заголовок <code>Accept-Language</code> соберётся под них же.</p>
<p>Шаг пятый: WebRTC. Режим подмены, при котором наружу отдаётся внешний адрес соединения. Отключение WebRTC целиком тоже работает, при этом заметно само по себе: браузер без WebRTC встречается редко. Подробности по этому каналу собраны в заметке про <a href="/proverka/webrtc/">проверку и отключение WebRTC</a>.</p>
<p>Шаг шестой: canvas, WebGL и аудио-контекст. Режим подмешивания шума, стабильного для конкретного профиля. Важно, чтобы шум был постоянным между запусками: профиль, который каждый раз отдаёт новый отпечаток отрисовки, выглядит страннее профиля с одним и тем же.</p>
<p>Шаг седьмой: сохранение и первый запуск. Профиль открывается, первым делом проверяется внешний адрес и согласованность настроек, и только потом идёт заход на площадку. Пошаговый разбор полей с картинками интерфейса лежит на странице про <a href="https://iprazon.com/instrumenty/dolphin">настройку Dolphin для работы с профилями</a>.</p>
<div class="tabl"><table><thead><tr><th>Что настраиваем</th><th>Где в профиле</th><th>Что ставим</th></tr></thead><tbody><tr><td>Тип посредника</td><td>Вкладка прокси</td><td>SOCKS5 при поддержке браузером</td></tr><tr><td>Адрес и порт</td><td>Вкладка прокси</td><td>Строка из списка кабинета</td></tr><tr><td>Логин и пароль</td><td>Вкладка прокси</td><td>Пара из формата <code>IP:PORT:LOGIN:PASS</code></td></tr><tr><td>Платформа и User-Agent</td><td>Основные параметры</td><td>Предложенный согласованный набор</td></tr><tr><td>Часовой пояс</td><td>Отдельное поле</td><td>Определение по внешнему адресу</td></tr><tr><td>Язык интерфейса</td><td>Отдельное поле</td><td>Определение по внешнему адресу</td></tr><tr><td>WebRTC</td><td>Раздел приватности</td><td>Подмена на внешний адрес</td></tr><tr><td>Canvas и WebGL</td><td>Раздел отпечатков</td><td>Шум, стабильный для профиля</td></tr><tr><td>Служба имён</td><td>Следствие протокола</td><td>Разбор имён на стороне выхода</td></tr></tbody></table></div>
<h2 id="drugie-antidetekt-brauzery-te-zhe-polya-pod-">Другие антидетект-браузеры: те же поля под другими именами</h2>
<p>Octo Browser, AdsPower, GoLogin, Undetectable и Multilogin устроены изнутри одинаково. Отличаются названия разделов и расположение кнопок, набор полей повторяется. Везде есть карточка профиля с блоком посредника, везде принимаются HTTP, HTTPS и SOCKS5, везде можно завести общий список адресов и назначать строки профилям пачкой.</p>
<p>Пара мелочей отличается от браузера к браузеру, и мы их проверяем при переезде сетки. Первая: разбор вставленной строки. Часть программ понимает запись <code>IP:PORT:LOGIN:PASS</code> целиком, часть требует четыре отдельных поля, и склеенная строка в поле узла даёт ошибку подключения без внятного текста. Вторая: поведение встроенной кнопки проверки. У одних браузеров она ходит через настройки профиля целиком, у других мимо них, и тогда показанный адрес говорит лишь о доступности узла.</p>
<p>Массовое назначение стоит отдельного внимания. Список загружается один раз, дальше программа раздаёт строки профилям по порядку либо по указанному соответствию. Раздача «по порядку» удобна при первичной сборке сетки, при этом соответствие всё равно выгружается в таблицу и хранится: без него восстановить пары после переустановки будет долго.</p>
<p>Общий подход к работе через антидетект-браузеры, включая совместимость протоколов и формат строк, разобран на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси для антидетект-браузеров</a>.</p>
<h2 id="servisy-otlozhennoy-publikacii-i-pole-posred">Сервисы отложенной публикации и поле посредника</h2>
<p>Отложенный постинг работает двумя способами. Первый: сервис подключается к площадке официальным способом через выданный доступ, публикует по расписанию со своей стороны, и запросы идут с адресов самого сервиса. Второй: публикация идёт из браузерного профиля, вручную или скриптом, и тогда работает адрес профиля.</p>
<p>У части сервисов поле посредника есть прямо в карточке подключаемой учётной записи: там задаются узел, порт, логин и пароль, и все обращения к площадке по этой записи идут через него. У части поля нет, и тогда учётная запись добавляется в сервис из браузерного профиля, а дальше публикации уходят со стороны сервиса.</p>
<div class="tabl"><table><thead><tr><th>Способ публикации</th><th>Где задаётся адрес</th><th>Что учитываем</th></tr></thead><tbody><tr><td>Сервис с полем посредника в карточке записи</td><td>Настройки подключённой записи</td><td>Строка та же, что у профиля браузера</td></tr><tr><td>Сервис без поля посредника</td><td>Адрес не задаётся</td><td>Добавление записи делаем из профиля</td></tr><tr><td>Публикация вручную из профиля</td><td>Профиль антидетект-браузера</td><td>Адрес профиля неизменен весь заход</td></tr><tr><td>Свой скрипт по программному доступу</td><td>Переменные окружения</td><td><code>HTTPS_PROXY</code> со строкой профиля</td></tr><tr><td>Планировщик на своём сервере</td><td>Настройки задания</td><td>Одна строка на одну учётную запись</td></tr></tbody></table></div>
<p>Для собственных скриптов достаточно переменных окружения либо параметра клиента.</p>
<pre><code># запуск скрипта публикации через строку профиля
export HTTPS_PROXY="socks5h://user5521:pf39kd@185.24.87.16:8000"
export HTTP_PROXY="$HTTPS_PROXY"
python3 /opt/smm/publish.py --account brand_main --queue morning

# та же проверка одним запросом до запуска очереди
curl -s -x "$HTTPS_PROXY" https://ifconfig.me</code></pre>
<p>Расписание публикаций мы тоже разносим. Пять профилей, публикующих в одну минуту по одинаковому шаблону, дают заметный след даже при разных адресах. Разброс в пятнадцать двадцать минут между постами и небольшая разница в оформлении убирают этот эффект целиком, а сервисы отложенной публикации такой разброс задают прямо в очереди.</p>
<p>Запись <code>socks5h</code> вместо <code>socks5</code> включает разбор имён на стороне выхода. Разница в одной букве, влияние на картину заметное: без неё имена разбираются локально и запросы к службе имён уходят от машины напрямую.</p>
<h2 id="chto-proveryat-pered-pervym-zahodom-v-profil">Что проверять перед первым заходом в профиль</h2>
<p>Проверка занимает пару минут и делается один раз на профиль. Порядок ниже отработан на сетках разного размера и закрывает основные расхождения.</p>
<div class="tabl"><table><thead><tr><th>Шаг</th><th>Что смотрим</th><th>Признак готовности</th></tr></thead><tbody><tr><td>1</td><td>Внешний адрес</td><td>Совпадает со строкой, назначенной профилю</td></tr><tr><td>2</td><td>Служебные заголовки</td><td>Полей <code>Via</code>, <code>X-Forwarded-For</code>, <code>Proxy-Connection</code> нет</td></tr><tr><td>3</td><td>WebRTC</td><td>Наружу уходит внешний адрес соединения</td></tr><tr><td>4</td><td>Запросы к службе имён</td><td>Разбор идёт со стороны посредника</td></tr><tr><td>5</td><td>Часовой пояс</td><td>Согласован с тем, что отдаёт внешний адрес</td></tr><tr><td>6</td><td>Язык и <code>Accept-Language</code></td><td>Совпадают между собой и с языком интерфейса</td></tr><tr><td>7</td><td>Отпечаток отрисовки</td><td>Одинаков при двух запусках профиля</td></tr><tr><td>8</td><td>Время отклика</td><td>Стабильно от запроса к запросу</td></tr></tbody></table></div>
<p>Шаги с пятого по седьмой удобно закрывать прямо в консоли открытого профиля.</p>
<pre><code>// язык, набор языков и часовой пояс профиля
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);</code></pre>
<p>Первый шаг мы делаем сервисом, который возвращает адрес обращения, и сверяем показанное значение со строкой из раскладки посимвольно. Второй шаг закрывается страницей проверки заголовков: смотрим весь список полей, которые дошли до приёмника, и убеждаемся, что служебных среди них нет. Такое поведение держат <a href="https://iprazon.com/proxy/anonimnye">анонимные прокси без служебных заголовков</a>, и проверка на них проходит одинаково для любой строки из списка. Третий и четвёртый шаги делаются проверочными страницами по WebRTC и по службе имён, они есть в открытом доступе и работают внутри профиля без установки чего-либо.</p>
<p>Отдельно держим тестовый профиль. Он создаётся с теми же настройками, что и рабочие, и служит для проверок нового браузера, новой версии программы или новой строки списка. Ошибка, найденная на тестовом профиле, стоит десять минут работы, та же ошибка на рабочем профиле стоит истории учётной записи.</p>
<p>Результат проверки записывается в ту же таблицу раскладки, отдельной колонкой с датой. Профиль, прошедший проверку, дальше открывается без повторных сверок до момента, когда его строка адреса меняется.</p>
<h2 id="oshibki-kotorye-povtoryayutsya-chasche-vsego">Ошибки, которые повторяются чаще всего</h2>
<p>Первая по частоте: один адрес на десяток профилей. Площадка видит десять учётных записей, приходящих с одной точки, и связывает их между собой. Раскладка «одна строка на профиль» устраняет причину полностью, а строк в пуле на 12 000 адресов хватает с запасом. Требования браузеров к посреднику и совместимость по протоколам собраны на странице про <a href="https://iprazon.com/instrumenty/antidetekt">прокси под многоаккаунтинг и профили</a>.</p>
<p>Вторая: разъезд часового пояса и языка. Профиль сообщает один часовой пояс, заголовок <code>Accept-Language</code> говорит про другой язык, интерфейс площадки открыт на третьем. Режим определения по внешнему адресу закрывает все три поля разом, поэтому мы включаем его всегда.</p>
<p>Третья: включение и выключение посредника посреди сессии. Человек открыл профиль, начал работу, увидел медленный отклик, снял галочку и продолжил. Сессия при этом продолжается уже с адреса рабочей машины, и связь между профилем и этой машиной остаётся в логах площадки навсегда. Правило простое: настройки адреса меняются при закрытом профиле.</p>
<p>Четвёртая: копирование готового профиля вместе с отпечатком. Клонированные профили отличаются только именем и куками, отпечаток отрисовки у них совпадает до символа. Новый профиль создаётся с нуля, копируется только раскладка полей на бумаге.</p>
<p>Пятая: работа из-под профиля до проверки. Первый заход дороже всех последующих, потому что именно он формирует историю учётной записи. Проверка перед первым заходом занимает две минуты, разбор последствий пропущенной проверки занимает несколько дней.</p>
<div class="tabl"><table><thead><tr><th>Ошибка</th><th>Что видно на площадке</th><th>Как устраняем</th></tr></thead><tbody><tr><td>Один адрес на десяток профилей</td><td>Записи связываются между собой</td><td>Одна строка списка на профиль</td></tr><tr><td>Часовой пояс и язык разъехались</td><td>Повторные запросы подтверждения</td><td>Определение обоих полей по адресу</td></tr><tr><td>Посредник включён посреди сессии</td><td>Смена точки входа в активной сессии</td><td>Правки только при закрытом профиле</td></tr><tr><td>Профиль скопирован целиком</td><td>Совпадающий отпечаток отрисовки</td><td>Создание профиля с нуля</td></tr><tr><td>Первый заход без проверки</td><td>Расхождение признаков с самого начала</td><td>Восемь шагов проверки до захода</td></tr><tr><td>Строка меняется каждый день</td><td>Постоянная смена точки входа</td><td>Замена строки по факту, между сессиями</td></tr></tbody></table></div>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-rabotu-s-moimi-profil">Подойдут ли прокси под работу с моими профилями?</h3>
<p>Заранее предугадать поведение каждой площадки и каждого браузера нельзя, поэтому перед покупкой доступен бесплатный тест до 2 часов под ваш запрос. Двух часов достаточно, чтобы собрать пару профилей в Dolphin или другом браузере, назначить им строки, пройти все восемь шагов проверки и посмотреть отклик на своих площадках.</p>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость входит одновременная привязка 2 адресов, менять их разрешено без ограничений прямо в настройках кабинета. При двух привязанных адресах общее число потоков делится между ними пополам. Для работы с профилями чаще берут формат с логином и паролем: он переносится вместе с профилем на другую машину и от привязки не зависит.</p>
<h3 id="mozhno-li-otobrat-adresa-pod-konkretnuyu-str">Можно ли отобрать адреса под конкретную страну?</h3>
<p>Нет, наш пул представляет микс со всего мира, выборка по отдельной стране не делается. Для сетки профилей это работает в плюс: строки приходят из разных подсетей сами по себе, а часовой пояс и язык профиль подставляет по внешнему адресу автоматически.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-adresov">В каком формате выдаётся список адресов?</h3>
<p>Форматов два на выбор: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Забрать список можно ссылкой или файлом прямо в кабинете, обновляется он в режиме реального времени. Пакет после оплаты включается примерно за 5 минут, и назначать строки профилям можно сразу.</p>
<p>Соседние задачи вынесены отдельно: <a href="/zadachi/neskolko-kabinetov/">несколько рекламных кабинетов одной компании</a> с раскладкой по сотрудникам, <a href="/zadachi/seo-pozicii/">съём позиций и работа с выдачей</a> с расчётом нагрузки под семантику, <a href="/zadachi/internet-magazin/">сбор прайсов и остатков для интернет-магазина</a> с окном выгрузки. Как поднять посредника в обычном браузере без антидетекта, расписано в материале про <a href="/podklyuchenie/v-brauzere/">подключение прокси в браузере</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/zadachi/socseti-i-smm/">https://kupit-proxy-ipv4.ru/zadachi/socseti-i-smm/</a></p>]]></content:encoded></item>
<item><title>Прокси для интернет-магазина: прайсы поставщиков, остатки и наполнение карточек</title><link>https://kupit-proxy-ipv4.ru/zadachi/internet-magazin/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/zadachi/internet-magazin/</guid><description>Интернет-магазин подключает прокси там, где надо каждый день читать чужие страницы пачками: прайсы поставщиков, остатки на их складах, ассортимент соседей по…</description><content:encoded><![CDATA[
<p class="vvod">Интернет-магазин подключает прокси там, где надо каждый день читать чужие страницы пачками: прайсы поставщиков, остатки на их складах, ассортимент соседей по нише и собственные карточки глазами покупателя. Пул примерно из 12 000 адресов с автоматической ротацией внутри пула и безлимитным трафиком закрывает ежедневный прогон по каталогу любого размера, а число потоков считается от количества карточек и длины окна, которое отведено под обход.</p>
<p>Дальше по порядку: какие пять задач магазин закрывает через посредник, как посчитать нагрузку под свой каталог, как устроен суточный прогон с расписанием и повторами, как сверять полученные цифры между прогонами и вовремя ловить сбои разбора. Отдельно про площадки поставщиков с личными кабинетами и про обновление списка адресов перед стартом.</p>
<h2 id="chto-magazin-sobiraet-cherez-posrednik-kazhd">Что магазин собирает через посредник каждый день</h2>
<p>Задач обычно пять, и все они сводятся к чтению большого числа чужих страниц с сохранением результата в свою базу.</p>
<p>Первая: прайсы поставщиков. Прайс лежит на сайте поставщика или внутри его личного кабинета, обновляется по своему графику, и магазину нужна свежая цифра к утру, до того как менеджеры начнут принимать заказы. Вторая: остатки. Позиция числится в наличии в вашем каталоге и отсутствует у поставщика, заказ уходит в отмену, поэтому сверка остатков идёт чаще, чем полный обход прайсов.</p>
<p>Третья: наблюдение за ассортиментом. Смотрим, какие позиции появились у поставщиков и соседей по нише, какие ушли из выдачи, где сменилась комплектация или упаковка. Четвёртая: проверка собственных карточек со стороны. Свой сайт открывается с адреса из пула, и картинка получается та же, что видит покупатель из другой сети: доступность страницы, отдача изображений, работа фильтров, поведение каталога при частых обращениях.</p>
<p>Пятая: выгрузка характеристик для наполнения. Карточка без параметров, габаритов и описания продаёт слабо, а вручную заполнить десятки тысяч позиций невозможно. Характеристики забираются со страниц производителя и сводятся в таблицу, откуда уже импортируются в свой каталог. Под все пять задач берём <a href="https://iprazon.com/proxy/dlya-parsinga">приватные серверные адреса под сбор данных</a>: прогон идёт с адреса из общего пула, рабочая сеть офиса остаётся в стороне, нагрузка распределяется по разным подсетям автоматически.</p>
<p>Общее у пяти задач одно: объём. Один менеджер руками открывает сотню страниц за смену, прогон открывает столько же за минуту. Именно объём и превращает обычный сбор данных в отдельную инженерную задачу с расписанием, логами и повторами.</p>
<h2 id="schitaem-nagruzku-pod-razmer-kataloga">Считаем нагрузку под размер каталога</h2>
<p>Расчёт держится на четырёх величинах: число карточек в обходе, частота обновления, длина окна прогона и среднее время ответа целевого сайта. Первые три задаёт бизнес, четвёртую измеряем сами.</p>
<p>Порядок счёта короткий. Число карточек умножаем на частоту за сутки, добавляем запас на повторы примерно в восемь процентов, делим на длину окна в секундах и получаем требуемую скорость в запросах за секунду. Скорость умножаем на среднее время ответа: столько соединений программа должна держать открытыми одновременно. К результату добавляем треть про запас, потому что часть соединений в каждый момент висит в ожидании ответа медленных хостов.</p>
<pre><code>запросы = карточки * прогонов_в_сутки * 1.08
скорость = запросы / (часы_окна * 3600)
потоки   = скорость * среднее_время_ответа * 1.33</code></pre>
<div class="tabl"><table><thead><tr><th>Каталог, карточек</th><th>Прогонов в сутки</th><th>Окно</th><th>Запросов в час</th><th>Потоки при ответе 3 секунды</th></tr></thead><tbody><tr><td>до 5 000</td><td>1</td><td>2 часа</td><td>2 700</td><td>3</td></tr><tr><td>20 000</td><td>1</td><td>4 часа</td><td>5 400</td><td>6</td></tr><tr><td>60 000</td><td>1</td><td>6 часов</td><td>10 800</td><td>12</td></tr><tr><td>150 000</td><td>2</td><td>8 часов</td><td>40 500</td><td>45</td></tr><tr><td>400 000</td><td>1</td><td>10 часов</td><td>43 200</td><td>48</td></tr><tr><td>400 000</td><td>3</td><td>10 часов</td><td>129 600</td><td>144</td></tr></tbody></table></div>
<p>Цифры в последней колонке многих удивляют своей скромностью. Потоков нужно куда меньше, чем кажется на старте, потому что скорость упирается в ответ чужого сайта. Стандартный пакет с лимитом до 1000 потоков перекрывает даже самый тяжёлый вариант из таблицы с большим запасом, а корпоративный с лимитом до 3000 берётся тогда, когда прогоны идут параллельно с нескольких серверов. Пакеты по потокам не складываются, поэтому рост нагрузки закрывается переходом на старший вариант.</p>
<p>Есть второй ограничитель, о котором забывают: число площадок. Сорок восемь потоков, разложенных по двенадцати сайтам поставщиков, дают по четыре одновременных обращения на каждый хост, и такая частота проходит спокойно. Те же сорок восемь потоков, направленные на один сайт, выглядят со стороны площадки совсем иначе. Раскладку по хостам задаём в настройках прогона отдельно от общего лимита. Подробный разбор счёта адресов и потоков под конкретную задачу собран в материале про то, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a>.</p>
<h3 id="bezlimitnyy-trafik-i-obem-vygruzki">Безлимитный трафик и объём выгрузки</h3>
<p>Каталожная страница весит немного, зато их много. Средняя карточка вместе со стилями, скриптами и превью изображений тянет от 300 килобайт до полутора мегабайт. Умножаем на 60 000 карточек и получаем от 18 до 90 гигабайт за один полный обход. Три обхода в сутки превращают это в цифру, от которой в любой схеме с оплатой за объём начинает болеть голова.</p>
<p>Трафик у нас безлимитный на всех пакетах. Отсюда следует практический вывод: планировать выгрузку по объёму не нужно совсем. Загрузка изображений для проверки превью, повторный обход после сбоя разбора, разовая выкачка всего каталога поставщика перед сезоном идут без оглядки на счётчики. Магазины с большим каталогом и частыми прогонами берут именно <a href="https://iprazon.com/proxy/bezlimitnye">пакеты с безлимитным трафиком</a> по этой причине.</p>
<p>Из этого вырастает и рабочая привычка: сохранять сырой ответ целиком. Разбор ломается регулярно, вёрстка у поставщиков меняется без предупреждения, и когда исходный HTML лежит на диске, повторный разбор делается локально за минуты. Без сохранённого сырья приходится заново идти по всем карточкам. Диск дешевле часа простоя.</p>
<pre><code># сохраняем сырьё до разбора, разбор идёт отдельным шагом
curl -s -x http://198.51.100.24:8000 \
     -H "Accept-Language: ru-RU,ru;q=0.9" \
     "https://supplier.example/catalog/item/${SKU}" \
     -o "raw/${RUN_ID}/${SKU}.html"</code></pre>
<h2 id="raspisanie-sutochnogo-progona-i-poryadok-obh">Расписание суточного прогона и порядок обхода</h2>
<p>Прогон разбивается на несколько заданий с разной частотой. Полный обход прайсов тяжёлый, его ставим один раз в сутки на ночное окно. Сверку остатков делаем короткой и частой, потому что именно она отвечает за отмены заказов. Проверку своих карточек ставим отдельно, ближе к утру.</p>
<pre><code># crontab на сервере прогонов
10 2 * * *   /opt/run/suppliers.sh full     # полный обход прайсов
0 */3 * * *  /opt/run/suppliers.sh stock    # сверка остатков
30 6 * * *   /opt/run/selfcheck.sh          # свои карточки со стороны
45 5 * * 1   /opt/run/assortment.sh         # ассортимент, раз в неделю</code></pre>
<p>Порядок обхода фиксируем. Сначала идут поставщики, от которых зависит витрина, потом второстепенные, потом наблюдение за нишей. При таком порядке сбой на третьем задании не оставляет магазин без цен, потому что главное уже загружено и записано.</p>
<p>Внутри задания порядок тоже имеет значение. Обход по списку разделов даёт равномерную нагрузку на площадку, обход по случайной перестановке карточек размазывает обращения по всему сайту. Первый вариант проще отлаживать, второй ровнее ложится на чужой сервер. Мы обычно перемешиваем очередь внутри раздела и держим паузу от 400 до 900 миллисекунд между обращениями к одному хосту.</p>
<p>Планировщик заданий удобнее держать внутри самого сборщика. У <a href="https://iprazon.com/instrumenty/a-parser">A-Parser с его планировщиком заданий</a> расписание, список прокси и разбор живут в одном месте, а ссылка на выдачу подтягивается перед каждым запуском автоматически. Тогда обновление списка адресов перестаёт быть отдельным ручным шагом.</p>
<h2 id="oshibki-povtory-i-medlennye-ploschadki">Ошибки, повторы и медленные площадки</h2>
<p>Прогон без обработки ошибок бесполезен: любой сбой на середине обнуляет ночную работу. Рабочая схема простая. Ошибка сети и таймаут дают три повтора с растущей паузой: 5, 20 и 60 секунд. Код 429 и код 503 обрабатываем по заголовку <code>Retry-After</code>, если он пришёл, иначе ждём минуту. Код 403 отправляет карточку в отложенную очередь, которая прогоняется в конце задания с половинной частотой. Коды 404 и 410 повторов не требуют, позиция помечается как снятая с продажи.</p>
<div class="tabl"><table><thead><tr><th>Что видно в логе</th><th>Причина</th><th>Что делаем</th></tr></thead><tbody><tr><td>Код 403 на части карточек</td><td>Площадка отбивает частоту обращений</td><td>Снижаем потоки на этот хост, повтор в конце прогона</td></tr><tr><td>Код 429 с заголовком <code>Retry-After</code></td><td>Свой лимит частоты у площадки</td><td>Ждём указанное число секунд, продолжаем с той же позиции</td></tr><tr><td>Код 200, полей в разборе нет</td><td>Вёрстка карточки поменялась</td><td>Сверяем селекторы на трёх карточках руками, правим шаблон</td></tr><tr><td>Обрыв по таймауту на одном хосте</td><td>Медленный ответ площадки</td><td>Поднимаем таймаут, выносим хост в отдельное задание</td></tr><tr><td>Цена нулевая по всей выгрузке</td><td>Разбор поймал страницу-заглушку</td><td>Останавливаем запись в базу, прогоняем сверку</td></tr><tr><td>Ошибка 407 от посредника</td><td>Привязка адреса не совпала с адресом машины</td><td>Обновляем привязку в кабинете, перезапускаем задание</td></tr><tr><td>Редирект на страницу входа</td><td>Сессия личного кабинета поставщика истекла</td><td>Обновляем сохранённые куки, повторяем пачку</td></tr></tbody></table></div>
<p>Медленные площадки заслуживают отдельного слова. Один поставщик с ответом в двенадцать секунд способен растянуть окно прогона вдвое, пока остальные ждут своей очереди. Выносим такие хосты в отдельное задание с собственным расписанием и собственным числом потоков, и общее окно возвращается к нормальной длине. Разделение по заданиям здесь работает лучше, чем попытки ускорить чужой сервер.</p>
<p>Отказ по коду 403 у магазинов встречается чаще прочих, и причины у него бывают разные: частота, состав заголовков, отсутствие привычной пары <code>Accept-Language</code> и <code>User-Agent</code>, обращение к карточке в обход раздела. Разбор кодов и порядок действий по каждому собран в отдельном материале про <a href="/proverka/oshibka-403/">ошибку 403 при работе через прокси</a>.</p>
<pre><code># повтор с растущей паузой, три попытки
for delay in 5 20 60; do
  code=$(curl -s -o "$OUT" -w "%{http_code}" --max-time 25 \
         -x http://198.51.100.24:8000 "$URL")
  [ "$code" = "200" ] &amp;&amp; break
  sleep "$delay"
done
echo "$SKU;$code" &gt;&gt; "log/${RUN_ID}.csv"</code></pre>
<h2 id="sverka-cifr-mezhdu-progonami-i-lovlya-sboev-">Сверка цифр между прогонами и ловля сбоев разбора</h2>
<p>Самая опасная поломка в сборе прайсов тихая. Прогон отработал, ошибок в логе нет, база обновилась, только цены в ней теперь нулевые, потому что поставщик переставил блок с ценой и селектор поймал пустоту. Витрина показывает ноль, менеджеры узнают об этом от покупателей.</p>
<p>Ловится это сверкой между прогонами. Каждый прогон пишет результат в отдельный файл с меткой запуска, и перед записью в боевую базу новый файл сравнивается с предыдущим по трём величинам: доля позиций с пустой ценой, доля изменившихся цен, средний размер изменения. Проходят пороги, идёт запись. Не проходят, задание останавливается и уходит сообщение администратору.</p>
<pre><code># сверка выгрузки с прошлым прогоном по артикулу и цене
join -t';' -j1 &lt;(sort prev.csv) &lt;(sort today.csv) \
  | awk -F';' '$2 != $4 { print $1";"$2";"$4 }' &gt; diff.csv

empty=$(awk -F';' '$2 == "" || $2 == "0" { c++ } END { print c+0 }' today.csv)
total=$(wc -l &lt; today.csv)
echo "пустых: $empty из $total, изменений: $(wc -l &lt; diff.csv)"</code></pre>
<div class="tabl"><table><thead><tr><th>Величина</th><th>Нормальный суточный разброс</th><th>Порог остановки</th></tr></thead><tbody><tr><td>Доля позиций с пустой ценой</td><td>до 2 процентов</td><td>выше 6 процентов</td></tr><tr><td>Доля изменившихся цен</td><td>от 3 до 12 процентов</td><td>выше 40 процентов</td></tr><tr><td>Среднее изменение цены</td><td>до 7 процентов</td><td>выше 25 процентов</td></tr><tr><td>Число собранных карточек</td><td>разброс до 3 процентов</td><td>падение больше 15 процентов</td></tr><tr><td>Доля ответов с кодом 200</td><td>от 96 процентов</td><td>ниже 85 процентов</td></tr></tbody></table></div>
<p>Пороги подбираем по своим данным за первые две недели работы. Ниша с частым изменением цен даст более широкий коридор, ниша с редкими пересмотрами узкий. Держим правило: любой выход за коридор останавливает запись, разбирается человеком и только потом продолжается.</p>
<p>Отдельно смотрим на число собранных карточек. Резкое падение при отсутствии ошибок почти всегда указывает на изменение пагинации у поставщика: разделов стало больше, страниц меньше, обход прошёл по укороченному списку. Такое ловится сравнением количества, поскольку коды ответов остаются рабочими.</p>
<h2 id="lichnye-kabinety-postavschikov-rabota-s-sess">Личные кабинеты поставщиков: работа с сессией</h2>
<p>Часть поставщиков отдаёт нормальный прайс лишь внутри личного кабинета. Тут прогон превращается в работу с сессией: логин, куки, срок жизни сессии, иногда одноразовый код. Схема рабочая, требует только аккуратности.</p>
<p>Первое правило: один кабинет поставщика ходит с одного адреса из списка. Строку <code>IP:PORT</code> под кабинет выбираем из выдачи и держим её в конфигурации этого задания, пока сессия жива. Перескок между адресами внутри одной сессии выглядит для площадки странно и заканчивается выходом из кабинета.</p>
<p>Второе правило: сессию продлеваем отдельным лёгким запросом. Раз в двадцать минут дёргаем страницу профиля, ответ 200 подтверждает, что куки живы. Ответ с редиректом на форму входа означает, что пора логиниться заново, и лучше узнать это заранее, чем посреди выгрузки на восьми тысячах позиций.</p>
<pre><code># продление сессии кабинета поставщика
curl -s -o /dev/null -w "%{http_code}\n" \
     -x socks5h://198.51.100.24:1080 \
     -b cookies/supplier7.txt -c cookies/supplier7.txt \
     https://supplier7.example/account/profile</code></pre>
<p>Третье правило касается протокола. Кабинеты часто отдают файлы выгрузки по нестандартным портам и через служебные адреса, поэтому под такие задания удобнее брать сокетный доступ. Схема <code>socks5h</code> в примере выше отправляет и резолвинг имени на сторону посредника, поэтому запрос уходит целиком через пул. Разбор форматов и строк подключения лежит на странице про <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и скриптов</a>.</p>
<p>Файлы прайсов из кабинетов приходят в разных форматах, и это отдельная работа. XLSX с объединёнными ячейками, CSV с точкой с запятой, YML с чужой кодировкой. Разбор каждого формата пишем один раз и складываем в общий каталог обработчиков, а задание выбирает нужный по имени поставщика.</p>
<h2 id="obnovlenie-spiska-adresov-pered-startom">Обновление списка адресов перед стартом</h2>
<p>Список адресов обновляется в реальном времени, ротация внутри пула автоматическая. Отсюда практическое правило: список перечитывается перед каждым крупным прогоном. Файл, скачанный месяц назад и лежащий на сервере, к очередной ночи наберёт неотвечающих строк, и утро уйдёт на разбор ошибок, которые снимаются одним обновлением.</p>
<p>Проще всего снять этот шаг совсем. В кабинете берётся ссылка на выдачу, ссылка прописывается в сборщике, дальше программа тянет актуальные строки сама перед каждым запуском. Формат выбирается по способу доступа: <code>IP:PORT</code> при работе с привязанным адресом сервера и <code>IP:PORT:LOGIN:PASS</code>, когда прогоны идут с нескольких машин или из облака. Подробности по обоим вариантам разобраны в материале про <a href="/pokupka/format-vydachi/">формат выдачи списка адресов</a>.</p>
<pre><code># обновление списка перед стартом задания
curl -s "$PROXY_LIST_URL" -o proxies.txt
lines=$(wc -l &lt; proxies.txt)
[ "$lines" -lt 100 ] &amp;&amp; { echo "список пустой, прогон отменён"; exit 1; }
echo "адресов в списке: $lines"</code></pre>
<p>Проверку на количество строк ставим обязательно. Пустой ответ выдачи из-за сетевого сбоя приводит к прогону без посредника напрямую с адреса сервера, а это худший вариант из возможных: площадки видят один адрес с высокой частотой и перестают отвечать всему офису. Три строки в скрипте закрывают эту дыру навсегда.</p>
<p>Перед сезонным пиком делаем ещё один шаг: короткий прогон на 200 карточек за час до основного задания. Он показывает время ответа площадок, долю кодов 200 и работу разбора на текущей вёрстке. Если что-то поменялось, останется час на правку шаблона. Магазины, у которых сезон определяет годовой результат, эту репетицию не пропускают.</p>
<h2 id="proverka-sobstvennyh-kartochek-so-storony">Проверка собственных карточек со стороны</h2>
<p>Свой сайт полезно смотреть чужими глазами, и адрес из пула для этого подходит лучше офисного. Кэш браузера пуст, куки отсутствуют, внутренние правила доступа по адресу офиса не работают. Открывается ровно то, что получает покупатель.</p>
<p>Смотрим на четыре вещи. Доступность карточек по прямым адресам без перехода из каталога. Отдачу изображений и их размеры. Работу фильтров и сортировок при обращении со стороны. Поведение каталога при частых обращениях, потому что защита от нагрузки иногда настроена слишком строго и отбивает живых покупателей вместе с чужими сборщиками.</p>
<pre><code># суточный обход своих карточек со стороны
while read -r url; do
  read -r code size time &lt;&lt;&lt; "$(curl -s -o /dev/null \
    -w '%{http_code} %{size_download} %{time_total}' \
    -x http://198.51.100.24:8000 "$url")"
  echo "$url;$code;$size;$time" &gt;&gt; selfcheck.csv
done &lt; urls-top500.txt</code></pre>
<p>Отдельный сюжет: проверка отдачи разным сетям. Магазин с кэшем на стороне поставщика инфраструктуры иногда отдаёт устаревшую версию карточки части посетителей, и заметить это изнутри офиса невозможно. Обход с адресов из пула, где адреса приходят из множества стран и разных подсетей, показывает картину шире. Пул устроен как микс со всего мира, выборка по отдельной стране не делается, и для такой проверки разнообразие подсетей идёт только на пользу.</p>
<p>Результаты обхода складываем в тот же формат, что и сверку прайсов, и прогоняем по тем же порогам. Выпал размер страницы, значит что-то пропало из вёрстки. Выросло время ответа, значит стоит смотреть на сервер. Сравнение с прошлым днём отвечает на оба вопроса за секунду.</p>
<h2 id="s-chego-nachat-magazinu-na-starte">С чего начать магазину на старте</h2>
<p>Порядок запуска короткий. Считаем каталог и окно, получаем требуемые потоки по формуле из второго раздела. Берём бесплатный тест до 2 часов и прогоняем на нём одно реальное задание по трём поставщикам: видно время ответа, коды и работу разбора на живых страницах. Дальше оформляем пакет по сроку и включаем расписание.</p>
<p>Срок берём по режиму работы. Разовая выгрузка каталога поставщика перед запуском нового раздела закрывается сутками. Постоянная сверка остатков и суточный обход прайсов просят месяца, потому что продлевать доступ вручную каждую неделю утомительно и любой пропуск останавливает витрину. Пакет включается примерно за 5 минут после оплаты, и первое задание можно запускать сразу. Оформляется всё там, где берут <a href="https://iprazon.com/proxy/dlya-parsinga">прокси под ежедневный сбор прайсов</a>.</p>
<p>Отдельно про потоки при двух привязанных адресах. В пакет входит одновременная привязка 2 адресов, и при двух привязках общий лимит потоков делится между ними пополам. Магазины часто держат сервер прогонов и рабочую машину администратора, и тогда расчёт нагрузки ведём от половины лимита. Если весь прогон идёт с одного сервера, вторую привязку разумнее оставить пустой. Состав пакета целиком описан там, где оформляют <a href="https://iprazon.com/products/kupit-proxy-ipv4">доступ к пулу IPv4 под каталог магазина</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="podoydut-li-proksi-pod-sbor-praysov-moego-ka">Подойдут ли прокси под сбор прайсов моего каталога?</h3>
<p>Заранее предугадать поведение каждой площадки поставщика нельзя, поэтому перед покупкой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Тест проходит на вашем сборщике и ваших целевых сайтах, и по его итогам видны время ответа, коды и работа разбора на живой вёрстке.</p>
<h3 id="chto-vhodit-v-proksi-pul-i-hvatit-li-ego-pod">Что входит в прокси-пул и хватит ли его под суточный прогон?</h3>
<p>В пуле около 12 000 активных адресов IPv4 и SOCKS5, онлайн держится в этом же районе в сутки. Стандартные пакеты дают до 1000 потоков, корпоративный до 3000. Прогон на 400 000 карточек за десять часов требует порядка полусотни потоков, поэтому лимита стандартного пакета хватает с большим запасом.</p>
<h3 id="kak-chasto-obnovlyaetsya-spisok-adresov">Как часто обновляется список адресов?</h3>
<p>Список адресов обновляется в режиме реального времени, ротация внутри пула автоматическая. Забрать его можно ссылкой или файлом. Для суточных прогонов удобнее ссылка: сборщик подтягивает актуальные строки перед каждым запуском без участия человека.</p>
<h3 id="v-kakom-formate-vydaetsya-spisok-i-kak-podkl">В каком формате выдаётся список и как подключить его к сборщику?</h3>
<p>Форматов два: <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>. Первый работает при привязанном адресе сервера, второй когда прогоны идут с нескольких машин. В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, поэтому строка подключения подбирается под тот софт, который уже стоит.</p>
<p>Соседние задачи разобраны отдельно: <a href="/zadachi/seo-pozicii/">съём позиций и работа с выдачей</a> для отслеживания своих карточек в поиске, <a href="/zadachi/neskolko-kabinetov/">несколько рабочих кабинетов одной компании</a> для разведения панелей поставщиков и рекламных аккаунтов, а также сводка ответов в материале <a href="/zadachi/chastye-voprosy/">частые вопросы о прокси IPv4</a>. Перед первым суточным прогоном полезно пройти <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a>, чтобы доступ и привязка были настроены заранее.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/zadachi/internet-magazin/">https://kupit-proxy-ipv4.ru/zadachi/internet-magazin/</a></p>]]></content:encoded></item>
<item><title>Прокси под несколько кабинетов одной компании: как развести рабочие доступы</title><link>https://kupit-proxy-ipv4.ru/zadachi/neskolko-kabinetov/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/zadachi/neskolko-kabinetov/</guid><description>Компании нужны разные адреса тогда, когда сотрудники ведут несколько независимых кабинетов: рекламные аккаунты клиентов, магазины на торговых площадках,…</description><content:encoded><![CDATA[
<p class="vvod">Компании нужны разные адреса тогда, когда сотрудники ведут несколько независимых кабинетов: рекламные аккаунты клиентов, магазины на торговых площадках, панели поставщиков, партнёрские системы. Каждый такой кабинет держим на своей строке из списка выдачи, при работе с одной машины привязываем один адрес и получаем весь лимит потоков, а сама раскладка строится от того, что компания считает единицей разделения.</p>
<p>Ниже разобрано, как разложить кабинеты по адресам, зачем в пакете две привязки и как они работают при команде из нескольких человек, что должно совпадать внутри одного кабинета от сессии к сессии, как передавать доступ между сотрудниками и что проверять перед началом рабочего дня. В конце разбор трёх сбоев, которые встречаются чаще прочих.</p>
<h2 id="kogda-kompanii-nuzhny-raznye-adresa-pod-razn">Когда компании нужны разные адреса под разные кабинеты</h2>
<p>Ситуация выглядит одинаково у агентства, у продавца на площадках и у оптовой компании. Кабинетов много, ведут их разные люди, а вход во все идёт из одной офисной сети с одного внешнего адреса. Площадка видит десяток разных аккаунтов, приходящих с одного адреса в течение часа, и начинает задавать вопросы: просит подтверждение, показывает проверку при каждом входе, иногда переводит аккаунт в ограниченный режим до выяснения.</p>
<p>Разведение по адресам снимает этот эффект. Каждый кабинет ходит своей дорогой, история входов у него ровная, и переход сотрудника от одного клиента к другому перестаёт выглядеть как активность одного человека сразу везде.</p>
<p>Список сценариев обычно такой. Агентство ведёт рекламные кабинеты нескольких клиентов и хочет, чтобы аккаунты клиентов не пересекались между собой. Продавец держит магазины на нескольких торговых площадках. Оптовая компания заходит в панели двух десятков поставщиков за прайсами и статусами заказов. Отдел партнёрских программ ведёт аккаунты в партнёрских системах. Под все эти задачи берём <a href="https://iprazon.com/proxy/privatnye">приватные серверные адреса для рабочих кабинетов</a>: доступ открыт клиентам сервиса, пул закрытый, а разнообразие подсетей внутри него получается само собой.</p>
<p>Работа с аккаунтами соцсетей и с сервисами отложенного постинга устроена по своим правилам, у неё другой набор проверок и другой ритм входов. Она разобрана в отдельном материале про <a href="/zadachi/socseti-i-smm/">соцсети и сервисы отложенного постинга</a>, тут её не касаемся.</p>
<h2 id="chto-schitat-edinicey-razdeleniya">Что считать единицей разделения</h2>
<p>Главный вопрос раскладки звучит так: что именно отделяем от чего. Ответ задаёт число строк из списка, число браузерных профилей и объём работы по поддержанию всего этого хозяйства.</p>
<p>Работающее правило простое: единицей разделения берём то, что площадка считает отдельным владельцем. Для рекламной системы это клиент со своим биллингом. Для торговой площадки это магазин. Для панели поставщика это учётная запись покупателя. Разные кабинеты одного и того же клиента внутри одной системы разделять смысла нет, они и так связаны между собой на стороне площадки.</p>
<div class="tabl"><table><thead><tr><th>Тип кабинета</th><th>Единица разделения</th><th>Сколько строк из списка</th><th>Браузерный профиль</th></tr></thead><tbody><tr><td>Рекламные кабинеты клиентов агентства</td><td>Клиент</td><td>Одна на клиента</td><td>Отдельный на каждого</td></tr><tr><td>Магазины на торговых площадках</td><td>Магазин</td><td>Одна на магазин</td><td>Отдельный на магазин</td></tr><tr><td>Панели поставщиков, чтение прайсов</td><td>Поставщик</td><td>Одна на поставщика</td><td>Общий для чтения</td></tr><tr><td>Панели поставщиков с оформлением заказов</td><td>Поставщик</td><td>Одна на поставщика</td><td>Отдельный на поставщика</td></tr><tr><td>Партнёрские системы</td><td>Аккаунт в системе</td><td>Одна на аккаунт</td><td>Отдельный на аккаунт</td></tr><tr><td>Аналитика и статистика по проектам</td><td>Проект</td><td>Одна на проект</td><td>Отдельный на проект</td></tr><tr><td>Внутренние панели самой компании</td><td>Компания</td><td>Одна общая</td><td>Общий рабочий</td></tr></tbody></table></div>
<p>Число строк из списка ограничений не имеет: пул держится в районе 12 000 активных адресов, список обновляется в реальном времени, и взять из него нужное количество строк можно в любой момент. Ограничение приходит с другой стороны, от людей. Двадцать профилей на одного сотрудника превращают рабочий день в переключение вкладок, поэтому раскладку берём по реальной нагрузке дня, лишние профили заводить незачем.</p>
<p>Отдельно про панели поставщиков только для чтения. Прайс, который открывается без входа, разделения не требует вовсе: такие страницы собираем общим прогоном, и это уже задача сбора данных со своим расписанием и своими потоками.</p>
<h2 id="dve-privyazki-v-pakete-i-komanda-iz-neskolki">Две привязки в пакете и команда из нескольких человек</h2>
<p>Доступ к пулу открывается двумя путями. Первый: в кабинете сервиса указывается внешний адрес машины, с которой пойдут запросы, и дальше прокси работают без пары логина и пароля. Второй: берётся формат <code>IP:PORT:LOGIN:PASS</code>, и каждый запрос авторизуется строкой подключения. Оба варианта входят в пакет, переключаться между ними разрешено в любой момент.</p>
<p>В пакет входит одновременная привязка 2 адресов. Менять их разрешено свободно прямо в настройках. Отсюда два типовых сценария для команды.</p>
<p>Сценарий первый, до двух рабочих мест. Привязываем адрес офисного шлюза и адрес удалённого сотрудника. Все машины за офисным шлюзом выходят наружу с одного внешнего адреса, поэтому одной привязки хватает на весь офис независимо от числа компьютеров в нём. Тут важна одна цифра: при двух привязанных адресах общий лимит потоков делится между ними пополам. Пакет на 1000 потоков даёт по 500 на каждый адрес, и для работы с кабинетами руками этого хватает с огромным запасом, поскольку браузерная сессия держит единицы соединений.</p>
<p>Сценарий второй, команда шире и машины разбросаны. Тогда переходим на формат с логином и паролем: он работает с любой машины без привязки, и вопрос меняющихся адресов провайдеров у сотрудников закрывается сам. Строка подключения выдаётся сотруднику один раз, дальше он подставляет её в профиль браузера. Порядок настройки и обе схемы доступа подробно разобраны в материале про <a href="/podklyuchenie/privyazka-adresa/">привязку своего адреса</a>.</p>
<div class="tabl"><table><thead><tr><th>Состав команды</th><th>Схема доступа</th><th>Что настраиваем</th><th>Потоки</th></tr></thead><tbody><tr><td>Один администратор, одна машина</td><td>Привязка одного адреса</td><td>Внешний адрес машины в кабинете</td><td>Весь лимит пакета</td></tr><tr><td>Офис и один удалённый сотрудник</td><td>Две привязки</td><td>Адрес шлюза и адрес сотрудника</td><td>Лимит делится пополам</td></tr><tr><td>Весь офис за общим шлюзом</td><td>Привязка адреса шлюза</td><td>Один адрес на любое число машин</td><td>Весь лимит пакета</td></tr><tr><td>Сотрудники на разных провайдерах</td><td>Логин и пароль в строке</td><td>Раздать строку подключения каждому</td><td>Весь лимит пакета</td></tr><tr><td>Офис плюс сервер прогонов</td><td>Две привязки</td><td>Адрес шлюза и адрес сервера</td><td>Лимит делится пополам</td></tr></tbody></table></div>
<h2 id="chto-dolzhno-sovpadat-vnutri-odnogo-kabineta">Что должно совпадать внутри одного кабинета от сессии к сессии</h2>
<p>Площадка собирает набор совпадений сразу по нескольким признакам. Пока набор от входа к входу держится ровным, сессия проходит спокойно.</p>
<p>Совпадать должны шесть вещей. Строка подключения, которую использует профиль этого кабинета. Часовой пояс браузера. Язык интерфейса и заголовок <code>Accept-Language</code>. Строка <code>User-Agent</code> вместе с версией браузера. Разрешение окна и параметры отрисовки. Набор сохранённых куки, включая долгоживущие метки самой площадки.</p>
<pre><code># профиль кабинета: одна строка на один кабинет
client-alfa   198.51.100.24:8000   профиль alfa    Europe/Moscow  ru-RU
client-beta   203.0.113.61:8000    профиль beta    Europe/Moscow  ru-RU
market-shop1  198.51.100.77:8000   профиль shop1   Europe/Moscow  ru-RU</code></pre>
<p>Мешают этому набору четыре вещи. Смена строки подключения посреди сессии, потому что адрес на выходе меняется при живых куках. Обновление браузера, которое двигает <code>User-Agent</code> сразу во всех профилях. Очистка куки скопом при уборке диска. Переезд профиля на машину коллеги с другим часовым поясом и другим разрешением экрана.</p>
<p>Из этого вырастает рабочая привычка: строку подключения выбираем из свежей выдачи перед началом работы с кабинетом и держим её на всю сессию. Внутри сессии адрес на выходе остаётся одним. Между рабочими днями строка перечитывается из актуального списка, поскольку он обновляется в реальном времени и вчерашний файл на диске постепенно устаревает.</p>
<p>Куки каждого кабинета храним отдельно, вместе с профилем. Профили удобно держать в антидетект-браузере, где строка подключения, часовой пояс, язык и отпечаток задаются на уровне профиля и переезжают вместе с ним. Разбор настроек по шагам собран на странице про <a href="https://iprazon.com/instrumenty/dolphin">Dolphin и работу с профилями</a>, общий подход к отпечаткам описан там, где разбирают <a href="https://iprazon.com/instrumenty/antidetekt">настройку антидетект-браузера</a>.</p>
<h2 id="kto-s-kakoy-mashiny-zahodit">Кто с какой машины заходит</h2>
<p>Раскладку по людям записываем один раз и держим в общем файле. Без записи через месяц никто не помнит, из какого профиля заходили в кабинет третьего клиента, и разбирательство начинается с чтения истории входов на стороне площадки.</p>
<p>Запись выглядит просто: кабинет, ответственный сотрудник, профиль браузера, строка подключения, запасной сотрудник. Пятое поле важнее, чем кажется. Ответственный периодически бывает недоступен, и передача доступа без подготовки заканчивается двойным входом.</p>
<pre><code># access-map.txt, по одной строке на кабинет
кабинет        ответственный  профиль   строка               замена
client-alfa    Романов        alfa      198.51.100.24:8000   Кузьмина
client-beta    Кузьмина       beta      203.0.113.61:8000    Романов
market-shop1   Титов          shop1     198.51.100.77:8000   Кузьмина
supplier-panel Титов          sup       203.0.113.14:1080    Романов</code></pre>
<p>Правило одного входа держим жёстко: в один кабинет в один момент времени заходит один человек с одной машины. Параллельный вход двух сотрудников с разных адресов даёт площадке самый заметный сигнал из всех возможных, потому что один аккаунт физически находится в двух местах одновременно.</p>
<p>Машины сотрудников тоже стоит развести по ролям. Кабинеты клиентов ведём с рабочих ноутбуков через профили, суточные прогоны и сборщики держим на отдельном сервере. Смешивать эти два потока в одном адресе не стоит: сборщик работает частыми короткими запросами, браузерная сессия ровным медленным ритмом, и площадка видит разницу.</p>
<p>Когда кабинетов становится больше десятка, мы заводим второй пакет на том же аккаунте под отдельное направление. Ограничений на число пакетов у аккаунта нет, баланс общий, привязки у каждого свои. Так рекламное направление и работа с площадками расходятся по разным доступам, и утренняя проверка у каждой команды своя. Разбор того, как устроен закрытый пул и чем он отличается от общедоступных списков, собран на странице про <a href="https://iprazon.com/proxy/privatnye">приватный доступ к пулу IPv4</a>.</p>
<h2 id="peredacha-dostupa-mezhdu-sotrudnikami">Передача доступа между сотрудниками</h2>
<p>Передача делается между сессиями, никогда посреди работы. Порядок из пяти шагов работает у любой команды.</p>
<p>Первый шаг: текущий владелец выходит из кабинета штатной кнопкой выхода. Второй: профиль браузера выгружается из антидетект-браузера в файл вместе с куками, часовым поясом и строкой подключения. Третий: файл передаётся коллеге и загружается у него. Четвёртый: коллега проверяет адрес на выходе и часовой пояс до входа в кабинет. Пятый: вход выполняется штатно, с паролем.</p>
<p>Между вторым и третьим шагом выдерживаем паузу. Полчаса достаточно: площадка видит завершённую сессию, потом новую, и разрыв между ними выглядит естественно. Мгновенная передача с выходом и входом в течение минуты со сменой машины даёт обратный эффект.</p>
<p>Если сотрудники работают на разных провайдерах, схема с логином и паролем упрощает передачу до предела: строка подключения едет вместе с профилем, привязку менять не требуется. Когда доступ идёт по привязке и рабочая машина сменилась, привязанный адрес меняется в настройках кабинета за пару минут. Порядок замены разобран в материале про <a href="/podklyuchenie/smena-privyazki/">смену привязанного адреса</a>.</p>
<h2 id="proverka-pered-nachalom-rabochego-dnya">Проверка перед началом рабочего дня</h2>
<p>Утренняя проверка занимает пять минут и снимает большую часть дневных сюрпризов. Делаем её до первого входа в любой кабинет.</p>
<div class="tabl"><table><thead><tr><th>Что проверяем</th><th>Как</th><th>Признак нормы</th></tr></thead><tbody><tr><td>Свежесть списка адресов</td><td>Перечитать выдачу по ссылке из кабинета сервиса</td><td>Строк столько же или больше вчерашнего</td></tr><tr><td>Совпадение привязки</td><td>Узнать внешний адрес машины и сверить с настройками</td><td>Адрес тот же, что записан в кабинете</td></tr><tr><td>Адрес на выходе</td><td>Запрос через посредника на сервис проверки</td><td>Адрес из пула, отличный от адреса машины</td></tr><tr><td>Строка профиля</td><td>Открыть настройки профиля в браузере</td><td>Порт и адрес те же, что вчера</td></tr><tr><td>Часовой пояс и язык</td><td>Страница проверки браузерных параметров</td><td>Совпадают с прошлой сессией</td></tr><tr><td>Резолвинг имён</td><td>Страница проверки запросов к DNS</td><td>Имена резолвятся на стороне посредника</td></tr><tr><td>Активные сессии</td><td>Список сессий внутри самого кабинета</td><td>Одна активная сессия</td></tr><tr><td>Число привязок</td><td>Настройки пакета в кабинете сервиса</td><td>Одна привязка при работе с одной машины</td></tr></tbody></table></div>
<pre><code># внешний адрес машины и адрес на выходе через посредника
curl -s https://ifconfig.me ; echo
curl -s -x http://198.51.100.24:8000 https://ifconfig.me ; echo

# то же по сокетной схеме, резолвинг уходит на сторону посредника
curl -s -x socks5h://203.0.113.14:1080 https://ifconfig.me ; echo</code></pre>
<p>Проверку удобно держать одним коротким скриптом, который сотрудник запускает перед первым входом. Он выводит внешний адрес машины, адрес на выходе через посредника и число строк в свежей выдаче. Три цифры на экране закрывают половину утренних вопросов, а остальное смотрим глазами в самом кабинете.</p>
<p>Две строки из этого списка проверяем особенно внимательно. Число активных сессий показывает забытый вход коллеги с прошлой недели. Число привязок объясняет странности с потоками: пока привязано два адреса, лимит поделён пополам, и если второе рабочее место давно не используется, привязку разумнее освободить.</p>
<h2 id="stroka-podklyucheniya-i-protokol-pod-kabinet">Строка подключения и протокол под кабинеты</h2>
<p>Работа с кабинетами идёт через браузер, поэтому базово хватает HTTP и HTTPS. Сокетная схема пригождается там, где рядом с браузером живёт свой софт: выгрузка отчётов через API площадки, загрузка каталогов в панель поставщика, служебные утилиты на нестандартных портах.</p>
<pre><code># HTTP через привязанный адрес, формат списка IP:PORT
http://198.51.100.24:8000

# та же строка с парой логина и пароля
http://user7734:kd82hf@198.51.100.24:8000

# сокетная схема для софта рядом с браузером
socks5h://user7734:kd82hf@203.0.113.14:1080</code></pre>
<p>В пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5, докупать под протокол ничего не требуется: адреса те же, меняется схема в строке. Список выдаётся в двух форматах, <code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code>, забрать его можно ссылкой или файлом. Файл удобнее, когда строки раздаются сотрудникам вручную по раскладке кабинетов, ссылка удобнее для софта. Состав пакета целиком описан там, где оформляют <a href="https://iprazon.com/products/kupit-proxy-ipv4">прокси IPv4 для работы с кабинетами</a>.</p>
<p>Одна деталь про резолвинг имён. Схема <code>socks5h</code> отправляет запрос имени на сторону посредника, обычная <code>socks5</code> резолвит имя локально. Разница видна на проверке запросов к DNS, и в работе с кабинетами лучше держать первый вариант. Разбор строк подключения по полям есть на странице про <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 с авторизацией</a>.</p>
<h2 id="razbor-chastyh-sboev">Разбор частых сбоев</h2>
<p>Три сбоя дают почти все обращения в поддержку по теме кабинетов. Разбираются они одинаково: смотрим, что поменялось со стороны площадки, и возвращаем набор признаков к прежнему виду.</p>
<h3 id="odnovremennyy-vhod-s-dvuh-mashin">Одновременный вход с двух машин</h3>
<p>Выглядит так: сотрудник открывает кабинет и видит просьбу подтвердить вход, история показывает две активные сессии с разных адресов. Причина обычно бытовая, коллега подстраховал во время отпуска и остался внутри. Порядок действий: закрываем все сессии кнопкой выхода на стороне площадки, ждём полчаса, входим с профиля ответственного сотрудника. Дальше сверяемся с раскладкой и правим поле замены.</p>
<h3 id="smena-adresa-posredi-raboty">Смена адреса посреди работы</h3>
<p>Провайдер обновил адрес, привязка перестала совпадать, и посредник ответил ошибкой авторизации прямо во время работы с кабинетом. Браузер при этом показывает обрыв загрузки, а площадка видит смену адреса при живой сессии. Порядок действий: закрываем вкладки кабинета, обновляем привязку в настройках, проверяем адрес на выходе, входим заново. Постоянное лечение для меняющегося адреса провайдера одно, это формат с логином и паролем: он от адреса машины не зависит вовсе.</p>
<h3 id="obschiy-brauzernyy-profil-na-neskolkih-kabin">Общий браузерный профиль на нескольких кабинетах</h3>
<p>Самый частый сбой и самый неприятный. В одном профиле открыты кабинеты трёх клиентов, куки лежат вперемешку, площадка видит связку между аккаунтами по совпадению отпечатка и набора меток. Порядок действий: заводим по профилю на кабинет согласно раскладке, каждому профилю даём свою строку подключения из списка, переносим куки по одному кабинету за раз с паузами между переносами. Разводить профили лучше до того, как площадка задала первый вопрос.</p>
<div class="tabl"><table><thead><tr><th>Сбой</th><th>Что видно</th><th>Что делаем</th></tr></thead><tbody><tr><td>Две сессии одновременно</td><td>Просьба подтвердить вход, две записи в истории</td><td>Закрыть все сессии, пауза, вход одного человека</td></tr><tr><td>Адрес сменился в работе</td><td>Ошибка авторизации у посредника, обрыв загрузки</td><td>Обновить привязку либо перейти на логин и пароль</td></tr><tr><td>Один профиль на три кабинета</td><td>Проверки при входе сразу в нескольких аккаунтах</td><td>Развести профили и строки подключения по раскладке</td></tr><tr><td>Строка подключения поменялась</td><td>Кабинет просит вход заново</td><td>Вернуть прежнюю строку до конца сессии</td></tr><tr><td>Обновление браузера во всех профилях</td><td>Синхронные проверки во всех кабинетах разом</td><td>Обновлять профили по одному с интервалом</td></tr><tr><td>Забыта вторая привязка</td><td>Потоков вдвое меньше расчётных</td><td>Освободить неиспользуемую привязку в настройках</td></tr></tbody></table></div>
<p>Ещё один сбой заслуживает упоминания, потому что причина у него внешняя. Сотрудник взял строку из списка, сохранённого месяц назад, и получил отказ по соединению. Список обновляется в реальном времени, ротация внутри пула автоматическая, поэтому перед раскладкой строк по профилям мы всегда перечитываем выдачу заново. Старый файл на диске выручает ровно один раз.</p>
<p>Общая мысль по всем трём разборам одна: набор признаков кабинета должен меняться медленно и по одному. Резкие синхронные изменения сразу во всех профилях площадки замечают лучше всего.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-adresov-mozhno-privyazat-k-paketu">Сколько адресов можно привязать к пакету?</h3>
<p>В стоимость пакета входит одновременная привязка 2 адресов. Этого хватает на типовую схему офиса: адрес общего шлюза и адрес удалённого сотрудника либо сервера. Привязку разрешено менять без ограничений прямо в настройках, поэтому переезд машины или смена провайдера занимают пару минут.</p>
<h3 id="est-li-limity-po-potokam-pri-dvuh-privyazkah">Есть ли лимиты по потокам при двух привязках?</h3>
<p>У каждого пакета свой лимит: стандартные дают до 1000 потоков, корпоративный до 3000. При двух привязанных адресах общее число потоков делится между ними пополам. Пакеты по потокам не складываются, поэтому рост нагрузки закрывается переходом на старший вариант. Аккаунты с подозрительно высокой активностью ставятся на паузу до выяснения.</p>
<h3 id="chto-delat-esli-u-sotrudnika-menyaetsya-adre">Что делать, если у сотрудника меняется адрес провайдера?</h3>
<p>Привязанный адрес меняется без ограничений в настройках кабинета, это первый путь. Второй путь удобнее для команды: формат <code>IP:PORT:LOGIN:PASS</code> работает с любой машины и от адреса провайдера не зависит. Строка выдаётся сотруднику один раз и живёт в его профиле браузера.</p>
<h3 id="kak-podklyuchitsya-k-proksi-posle-pokupki">Как подключиться к прокси после покупки?</h3>
<p>Всё делается в кабинете сервиса: после регистрации и покупки указывается свой адрес в настройках, пакет включается примерно за 5 минут. Дальше в разделе выдачи забирается список в нужном формате, ссылкой или файлом, и строки раскладываются по профилям согласно вашей схеме кабинетов.</p>
<p>Соседние задачи разобраны отдельно: <a href="/zadachi/seo-pozicii/">съём позиций и работа с выдачей</a> для тех, кто ведёт кабинеты вместе с продвижением, <a href="/zadachi/internet-magazin/">интернет-магазин с прайсами и остатками</a> про суточные прогоны по поставщикам, а также сводка ответов в материале <a href="/zadachi/chastye-voprosy/">частые вопросы о прокси IPv4</a>. Перед раскладкой кабинетов полезно посмотреть, <a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a>, чтобы число профилей и потоков сошлось с пакетом.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/zadachi/neskolko-kabinetov/">https://kupit-proxy-ipv4.ru/zadachi/neskolko-kabinetov/</a></p>]]></content:encoded></item>
<item><title>Частые вопросы о прокси IPv4: ответы по покупке, доступу и проверке</title><link>https://kupit-proxy-ipv4.ru/zadachi/chastye-voprosy/</link><guid isPermaLink="true">https://kupit-proxy-ipv4.ru/zadachi/chastye-voprosy/</guid><description>Прокси IPv4 в нашем пуле это приватные серверные адреса, доступ к которым открывается на выбранный срок: сутки, неделя, месяц или корпоративный месяц. В пуле…</description><content:encoded><![CDATA[
<p class="vvod">Прокси IPv4 в нашем пуле это приватные серверные адреса, доступ к которым открывается на выбранный срок: сутки, неделя, месяц или корпоративный месяц. В пуле держится около 12 000 активных адресов, трафик безлимитный, потоков до 1000 на стандартных пакетах и до 3000 на корпоративном, в пакет входят две привязки своего адреса и выдача списка в двух форматах.</p>
<p>Ниже собраны вопросы, которые нам задают чаще остальных. Они разложены по темам: продукт, покупка, доступ, протоколы, проверка и конкретные задачи. Ответы короткие, факты те же, что в кабинете. Там, где вопрос тянет на отдельный разбор, стоит ссылка на подробную страницу справочника.</p>
<h2 id="proksi-ipv4-i-ustroystvo-pula">Прокси IPv4 и устройство пула</h2>
<h3 id="chto-takoe-proksi-ipv4">Что такое прокси IPv4?</h3>
<p>Это промежуточный сервер с адресом четвёртой версии протокола IP, через который идёт ваш запрос. Целевой сайт видит адрес этого сервера и отвечает на него, а программа получает ответ обратно уже по своему соединению. Механика запроса, заголовков и обратного пути расписана в материале про то, <a href="/osnovy/chto-takoe-proxy-ipv4/">как устроен прокси IPv4 изнутри</a>.</p>
<h3 id="chem-proksi-ipv4-otlichayutsya-ot-ostalnyh-t">Чем прокси IPv4 отличаются от остальных типов доступа?</h3>
<p>IPv4 это сам адрес, HTTP и SOCKS это способы обращения к нему. В одном пакете доступны IPv4, HTTP, HTTPS, SOCKS4 и SOCKS5: адреса одни и те же, меняется строка подключения. Докупать отдельный тип под другой софт не требуется.</p>
<h3 id="otkuda-berutsya-eti-adresa">Откуда берутся эти адреса?</h3>
<p>Адреса серверные, они живут на оборудовании и в подсетях дата-центров. Отсюда стабильный отклик и предсказуемое поведение под нагрузкой: канал у серверной площадки шире домашнего и не проседает от чужого трафика. Подробности про происхождение и подсети собраны там, где разобрано, <a href="/osnovy/servernye-adresa/">откуда берутся серверные адреса</a>.</p>
<h3 id="skolko-adresov-v-pule">Сколько адресов в пуле?</h3>
<p>Около 12 000 активных IPv4 и SOCKS5. Список открыт только клиентам сервиса и обновляется в режиме реального времени, поэтому сохранённый файл недельной давности уже отличается от того, что отдаёт кабинет сегодня.</p>
<h3 id="kak-ustroena-rotaciya">Как устроена ротация?</h3>
<p>Ротация автоматическая и происходит внутри пула. Запросы расходятся по разным адресам без ручных переключений, отдельной кнопки смены адреса нажимать не нужно. Именно из-за этого мы всегда просим перечитывать список перед крупным прогоном: состав пула живой, и строки, сохранённые давно, отвечают уже хуже свежих.</p>
<h3 id="nuzhno-li-nastraivat-rotaciyu-v-softe">Нужно ли настраивать ротацию в софте?</h3>
<p>Нет, отдельная настройка не требуется. Программа работает со списком адресов, а распределение запросов по ним задаётся её собственными правилами: A-Parser и ZennoPoster умеют брать следующую строку на каждый поток или на каждый запрос. Мы со своей стороны держим пул обновлённым, дальше выбор строки остаётся за прогоном.</p>
<h3 id="proksi-kakih-stran-popadayut-v-spisok">Прокси каких стран попадают в список?</h3>
<p>Пул это микс со всего мира, адреса приходят более чем из 200 стран. Выборка по отдельной стране не делается: список отдаётся целиком, разнообразие подсетей получается само собой. Для сбора открытых данных, проверки выдачи и разведения кабинетов такая схема работает ровно.</p>
<h3 id="kakoy-uroven-anonimnosti-u-etih-adresov">Какой уровень анонимности у этих адресов?</h3>
<p>Прокси не подставляют в запрос служебные заголовки с исходным адресом клиента, поэтому целевой сайт видит адрес из пула. Что именно уходит в заголовках и как это проверить руками, показано в разборе про <a href="/osnovy/urovni-anonimnosti/">уровни анонимности прокси</a>.</p>
<h2 id="chto-vhodit-v-paket">Что входит в пакет</h2>
<h3 id="chto-voobsche-daet-paket">Что вообще даёт пакет?</h3>
<p>Пакет это срок доступа к пулу плюс лимит одновременных потоков. Внутри: адреса, безлимитный трафик, привязки, форматы выдачи и все протоколы сразу. Полная раскладка по пунктам лежит на странице про <a href="/pokupka/chto-vhodit-v-paket/">полный состав пакета по позициям</a>.</p>
<div class="tabl"><table><thead><tr><th>Что входит</th><th>Значение</th><th>Замечание</th></tr></thead><tbody><tr><td>Адреса</td><td>около 12 000 активных IPv4 и SOCKS5</td><td>список обновляется в реальном времени</td></tr><tr><td>Потоки</td><td>до 1000 на стандартных пакетах, до 3000 на корпоративном</td><td>пакеты по потокам не складываются</td></tr><tr><td>Трафик</td><td>безлимитный на всех вариантах</td><td>считать гигабайты не нужно</td></tr><tr><td>Привязки</td><td>2 адреса одновременно</td><td>менять можно свободно в настройках</td></tr><tr><td>Протоколы</td><td>IPv4, HTTP, HTTPS, SOCKS4, SOCKS5</td><td>рекомендуем SOCKS5</td></tr><tr><td>Форматы выдачи</td><td><code>IP:PORT</code> и <code>IP:PORT:LOGIN:PASS</code></td><td>ссылкой или файлом</td></tr><tr><td>География</td><td>200+ стран, микс со всего мира</td><td>выборка по отдельной стране не делается</td></tr><tr><td>Сроки доступа</td><td>сутки, неделя, месяц, корпоративный месяц</td><td>включение примерно за 5 минут</td></tr><tr><td>Тест</td><td>бесплатный, до 2 часов</td><td>под конкретный запрос перед покупкой</td></tr></tbody></table></div>
<h3 id="skolko-potokov-daet-paket">Сколько потоков даёт пакет?</h3>
<p>Стандартные пакеты держат до 1000 одновременных потоков, корпоративный до 3000. Поток это одно открытое соединение к целевому сайту, и софт вроде A-Parser, ZennoPoster и Key Collector показывает эту величину прямо в настройках прогона.</p>
<h3 id="skladyvayutsya-li-potoki-dvuh-paketov">Складываются ли потоки двух пакетов?</h3>
<p>Нет. Пакеты по потокам не складываются: два стандартных пакета на одном аккаунте работают каждый со своим лимитом. Рост нагрузки закрывается переходом на старший вариант.</p>
<h3 id="pravda-li-chto-trafik-bezlimitnyy">Правда ли, что трафик безлимитный?</h3>
<p>Да, трафик безлимитный на всех сроках доступа. Объём выкачанных страниц на выбор пакета не влияет, платите вы за срок и за число потоков. Тем, у кого прогоны идут круглосуточно и объём заранее неизвестен, спокойнее всего работается на <a href="https://iprazon.com/proxy/bezlimitnye">пакетах с безлимитным трафиком</a>.</p>
<h3 id="skolko-paketov-mozhno-derzhat-na-odnom-akkau">Сколько пакетов можно держать на одном аккаунте?</h3>
<p>Ограничений нет. Агентство спокойно держит несколько пакетов под разных клиентов, разработчик добавляет второй под отдельный проект, всё это живёт под одной учётной записью с общим балансом.</p>
<h2 id="pokupka-test-oformlenie-srok">Покупка: тест, оформление, срок</h2>
<h3 id="kak-poprobovat-do-pokupki">Как попробовать до покупки?</h3>
<p>Перед оплатой доступен бесплатный тест длительностью до 2 часов под ваш запрос. Заранее предугадать поведение каждого целевого сайта и каждой программы нельзя, поэтому проверка идёт на вашем софте и ваших доменах. План проверки по минутам разложен в материале про <a href="/pokupka/besplatnyy-test/">бесплатный тест на два часа</a>.</p>
<h3 id="kak-zapustit-test">Как запустить тест?</h3>
<p>Порядок такой: выбрать тип прокси под свой софт, зарегистрироваться в кабинете, отправить запрос теста из меню, указать свой адрес в настройках, активировать доступ, затем написать оператору логин и тип прокси. Дальше два часа идут под вашу задачу.</p>
<h3 id="kak-oformit-paket">Как оформить пакет?</h3>
<p>Оформление занимает два движения: выбрать пакет в кабинете и подтвердить списание с баланса. Баланс пополняется там же, сумма и способ выбираются при пополнении. Весь путь от регистрации до первого рабочего запроса собран в материале про <a href="/pokupka/kak-kupit/">порядок покупки шаг за шагом</a>.</p>
<h3 id="kakoy-srok-brat">Какой срок брать?</h3>
<p>Разовая выгрузка каталога закрывается сутками, недельная проверка гипотезы неделей, постоянный сбор данных месяцем. Когда задача уже вышла на регулярный режим, срок берётся с запасом в одну ступень: продлевать вручную семь раз подряд утомительно. Разбор по каждому варианту лежит на странице про то, <a href="/pokupka/srok-dostupa/">как выбрать срок доступа</a>.</p>
<h3 id="skolko-potokov-zakazyvat">Сколько потоков заказывать?</h3>
<p>Считаем от требуемой скорости. Число целевых страниц делим на часы прогона, получаем запросы в час, дальше умножаем на среднее время отклика из теста и добавляем примерно треть сверху под пиковые моменты, когда часть соединений висит в ожидании ответа. Цифра из теста работает точнее любой круглой величины.</p>
<h3 id="kak-bystro-vklyuchaetsya-paket">Как быстро включается пакет?</h3>
<p>Пакет включается примерно за 5 минут после оплаты. Статус меняется в списке, раздел выдачи начинает отдавать список адресов, и запросы можно пускать сразу. Оформить доступ и посмотреть все сроки можно там, где мы предлагаем <a href="https://iprazon.com/products/kupit-proxy-ipv4">оформить доступ к пулу прокси IPv4</a>.</p>
<h2 id="dostup-i-vydacha-spiska">Доступ и выдача списка</h2>
<h3 id="kakie-est-sposoby-dostupa">Какие есть способы доступа?</h3>
<p>Их два. Первый: в настройках кабинета указывается адрес машины, с которой пойдут запросы, и прокси работают без логина. Второй: берётся формат с логином и паролем, авторизация уезжает прямо в строку подключения. Оба варианта входят в пакет и подробно разобраны там, где показаны <a href="/osnovy/avtorizaciya/">два способа доступа к пулу</a>.</p>
<h3 id="v-kakom-formate-prihodit-spisok">В каком формате приходит список?</h3>
<p>Форматов два: <code>IP:PORT</code> для работы с привязкой своего адреса и <code>IP:PORT:LOGIN:PASS</code> для доступа по паре логина и пароля. Выбор формата делается в кабинете и меняется в любой момент.</p>
<pre><code># формат под привязанный адрес
45.132.19.204:8080
45.132.19.207:8080

# формат с логином и паролем
45.132.19.204:8080:user7714:kd82mq
45.132.19.207:8080:user7714:kd82mq</code></pre>
<h3 id="spisok-prihodit-ssylkoy-ili-faylom">Список приходит ссылкой или файлом?</h3>
<p>В кабинете доступны оба варианта: скопировать ссылку на выдачу или скачать файл. Ссылку удобно отдать планировщику, тогда программа тянет свежие строки перед каждым запуском. Что делать со списком дальше, показано в материале про то, <a href="/pokupka/format-vydachi/">как приходит список адресов</a>.</p>
<h3 id="skolko-adresov-mozhno-privyazat">Сколько адресов можно привязать?</h3>
<p>В пакет входит одновременная привязка 2 адресов. Типовой сценарий это рабочая машина и сервер либо офис и домашний кабинет сотрудника. Есть один момент для расчёта нагрузки: при двух привязанных адресах общий лимит потоков делится между ними пополам, поэтому пакет на 1000 потоков даёт по 500 на каждый адрес.</p>
<h3 id="kak-smenit-privyazannyy-adres">Как сменить привязанный адрес?</h3>
<p>Привязка меняется без ограничений прямо в настройках кабинета. Провайдер с меняющимся адресом работе не мешает: администратор переписал строку и продолжил прогон. Переезд на другую машину со всеми деталями описан в разборе про <a href="/podklyuchenie/smena-privyazki/">смену привязанного адреса</a>.</p>
<h2 id="protokoly-chto-vybrat-pod-soft">Протоколы: что выбрать под софт</h2>
<h3 id="chem-http-otlichaetsya-ot-socks5">Чем HTTP отличается от SOCKS5?</h3>
<p>HTTP-прокси разбирает запрос на уровне протокола передачи гипертекста и умеет работать с его заголовками. SOCKS5 работает ниже, он просто проносит поток байтов до нужного хоста и порта, поэтому пропускает произвольные протоколы и умеет отдавать резолвинг имён на свою сторону. Сравнение по пунктам лежит в разборе <a href="/protokoly/http-https-socks/">HTTP, HTTPS и SOCKS по отличиям</a>.</p>
<h3 id="chto-stavit-v-brauzere">Что ставить в браузере?</h3>
<p>Браузеру подходит и HTTP, и SOCKS5. HTTPS-страницы в обоих случаях идут через туннель по методу CONNECT, содержимое остаётся зашифрованным до целевого сервера. Пошаговая настройка профилей описана там, где показано <a href="/podklyuchenie/v-brauzere/">подключение прокси в браузере</a>.</p>
<h3 id="chto-vybrat-parseru">Что выбрать парсеру?</h3>
<p>Мы рекомендуем SOCKS5. Он держит любые порты и типы соединений, отдаёт разрешение доменных имён на сторону прокси и потому закрывает вопрос с запросами к DNS мимо посредника. Для сборщиков прайсов и выдачи это самый предсказуемый вариант, и работает он на тех же адресах пула.</p>
<h3 id="chto-nuzhno-pochtovoy-programme">Что нужно почтовой программе?</h3>
<p>Почте нужен SOCKS5: SMTP, IMAP и POP3 ходят по своим портам, HTTP-прокси такие соединения не проносит. Строка подключения при этом остаётся привычной, меняется только схема. Сокетный вариант оформляется там же, где мы отдаём <a href="https://iprazon.com/products/kupit-proxy-socks5">прокси SOCKS5 для программ и почтовых клиентов</a>.</p>
<h3 id="kakie-porty-nuzhny-pochte">Какие порты нужны почте?</h3>
<p>Отправка идёт на 25, 465 или 587, приём на 993 для IMAP и 995 для POP3. Порт 587 с обязательной аутентификацией берут чаще остальных, 465 держит шифрование с самого начала соединения. Что выбрать под конкретный почтовый сервер, разобрано на странице про <a href="/protokoly/pochtovye-porty/">порты 25, 465 и 587</a>.</p>
<h2 id="proverka-posle-podklyucheniya">Проверка после подключения</h2>
<h3 id="kak-ubeditsya-chto-proksi-rabotaet">Как убедиться, что прокси работает?</h3>
<p>Один запрос через <code>curl</code> на сервис, который возвращает адрес: ответ должен показать адрес из пула. Затем тот же запрос на целевой домен, чтобы увидеть реальный код ответа. Порядок проверки от первой команды до массового прогона расписан в материале про то, <a href="/proverka/kak-proverit/">как проверить работу прокси</a>.</p>
<pre><code># адрес на выходе и код ответа целевого домена
curl -x socks5h://45.132.19.204:1080 https://ifconfig.io
curl -x socks5h://45.132.19.204:1080 -o /dev/null -w "%{http_code} %{time_total}\n" https://example.com</code></pre>
<h3 id="chem-proveryat-spisok-pachkoy">Чем проверять список пачкой?</h3>
<p>Мы рекомендуем чекер от Zennolab, у него есть демонстрационная версия. Он проходит список целиком и показывает отвечающие строки, время отклика и тип прокси. Если число рабочих строк совпало с ожиданием, настройка закончена.</p>
<h3 id="kak-izmerit-vremya-otklika">Как измерить время отклика?</h3>
<p>Отклик измеряется на своём целевом домене, повторными запросами, с записью распределения. Одиночный замер по общему чекеру показывает погоду в вакууме: интересна медиана по нескольким десяткам запросов и разброс между ними. Методика с командами и разбором полей приведена в материале про <a href="/proverka/skorost-i-otklik/">измерение скорости и отклика</a>.</p>
<h2 id="kody-otvetov-407-i-403">Коды ответов: 407 и 403</h2>
<h3 id="chto-delat-pri-otvete-407">Что делать при ответе 407?</h3>
<p>Ответ 407 приходит от самого прокси и говорит про авторизацию. Сверяем три вещи: формат строки подключения, пару логина и пароля, привязанный в кабинете адрес машины. Часть программ ждёт логин и пароль отдельными полями и ломает строку, склеенную через двоеточие. Полный порядок разбора собран на странице про <a href="/proverka/oshibka-407/">ошибку 407 по шагам</a>.</p>
<pre><code># смотрим, дошёл ли заголовок авторизации до прокси
curl -v -x http://user7714:kd82mq@45.132.19.204:8080 https://ifconfig.io 2&gt;&amp;1 | grep -i "Proxy-Auth"</code></pre>
<h3 id="chto-delat-pri-otvete-403">Что делать при ответе 403?</h3>
<p>Ответ 403 приходит уже от целевого сайта: он получил запрос и отказался его обслуживать. Смотрим на частоту запросов, набор заголовков, отпечаток клиента и поведение сессии. Обычно помогает снижение темпа и приведение заголовков к виду, который отдаёт настоящий браузер. Разбор причин по типам площадок лежит в материале про <a href="/proverka/oshibka-403/">ответ 403 при работе через прокси</a>.</p>
<h3 id="chto-smotret-kogda-oshibok-net-no-dannye-str">Что смотреть, когда ошибок нет, но данные странные?</h3>
<p>Проверяем запросы к системе доменных имён и отпечаток браузера. Программа иногда резолвит имена мимо посредника, и тогда адрес на выходе выглядит верным, при этом поведение сайта не сходится с ожидаемым. В SOCKS5 резолвинг передаётся на сторону прокси одной настройкой, в браузерах и парсерах для этого есть отдельная галочка.</p>
<h3 id="kak-ponyat-chto-uperlis-v-limit-potokov">Как понять, что упёрлись в лимит потоков?</h3>
<p>Софт показывает очередь ожидающих соединений, а часть запросов возвращается с отказом соединения. Первое, что мы просим сверить, это число привязанных адресов: при двух привязках лимит делится пополам, и расчёт по полной цифре перестаёт сходиться. Второе это настройки самого прогона, где заданное число потоков нередко выше того, которое реально нужно задаче.</p>
<h2 id="pod-kakie-zadachi-podhodit-pul">Под какие задачи подходит пул</h2>
<h3 id="podoydet-li-pod-sbor-dannyh">Подойдёт ли под сбор данных?</h3>
<p>Да, это основной сценарий. Серверные адреса держат высокий темп, безлимитный трафик снимает вопрос объёма, до 1000 потоков хватает большинству прогонов. Мы собрали типовые настройки прогонов там, где показаны <a href="https://iprazon.com/proxy/dlya-parsinga">серверные прокси под сбор данных</a>.</p>
<h3 id="podoydet-li-pod-sem-poziciy">Подойдёт ли под съём позиций?</h3>
<p>Да. Съём выдачи упирается в частоту запросов с одного адреса, и автоматическая ротация внутри пула снимает эту нагрузку. Key Collector и A-Parser принимают список прямо ссылкой на выдачу.</p>
<h3 id="podoydet-li-pod-neskolko-kabinetov">Подойдёт ли под несколько кабинетов?</h3>
<p>Да, разные кабинеты разводятся по разным адресам из пула вместе с отдельными профилями браузера. Отпечаток при этом задаётся антидетект-браузером, а адрес приходит от прокси. Как это устроено у команд, показано на странице про <a href="https://iprazon.com/proxy/privatnye">приватные адреса для рабочих кабинетов</a>.</p>
<h3 id="podoydet-li-pod-otpravku-pochty">Подойдёт ли под отправку почты?</h3>
<p>Да, при работе по SOCKS5 через порты 465 или 587. Почтовый клиент настраивается на сокетный прокси, дальше письмо уходит с адреса из пула, и заголовок Received показывает уже его. Приём по IMAP и POP3 идёт тем же порядком, меняются только номера портов.</p>
<h3 id="podoydet-li-pod-proverku-svoego-sayta-iz-dru">Подойдёт ли под проверку своего сайта из другой сети?</h3>
<p>Да, и это самая короткая из типовых задач. Сутки доступа и пара десятков потоков закрывают проверку доступности, вёрстки и поведения формы для стороннего посетителя. Отклик при этом мы советуем снимать несколькими сериями, чтобы отделить разовый всплеск от устойчивой картины.</p>
<div class="tabl"><table><thead><tr><th>Задача</th><th>Что брать</th><th>Куда смотреть подробно</th></tr></thead><tbody><tr><td>Сбор прайсов и каталогов</td><td>месяц, до 1000 потоков, SOCKS5</td><td><a href="/osnovy/skolko-adresov-nuzhno/">сколько адресов нужно под задачу</a></td></tr><tr><td>Съём позиций по семантике</td><td>неделя или месяц, 200 до 500 потоков</td><td><a href="/proverka/proverka-anonimnosti/">какие заголовки уходят с запросом</a></td></tr><tr><td>Работа с несколькими кабинетами</td><td>месяц, одна привязка, SOCKS5</td><td><a href="/osnovy/chto-vidit-sayt/">что сайт видит о вас через прокси</a></td></tr><tr><td>Отправка и приём почты</td><td>месяц, SOCKS5, порты 465 и 587</td><td><a href="/protokoly/smtp-cherez-proxy/">отправка писем через прокси</a></td></tr><tr><td>Прогоны с сервера или из скриптов</td><td>сутки или месяц, привязка адреса</td><td><a href="/podklyuchenie/v-programmah/">подключение в программах и на сервере</a></td></tr><tr><td>Соцсети и отложенный постинг</td><td>месяц, антидетект-браузер</td><td><a href="/zadachi/socseti-i-smm/">прокси для соцсетей и постинга</a></td></tr><tr><td>Проверка своего сайта из другой сети</td><td>сутки, до 50 потоков</td><td>раздел проверки и диагностики</td></tr></tbody></table></div>
<h2 id="prodlenie-vtoroy-paket-i-pereezd">Продление, второй пакет и переезд</h2>
<h3 id="chto-proishodit-kogda-srok-zakonchilsya">Что происходит, когда срок закончился?</h3>
<p>Доступ к выдаче закрывается, при этом учётная запись и настройки привязки сохраняются. Возобновление занимает минуты: пакет оформляется заново и включается примерно за те же 5 минут. Пакет, продлённый заранее, работает без паузы.</p>
<h3 id="kak-podnyat-nagruzku-esli-potokov-stalo-malo">Как поднять нагрузку, если потоков стало мало?</h3>
<p>Берём пакет со старшим лимитом. Складывать потоки нескольких пакетов нельзя, поэтому рост закрывается переходом на корпоративный вариант с лимитом до 3000 потоков. Сезонный пик удобно закрыть коротким сроком и вернуться к прежнему режиму.</p>
<h3 id="kak-perenesti-rabotu-na-druguyu-mashinu">Как перенести работу на другую машину?</h3>
<p>Меняем привязанный адрес в настройках и повторяем короткую проверку на новой машине. Настройки софта переносятся как есть: адреса и порты в списке остаются теми же. Если машина в работе первый раз, полезен разбор про <a href="/podklyuchenie/pervoe-podklyuchenie/">первое подключение по шагам</a>.</p>
<h3 id="chto-nuzhno-proverit-posle-lyubogo-pereezda">Что нужно проверить после любого переезда?</h3>
<p>Три вещи: адрес на выходе, код ответа целевого домена и время отклика. Пять минут на эти замеры экономят час поиска причины, когда прогон уже запущен и логи наполняются отказами. Все параметры пакета, которые при этом важны, перечислены на <a href="https://iprazon.com/products/kupit-proxy-ipv4">странице пакетов прокси IPv4</a>.</p>
<h2 id="chastye-voprosy">Частые вопросы</h2>
<h3 id="skolko-proksi-derzhitsya-v-onlayne">Сколько прокси держится в онлайне?</h3>
<p>Онлайн держится в районе 12 000 адресов в сутки. Это активные IPv4 и SOCKS5, доступ к ним открыт клиентам сервиса. Число живое, поэтому от прогона к прогону состав списка отличается.</p>
<h3 id="kak-chasto-obnovlyaetsya-spisok-adresov">Как часто обновляется список адресов?</h3>
<p>Список адресов обновляется в режиме реального времени. Практический вывод простой: перед крупным прогоном список перечитывается из кабинета. Ссылку на выдачу можно отдать планировщику, тогда свежие строки подтягиваются автоматически перед каждым запуском.</p>
<h3 id="kak-oplachivat-dostup">Как оплачивать доступ?</h3>
<p>Оплата идёт через личный кабинет: выбирается сумма и способ пополнения баланса, дальше пакет оформляется списанием с него. Баланс удобно держать заранее, когда пакеты берутся регулярно, тогда шаг оплаты не задерживает запуск.</p>
<h3 id="akkaunt-ne-aktiviruetsya-chto-delat">Аккаунт не активируется, что делать?</h3>
<p>Напишите по контактам на сайте, вам помогут запустить учётную запись. Оператору полезно сразу передать логин и тип прокси: тогда ответ приходит одним сообщением и переписка не растягивается на день.</p>
<p>Дальше по конкретным сценариям в этом же разделе разобраны <a href="/zadachi/seo-pozicii/">съём позиций и работа с выдачей</a> с расчётом потоков под объём семантики, <a href="/zadachi/internet-magazin/">сбор прайсов и остатков поставщиков</a> для интернет-магазина и <a href="/zadachi/neskolko-kabinetov/">несколько кабинетов одной компании</a> с разведением профилей по адресам. Если задача пока сформулирована в общих чертах, начните со страницы про то, <a href="/pokupka/kakie-proxy-pokupat/">какие прокси покупать под конкретную задачу</a>.</p><p>Источник: <a href="https://kupit-proxy-ipv4.ru/zadachi/chastye-voprosy/">https://kupit-proxy-ipv4.ru/zadachi/chastye-voprosy/</a></p>]]></content:encoded></item>
</channel></rss>
