Простой proxy-checker на node.js
Данный пакет предназначен для проверки работоспособности различных видов прокси(http, connect(https), socks4, socks5)
- node.js v9+ или использовать babel
Установка
npm i --save https://github.com/newx666/proxy-checker
Использование
'use strict';
const {ProxyChecker} = require('proxy-checker');
(async ()=>{
let pc = new ProxyChecker('127.0.0.1', 9050);
console.log(await pc.check());
})();
Результат:
{ "socks5": true, "socks4": true, "connect": false, "http": false }
Работоспособность каждого вида прокси, проверяется следующим образом:
- Определяется реальный IP
- Посредством прокси совершаем HTTP запрос на проверочный сервер (по умолчанию на http://ipinfo.io/ip )
- Если в теле ответа найден IP отличный от реального, то предпологается что прокси работает
Требование к проверочному серверу(по умолчанию) всего одно - он должен возвращать в теле HTTP ответа чистый IP (без тегов и т.п.)
Если вы по каким-то причинам не доверяете сторонним серверам, то можете загрузить на свой сервер файл request-checker.js , и запустить
wget https://raw.githubusercontent.com/newx666/proxy-checker/master/request-checker.js
HOST=<ВАШ_ВНЕШНИЙ_IP> PORT=<ЖЕЛАЕМЫЙ_ПОРТ> node request-checker.js
Это реализация простейшего сервера отвечающего описанным выше требованиям. Вам останется только в опциях прописать requestCheckUrl равным http://<ВАШ_ВНЕШНИЙ_IP>:<ЖЕЛАЕМЫЙ_ПОРТ>/ip
- BaseProxyChecker - базовый класс, на нем базируются все остальные чекеры
- HttpProxyChecker - класс для проверки HTTP прокси
- ConnectProxyChecker - класс для проверки CONNECT(https) прокси
- Socks4ProxyChecker - класс для проверки SOCKS4 прокси
- Socks5ProxyChecker - класс для проверки SOCKS5 прокси
- ProxyChecker - класс-обертка для всех прочих классов. Умеет проверять прокси на принадлежность к любому из описанных выше видов
Все описанные выше классы имеют одинаковый конструктор:
new HttpProxyChecker(proxyHost, proxyPort, options);
proxyHost и proxyPort думаю не нуждаются в пояснениях, а вот опции могут содержать следующее
- requestCheckUrl {string} - Ссылка на тот самый, описанный выше проверочный сервер. По умолчанию: http://ipinfo.io/ip
- checkResponse {function} - функция посредством которой проверяется ответ прокси пущенного через проверочный сервер. По умолчанию применяется внутренняя ф-я которая просто проверяет ответ на наличие IP адреса отличающегося от реального
- timeout {int} - время в милисекундах за которое надо произвести проверку одного типа прокси. По умолчанию 10000(10 секунд)
- userAgent {string} - заголовок User-Agent посылаемый проверочному серверу. По умолчанию - один из UA от Firefox'a
- realIp {string} - если задан, то чекер не будет пытаться выяснить реальный IP посредством запроса к проверочному серверу, а просто поверит на слово (по умолчанию не задан)
У класса ProxyChecker есть еще одна дополнительная опция:
- checkProxyTypes {Array<string>} - массив названий типов прокси, на которые надо проверить кандидата. Доступны следующие варианты: 'socks5', 'socks4', 'connect', 'http'. По умолчанию выставлены все доступные варианты.
'use strict';
const {ProxyChecker} = require('proxy-checker');
let pc = new ProxyChecker(PROXY_HOST, PROXY_PORT, {
requestCheckUrl: 'http://ipinfo.io/ip', // Тот самый описанный выше проверочный сервер
checkResponse: this.constructor._defaultCheckResponse, //Метод проверяющий
timeout: 10000,
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
isDebug: process.env.DEBUG || false,
realIp: null,
checkProxyTypes: ['socks5', 'socks4', 'connect', 'http']
});
- Реализовать проверку прокси из списка
- Реализовать CLI интерфейс для удобного запуска