Verification

Проверка бесплатного прокси перед тем, как доверить ему реальный трафик

3 min read Published Updated 470 words

Бесплатные прокси чаще выходят из строя, чем работают. Публичный список перебирает десятки тысяч кандидатов, и ваша задача — найти небольшое подмножество, которое в данный момент живо, достаточно быстро и не является активно вредоносным. Пять тестов, каждый дешёвый, выполняются по порядку.

Тест 1: Доступность по TCP

curl --connect-timeout 5 --proxy http://1.2.3.4:8080 \
     -s -o /dev/null -w "%{http_code}\n" \
     https://api.ipify.org

Ненулевой код возврата или пустой ответ означают, что прокси мёртв. Около 60–80% любого бесплатного списка в любой момент времени не пройдут этот тест. Пропустите сразу и не повторяйте.

Тест 2: Проверка исходящего IP

Тот же вызов возвращает публичный IP, с которого исходил запрос. Если он равен 1.2.3.4 — адресу прокси — прокси правильно перенаправляет трафик. Если он равен вашему локальному IP, прокси сломан или прозрачен: он принял соединение, но на самом деле не ретранслировал через себя. Считайте это ошибкой, даже если TCP прошёл успешно.

Тест 3: Прозрачность заголовков

curl --proxy http://1.2.3.4:8080 https://httpbin.org/headers

Ответ возвращает заголовки, которые получил целевой сервер. Ищите X-Forwarded-For, Via или Forwarded с вашим реальным IP. Если вы их найдёте, прокси работает в прозрачном или анонимном режиме, а не в элитном. Для HTTPS через CONNECT это не имеет значения — целевой сервер видит только рукопожатие TLS, никаких заголовков приложения — но для обычного HTTP это определяет, подходит ли прокси для поставленной задачи.

Тест 4: Задержка под нагрузкой

Однократное измерение времени шумное. Выполните десять последовательных запросов через прокси и возьмите медиану. Всё, что выше двух секунд, непригодно для интерактивной работы. Менее 500 миллисекунд — конкурентоспособно с отсутствием прокси. Между этими значениями прокси подходит для пакетного сбора данных, но не для просмотра веб-страниц.

Тест 5: Целостность отпечатка TLS

Подключитесь через прокси к известному TLS-конечному узлу и проверьте, что цепочка сертификатов совпадает с той, что вы получаете без прокси. Несовпадение означает, что прокси перехватывает TLS — выполняет атаку «человек посередине», и ваш «зашифрованный» трафик на самом деле не шифруется после прокси. Это редко встречается на правильно настроенных SOCKS-прокси (они не видят TLS), но появляется на неправильно настроенных корпоративных HTTPS-прокси и на некоторых вредоносных публичных узлах. openssl s_client -proxy 1.2.3.4:8080 -connect example.com:443 выводит цепочку.

Практический рабочий процесс

Загрузите список, отфильтруйте по стране и протоколу, распределите пять тестов по параллельному пулу из примерно 50 рабочих и сохраните выжившие. Из 100 сырых кандидатов типичный запуск даёт 5–15 пригодных записей. Скорость устаревания составляет примерно 30–60 минут для HTTP и HTTPS, немного дольше для SOCKS — запланируйте обновление с такой периодичностью и передайте выживший набор в ваш скрапер или конфигурацию браузера. Кэшируйте результаты тестов на время жизни одного пакета и повторно тестируйте на следующем.