На прошлой неделе у меня было довольно много проблем в компании, связанных с запрещенными сайтами. В ней использовался обширный каталог «запрещенных сайтов», в котором хранились все сайты, кроме нескольких популярных. По сути, нет доступа к игровым сайтам, нет личной электронной почты и нет Сисадминства.
Вчера я обнаружил, что к одному из моих личных доменов можно получить доступ.
Возвратившись к моему домашнему компьютеру, через несколько минут, я создал свой собственный функционирующий прокси-сервер. Следуя инструкциям ниже, вы тоже сможете его создать.
Содержание
Предпосылки
Если мы хотим сделать это, то вот что нам нужно:
- Веб-хостинг
Теоретически работать будет на любом веб-хостинге, даже на таком, как старый компьютер в вашем подвале или даже бесплатный онлайн-хостинг.
- PHP5 или выше c функцией cURL
Найдите это на веб-сайте своего веб-хостинга. Если это платный хостинг, вы можете почти рассчитывать на это. Особенно cURL — это функция, которая будет отключена на большинстве бесплатных веб-серверов.
- Разрешение на создание прокси-сервера
Да, это так. Некоторые веб-хостинги явно запретят вам создавать прокси-сервер (или чат-комнату, если на то пошло) в их содержании. И наверняка они узнают об этом.
Загрузите и установите GlypeProxy
GlypeProxy — это бесплатный, автономный PHP-скрипт. Это означает, что он легкий и невероятно прост в настройке. Вы можете скачать его с репозитория на GitHub (https://github.com/k1995/glype).
Затем загрузите файлы в подкаталог на вашем веб-сервере. Если вы видите папку с именем «www» или называющуюся так после папки вашего доменного имени (например, domain.com), то создайте там подпапку. Вам нужно избегать использования слова «прокси», потому что некоторые компании распознают это. Вместо этого используйте «web» или «surf».
Существует несколько способов загрузки файлов. Если вы уже знаете это, перейдите к следующему абзацу. Здесь они отсортированы от степени усилий.
- Загрузка и распаковка ZIP
Посмотрите в менеджере файлов опции «unpack (распаковать)» или «extract (извлечь)». Затем вы можете загрузить его за один прием. Это поддерживается не везде.
- Доступ к FTP
Используйте FTP-клиент (например, FileZilla) для FTP доступа к вашему веб-хосту и перенесите туда все файлы. Поддерживается многими хостингами.
- Загрузка вручную
Вам действительно не захочется этого делать — вы точно уверены, что у вас нет альтернатив выше? Последним решением будет вручную загрузить все файлы и структуры папок. Или начните искать другого хостера — это может быть не такая плохая идея.
Готово к использованию
Нет никакой реальной настройки. Просто введите в браузере каталог, в который будут помещены все эти файлы (например, domain.com/surf) и GlypeProxy. Если вам не нравится логотип, вам придется заменить его вручную. Но если вы хотите использовать прокси-сервер для личного использования, некоторый небольшой брендинг не имеет значения.
Создание прокси-сервера для просмотра веб-страниц
Пользователи могут вводить любой URL-адрес и, после расширения опций, выбрать кодирование URL-адреса, страницы, разрешить куки-файлы, скрипты и объекты. Кодирование страницы может помочь вам получить доступ к некоторым сайтам, к которым все еще не удается получить доступ, но иногда может привести к повреждению веб-страницы.
Настройки администратора
Хотя Glype — мощный прокси-скрипт, инструменты администрирования, очевидно, являются основой поддержки. Возможно, вы этого не знаете, но многие инструменты онлайн-прокси работают на Glype, как и тот, который вы только что создали. Настройки администратора оставляют место не только для настройки, но и для улучшения. Вы можете назначить специальные коды для проблемных веб-сайтов и изменить списки пользовательских агентов и прокси.
Создание прокси-сервера для просмотра веб-страниц
Наиболее полезными для начинающих пользователей будут инструменты кэширования (на фото выше), журналы и черные списки. Инструменты кэширования могут помочь вам улучшить скорость просмотра, сохранив некоторые файлы со всех или на некоторые из уже посещенных веб-сайтов. Журналы отключены по умолчанию, но могут иметь законное основание в будущем, в зависимости от того, кто использует ваш прокси-сервер. Всегда указывайте, что вы храните эти журналы. Наконец, черные списки позволят вам блокировать (все, кроме) несколько сайтов или пользователей.
Чтобы получить доступ к панели администратора, введите в браузере admin.php на своем веб-сервере (например, domain.com/surf/admin.php).
Если GlypeProxy кажется вам слишком примитивным, то по этой ссылке — https://proxy-sale.com/amerikanskie-proksi.html можно купить американские прокси, которые можно использовать для различных целей, будь то парсинг, соцсети, игры, или просто веб-серфинг.
Прокси для Телеграм – это сервера, которые анонимизируют пользователя, подставляя свой IP-адрес вместо пользовательского. После того, как Роскомнадзор заблокировал приложение Павла Дурова, использование таких программ с заграничным IP позволяет обойти запрет мессенджера в России. Программы-блокираторы видят абонента, который подключается из-за рубежа и не предпринимают никаких действий для ограничения связи. Telegram через прокси будет нормально работать, без зависания и отключения.
Мы рекомендуем использовать платные прокси. т.к. они обеспечивают более стабильную работу Телеграм, чем бесплатные. Надёжные прокси вы можете купить на сайте proxys.io. Там Вам с радостью ответят на все ваши вопросы и помогут с настройкой.
Бесплатные сервера
MTPROTO
Для мессенджера можно настроить три вида протоколов: MTPROTO, Socks5 и HTTP.
Для протокола MTPROTO разработчики приложения создали собственные сервера.
Самые свежие Proxy для Телеграмма от 21.09.2020!
Цифровая блокировка от РКН продолжается! Вот список работающих прокси:
Рекомендуем: Приватные высококачественные прокси-сервера по доступным ценам от YouProxy. HTTPS и SOCKS5 в одном заказе. Оплачивая заказ — получаете оба протокола для использования.
Хост: tginfo-proxy.duckdns.org
Порт: 443
Ключ: 7jszQ18ikM72HpQcp2f4sqlzMy5hbWF6b25hd3MuY29t
Хост: tginfo.likesky.blue
Порт: 443
Ключ: dd80b893632dd27e71fd5a37c6abf064b5
Ссылка tg://proxy?server=tginfo.likesky.blue&port=443&secret=dd80b893632dd27e71fd5a37c6abf064b5
Хост: tginfo.themarfa.online
Порт: 500
Ключ: dd828b44917e30834040992766a7ed2bbf
Ссылка: tg://proxy?server=tginfo.themarfa.online&port=500&secret=dd828b44917e30834040992766a7ed2bbf
Хост: tginfo.live.ovh
Порт: 2222
Ключ: dd80b893632dd27e71fd5a37c6abf064b5
tg://proxy?server=tginfo.live.ovh&port=2222&secret=dd80b893632dd27e71fd5a37c6abf064b5
Хост: tginfo.ss5.ch
Порт: 2222
Ключ: dd80b893632dd27e71fd5a37c6abf064b5
tg://proxy?server=tginfo.ss5.ch&port=2222&secret=dd80b893632dd27e71fd5a37c6abf064b5
Прокси для Белоруссии
Хост: proxy.duckdns.org
Порт: 443
Ключ: 7jszQ18ikM72HpQcp2f4sqlzMy5hbWF6b25hd3MuY29t
Ссылка tg://proxy?server=tginfo-proxy.duckdns.org&port=443&secret=7jszQ18ikM72HpQcp2f4sqlzMy5hbWF6b25hd3MuY29t
Также вы можете скопировать ссылки и просто вставить из в любой диалог, они нужны для автоматической настройки.
tg://proxy?server=tginfo.likesky.blue&port=443&secret=dd80b893632dd27e71fd5a37c6abf064b5
tg://proxy?server=tginfo.themarfa.online&port=500&secret=dd828b44917e30834040992766a7ed2bbf
tg://proxy?server=tginfo.live.ovh&port=2222&secret=dd80b893632dd27e71fd5a37c6abf064b5
tg://proxy?server=tginfo.ss5.ch&port=2222&secret=dd80b893632dd27e71fd5a37c6abf064b5
tg://proxy?server=proxy.unlockgram.it&port=443&secret=c4d5f5a91f3b99b40a6dc8d15a18e135
Важно! Чтобы ссылки работали, нужно обходить запрет с помощью VPN-сервера. Здесь можно подробно прочитать как настроить VPN для Телеграмма.
Еще в помощь ссылки с рабочими серверами:
- Socks 5 https://webanetlabs.net/publ/9-1-0-730
- HTTP https://webanetlabs.net/publ/24-1-0-1025
Используем бот
Если мессенджер запустился через ВПН, то можно воспользоваться возможностями proxy bot для Telegram, он предоставляет данные серверов. Наберите в строке поиска имя @proxy_socks5_bot.
Будет найдено два контакта: @proxy_socks5_bot и @socks5_bot
Попробуйте один, если подключения не будет, то второй. @proxy_socks5_bot
Попросит перейти по ссылке и затем нужно нажать «Новый сервер».
Включите настройки.
Второй прокси бот в Телеграм предлагает бесплатные сервера для MTPROTO и Socks5.
Выбирайте любой и кликайте на подключение.
Инструкции по подключению на разных устройствах
Windows 10 и MacOS
Рассмотрим подробнее, как настроить прокси в Телеграмме десктопной версии на компьютере по шагам.
Кликните по пиктограмме меню.
Перейдите в настройки.
Перейдите в раздел продвинутых настроек. Для Telegram Mac OS proxy это будут «Дополнительные настройки».
Тапните ссылку «Тип соединения». В MAC – «Способ подключения».
Поставьте галочку «Использовать прокси».
Выберите протокол.
Далее покажем все три варианта.
Введите приведенные выше данные прокси сервера для Telegram.
Сохраните и дождитесь соединения.
Выберите любой бесплатный прокси для Телеграм, например, 31.13.224.12:9999. Введите его значения, логин и пароль оставьте пустыми.
Сохраните, проверьте соединение.
Иногда free proxy for Telegram могут не работать, поэтому следует подбирать. Мы рекомендуем пользоваться MTPROTO, так как он практически всегда доступен и работает быстрее.
Так методом перебора вы найдете free Socks5 proxy for Telegram, как настроить мы рассказали выше: никаких сложностей процедура вызвать не должна.
Также по ссылке выберите сервер, попробуем 51.15.216.118:3128.
После сохранения ждите пока программа подключится.
Если сервер не отвечает, пробуйте другой.
Подключение по ссылкам
Автоматическая настройка proxy Telegram доступна по ссылкам. Так как мессенджер и все ресурсы, с ним связанные, блокируются, то ссылки будут доступны только при наличии VPN. После успешного подключения сервера к приложению, вы можете удалить клиента, так как связь через него в разы медленнее. Если вам нужен только обход блокировки, то использовать ВПН не целесообразно.
Далее полная инструкция, как настроить прокси в Телеграмме на компьютере автоматически (если ссылка не доступна, проверьте активность ВПН-клиента).
Скопируйте текст ссылки и введите в строку адреса браузера. Нажмите кнопку «применить настройки…»в центре.
Согласитесь с открытием приложения.
И включите автоматические настройки MTPROTO прокси для Телеграм.
Как обойти блокировку на iPhone и iPad
Принцип действий аналогичен тем, что мы выполняли на Telegram desktop proxy, отличается лишь меню. Вы также можете использовать разные протоколы, подбирая рабочий.
Как настроить прокси MTPROTO в Телеграмме на iPhone и iPad с полным описанием шагов приведем далее.
Зайдите в настройки приложения и внизу выберите тип соединения прокси.
Кликните по ссылке «Добавлять».
Обратите внимание, что в настройках Telegram proxy на iOS отсутствует пункт выбора HTTP, приложение в этой операционной системе работает только с MTPROTO и Socks5. Выберите протокол и введите данные.
Сохранитесь и соединение будет установлено. Настройки Телеграм прокси на iPhone незначительно различаются лишь интерфейсом.
Socks Proxy на Telegram под iOS устанавливается аналогично – выбирайте сервер и указывайте его адрес и порт. При недоступности ресурса необходимо перебирать разные адреса.
Добавление для Андроид
Для полноты картины расскажем, как настроить прокси в Телеграмме для Андроид, это тоже не вызывает затруднений.
Переходите в меню и выбирайте настройки.
Затем вам нужны данные и диск.
В разделе настроек прокси в самом низу кликайте на ссылку.
Затем коснитесь кнопки добавления.
Выберите протокол, HTTP также не доступен, так как это мобильное устройство.
Введите параметры сервера.
Для Socks5
Для MTPROTO
После сохранение установка proxy для Telegram на Android будет завершена.
И снова, если не удалось сразу попасть на рабочий ресурс, подбирайте ссылки с указанного сайта.
Как зайти в онлайн-версию
Официальный сайт, предоставляющий доступ к мессенджеру, тоже заблокирован. Но созданы зеркала веб-Телеграмм онлайн с прокси, которые работают без проблем. Перейдите по ссылке ниже и используйте мессенджер в привычном интерфейсе.
Введите телефон.
Дождитесь кода, который придет в смс.
Интерфейс зеркала вполне привычен.
Что делать при возникновении проблем
Телеграмм не подключается к прокси по двум причинам:
- Сервис Телеграм не соединяет.
- Вы неправильно ввели данные.
- Ресурс не доступен.
Если вы видите подпись «недоступен» под именем сервера в настройках, проверьте еще раз адрес, порт и ключ для MPROTO.
Иногда сам сервер может не работать или не справляться с большим числом подключений, когда каналы оказываются забиты запросами. В этом случае придется находить или искать рабочий.
В настоящее время прокси-серверами пользуются многие люди. Сервис удобен тем, что позволяет быстро и эффективно справляться со множеством задач:
Обходить региональные блокировки:
- Успешно продвигать бизнес в социальных сетях
- Работать на высокой скорости
- Накручивать лайки
- Приглашать большое количество людей в друзья и в сообщества в соцсетях
В нашей компании можно недорого приобрести рабочие сервера для Телеграм. Этот мессенджер в некоторых регионах запрещен, поскольку его администрация хранит в тайне персональную информацию о своих пользователях. Чтобы обойти эти запреты необходимо использовать надежные и функциональные Socks5 proxy telegram.
Прокси для телеграм: особенности
Приобретение надежного сервера ля мессенджера – это отличный способ обойти блокировку ресурса. Не имеет значения, где Вы находитесь, поскольку прокси надежно скроет Ваш реальный айпи адрес. На сегодняшний день телеграм – это распространенный мессенджер, который успешно эксплуатируется не только для общения, но и для раскрутки бизнеса. Несмотря на запреты со стороны правительства он все равно продолжает использоваться. Современные разработчики предлагают клиентам множество оптимальных возможностей обхода блокировок и прокси – один из них.
Каковы же возможности proxy:
- Легкий обход любых блокировок, в том числе и региональных
- Возможность получать доступ к мессенджеру на локальном уровне (к примеру, если телеграм запрещен к использованию в стенах офиса или учебного заведения)
- Можно легко оставаться незамеченным в интернете
- Анализ запросов поисковых систем
- Возможность создавать специализированных спам- вot
- Неограниченные возможности инвайтинга, рассылок
Список возможностей прокси широк и разнообразен. Поэтому, если Вы решите приобрести сервер, это будет оптимальное долгосрочное и выгодное вложение. Даже если Вы не планируете продвигать бизнес в телеграм, а хотите просто свободно общаться и находить новых друзей, сервер будет оптимальным решением. Для предпринимателей, которые продвигают в мессенджере товары и услуги, рекомендуется использовать один сервер для каждого одного (максимум двух) профиля.
Бесплатные и платные прокси
Бесплатные прокси для telegram – это вариант для всех без исключения пользователей. Их легко найти на любом специализированном ресурсе. Но вот эффективности и больших результатов от таких серверов ждать не стоит. Те, кто решат сэкономить и предпочтут работать на публичных прокси, вскоре поймут свою ошибку. Особенность бесплатного сервера заключается в том, что пользоваться им может неограниченное количество человек.
Отсюда проблемы:
- Низкая скорость работы – поскольку одним айпи пользуется большое количество людей одновременно.
- Риск быть замеченным в сети
- Риск быть заблокированным в мессенджере
- Нет обеспечения абсолютной безопасности личных данных
- Работа не стабильна
Досуг и бизнес в telegram с платными серверами – это комфорт и удобство.
SOCKS Proxy
Как известно, SOCKS — это сетевой протокол, позволяющий приложениям анонимно пользоваться ресурсами. Функция доступна в телегам Desktop и Mac. Также поддерживается возможность пользоваться прокси для мобильных приложений на ОС Android и iOS. Для решения проблем с блокировками разработчики телеграм создали новую версию протокола под названием MTProto Proxy,
направленный на одновременное решение нескольких актуальных проблем:
- Чтобы подключиться к мессенджеру теперь достаточно ввести только пароль
- Трафик практически не отличается от стандартного HTTPS/TLS
- Полное шифрование трафика
- Работает исключительно через прокси для телеграм
Специфика протокола предусматривает использование прокси исключительно для телеграм.
Если Вам необходимо купить прокси для телеграм, мы рады оказать помощь! У нас Вы подберете надежные прокси, которые позволят решать множество задач, в том числе обходить региональные и локальные блокировки. Используйте Telegram bot API, при помощи которого Ваша работа в мессенджере станет гораздо комфортнее.
Использование VPN является действенным и надежным способом обхода региональных блокировок, он настолько эффективен, что позволяет преодолевать ограничения даже великого китайского фаервола, считающегося одним из самых продвинутых инструментов фильтрации контента. Тем же целям служит и VPS или виртуальный сервер, только вот в отличие от VPN, он не получил такого широкого распространения среди рядовых пользователей.
Причина тому очень проста, вы сами всё поймете, когда уясните себе разницу между этими двумя технологиями. По сути, VPN и VPS это одно и то же, оба они используют промежуточный сервер со своим IP-адресом, но в VPN применяется шифрование трафика, а в прокси нет. Использование VPN более безопасно, но это не единственное его преимущество, — дополнительное шифрование пакетов позволяет противодействовать даже такой технологии фильтрации как DPI.
Впрочем, сбрасывать VPS со счетов тоже не стоит. Если вы не нуждаетесь в шифровании трафика и хотите изменить IP-адрес только для конкретных программ, можете смело юзать прокси, причем будет лучше всего, если станете использовать свой собственный виртуальный прокси сервер.
Где его взять?
Купить услугу у прокси-провайдеров, главное, чтобы сервер располагался в стране отличной от той, в которой действуют блокировки.
Примечание: цена в месяц на VPS для частных пользовательских нужд составляет в пределах от 2 до 5 долларов США.
Такие прокси-сервера нередко используются для поднятия полноценного VPN, но в данном примере речь идет о выделенном IP, который вы станете использовать для обхода блокировок и который будет указан в письме, переданном вам предоставившим услугу провайдером. В этом же письме вам будут переданы логин и пароль для подключения к серверу. Также вам понадобится специальная программа-клиент, с помощью которой вы станете подключаться к серверу. Называется она Putty.
Установив и запустив утилиту, в разделе настроек Session укажите IP-адрес, выданный вам прокси провайдером.
Затем перейдите к настройкам SSH -> Tunnels и укажите в порт (Source Port) 3128. Включите радиокнопки Auto и Dynamic, нажмите кнопку «Add».
Переключитесь в раздел Connection и задайте время соединения с сервером не менее 60 секунд. Нажмите «Open».
Введите полученные в письме логин и пароль и соединитесь с сервером.
Теперь осталось только настроить прокси в той программе, с помощью которой хотите получать доступ к заблокированному контенту.
Например, в Google Chrome необходимо будет зайти в настройки Система -> Настройки прокси-сервера.
В открывшемся окне свойств интернета включите автоопределение параметров подключения и использование прокси-сервера для локальных подключений. Нажмите «Дополнительно».
В поле Socks в качестве адреса прокси-сервера вбейте localhost, а порт укажите 3128.
Примерно так же настраивается прокси и в других программах его поддерживающих. Localhost — это адрес хоста, его дает Putty, 3128 — используемый в ней порт.
Что лучше, VPN или VPS
Поскольку мы затронули тему VPS, у читателей может возникнуть вопрос так что же всё таки лучше, готовый VPN или выделенный прокси-сервер? Однозначно ответить на этот вопрос не так просто. Используя выделенный VPS, вы знаете какая информация хранится на вашем сервере, с другой стороны передаваемый трафик не шифруется, что создает угрозу безопасности.
Использование VPN как готового продукта обеспечивает надежное шифрование, но при этом вы не контролируете сервера, через которые передается трафик. По идее, наилучшим решением было бы совместное использование обеих этих технологий, то есть поднятие собственного VPN на базе VPS, если только техническая реализация окажется под силу юзеру, решившему воспользоваться всеми преимуществами такого тандема.
Одно время всплыла тема, что в одной из онлайн-игр появилась такая довольно досадная штука, как каптча. Само по себе, отвлекаться от игры для ввода каптчи может обернуться не слишком хорошими последствиями, особенно, если вводишь её не с первого раза, могут и враги насолить. Но не в этом соль. Особенно плоха вещь для тех, кто использует локальных ботов. Те то, маленькие, спотыкаются об каптчу, и за это игра мнгновенно их штрафует потерей юнитов и ресурсов. Неприятная штука, что говорить.
Итак, задача:
Хочется, чтобы каптчу вводить не приходилось. Хоть если играешь сам, хоть если играет за тебя бот, если ты спишь.
Дополнительное условие: 40 часов времени (ибо паника на корабле).
Желательное условие: установочный файл под Windows.
Ещё одно желательное условие: результат должен занимать не более мегабайта.
Скажу сразу, что я не игроман, и даже наоборот, являюсь некоторым противником онлайн игр, и для внесения в эту отрасль дополнительной энтропии и решил взяться за это дело. Дело, возможно, могло принести определённую прибыль на волне появления каптчи и паники, связанной с этим, но не принесло по определённым причинам.
Итак, что же делать?
Попытка 1
Написать системную тулзу, которая бы перехватывала HTTP запросы и ответы от всёх установленных программ, и фильтровала бы те ответы, на которые бы требовалось ввести каптчу, вводя её самостоятельно. Над программой, которая в том числе должна была решать и эту задачу корпели примерно полгода два белорусских программиста, меняя платформу с C на C#, и потом на Java, и мирясь с тем, что им может понадобится установленный на машину OpenSSL. Задача каждый раз обрастала ненужными подробностями. Ну, в целом, не вышло.
Попытка 2: Сам, всё сам
Вполне понятно, что способов не так много, и выбор встал только между SOCKS прокси и HTTP прокси. Через некоторое время стало понятно, что SOCKS прокси поддерживают далеко не все пользовательские приложения, и выбор стал однозначным.
Выбор платформы
Выбор был не сложен, особенно учитывая попытку 1. C и C# были быстро отметены, учитывая полное отсутствие опыта. Были выявлены следующие, богатые необходимыми библиотеками, платформы:
Java Тяжело предположить, что для установки такой маленькой утилитки пользователи бы захотели устанавливать JVM, весящий страшно сказать сколько десятков мегабайт. Java отвалилась.
Python Как известно, работает везде и всё включено (batteries included). Весит 7Мб. По современным меркам, конечно, немного, но всё же хотелось компактнее. Остался вопрос, как этот инсталлятор внедрить в инсталлятор моей утилиты. Не знаю, как это делается у питоновских приложений, возможно, намного проще, но инсталлятор в инсталляторе я как-то раз уже делал и больше не хочу.
Ruby На момент начала моих поисков отсутствовал одношаговый инсталлятор под винду. Целиком и полностью. Сейчас есть, подразумевает установку MinGW, MSYS и прочего, при установке могущего испугать юзера. Вес 7Мб.
Про инсталлятор в инсталляторе вопрос остался.
Lua Очень давний и популярный среди скриптовщиков С++ игр язык. Вялое community, разрозненные библиотеки. Вес кастомной сборки VM в нужными библиотеками — всего 800Кб. Инсталлятор не предоставляется, есть набор exe файлов, которым в качестве параметра передаётся lua скрипт для его запуска. То, что нужно, так ещё и откомпилено под Win, MacOS, Linux, каждое из них в версиях 32 и 64 отдельно. То, что надо.
Итак, я взялся за изучение Lua (сбылось новогоднее пожелание, я изучил новый язык программирования).
Язык обладает чудесными свойствами, такими как:
— sandboxing (в ruby был только патч для версии 1.8.5): позволяет запускать сторонний код, ограничивая ему окружение;
— coroutines (типа ruby fibers из 1.9): позволяет сделать очень легковесную кооперативную многозадачность;
— очень простые (точнее, простая — есть только ассоциативный массив) структура данных, которой, как оказалось, хватает, для выполнения большинства задач по обработке данных;
… ещё много всего, тяжко так в одном посте.
Проще всего было сделать такую систему в виде фильтрующего запросы и ответы HTTP прокси сервера, что и было решено сделать (от добра добра не добра).
Идея проста: повесить сервер TCP, слушать, что клиент просит, разбирать заголовки HTTP, искать HOST, убирать HTTP header «Proxy-Connection», отсылать запрос тому, кому он предназначался, получать ответ, направлять клиенту и т.п.
Ответ сервера нужно фильтровать, и делать это можно, если сервер не применяет HTTPS, а он по счастью его не применяет. Сделать это оказалось довольно просто, достаточным оказалось написать сокращённый до 190 строк Lua аналог mechanize для Ruby, который делает с заголовками и телом запроса что ни взбредёт в голову, позволяя писать какие хочется фильтры для HTTP запросов.
Ну, в этом случае нам надо было избавиться от вредной re, для чего всего лишь потребовалось определить:
— к странице ли травиана щёл исходный запрос (и запрашивалась ли страница HTML):
string.find(request.uri(), ‘travian’) and mimetype and string.find(mimetype, ‘text/html’)
— содержалась ли на результирующей странице каптча вместо «полезных» игровых данных:
local , _key = string.match(response.body(), ‘<iframe src=»(http://api.re.net/noscript??(k=+&lang=en))’)
Как разгадывать собственно каптчу (с помощью не слишком современных и высокопроизводительных индусов, но чрезвычайно дешёвых живых индусов) немного выходит за рамки нашей сугубо технической темы, поэтому где-нибудь в другом месте.
В итоге, скачивалась картинка каптчи, отправлялась индусам (2 раза на всякий случай), полученные через 5-10 секунд ответы сравнивались, и если они были одинаковыми, то результат отправлялся травиану HTTP POST запросом, на что жертва выдаёт страницу, радостно сообщая, что мы, оказывается, человек, и кучу «полезных» игровых данных. Эту страницу мы и показываем ничего не подозревающему клиенту, который мог заметить лишь некоторую паузу. В пессимистичном случае несовпадения картинка отправлялась индусам ещё раз, и так далее до того момента, пока не получалось хотя бы два одинаковых решения, остальные отправлялись в службу поддержки на возврат денег (практически никакой халявы для индусов).
Итак, вот оно, решение и есть.
Однако, случилось то, о чём никто не мог предполагать. Пользователям зачем-то понадобился ещё и доступ к другим сайтам, немыслимо! Среди них оказались даже сайты, доступ к которым осуществлялся через HTTPS, и с этим нужно было что-то делать без регулярных переключений прокси включён-выключен.
И ещё нужно было, чтобы несколько запросов принимались одновременно. Неприятным оказалось то, что google analytics иногда делает запрос, длящийся минуты, оставляя однопоточную прокси в режиме ожидания.
Ну что же, для этого нашлось целых три разных библиотеки для создания асинхронного TCP сервера. То есть — ждём входящее соединение, получаем кусок данных, передаём управление диспетчеру, смотрим есть ли ещё входящие соединения или открытые соединения для которых есть данные (select/kpoll/epoll), передаём управление по очереди.
Увы и ах, поскольку все такого рода соединения происходят на локальной машине, то всё это происходит почти мнгновенно. А медленные соединения — исходящие. Подковырять существующие библиотеки (copas, asok), которые предназначены для мультиплексирования входящих соединений, оказалось сложнее, чем писать свою. И я написал небольшую (272 строки) свою. Помимо того, что все входящие и исходящие соединения работают асинхронно, так можно добавлять ещё любые корутины (поправьте меня, люди с профильным образованием) в пул, работающий в общем цикле.
Ну вот, всё стало работать параллельно, а по скорости лишь незаметно отставать от того, как это работает без прокси.
Как же велико было моё удивление, когда я получил от сервера страницу с (в том числе) заголовками:
Content-Encoding: gzip
Transfer-Encoding: chunked
и собственно полные кракозябры в качестве тела ответа.
Первая мысль была отключить в запросе Accept-Encoding, чтобы сервер не пытался паковать данные, и переделать HTTP 1.1 в HTTP 1.0, чтобы не посылало «чанками». Но подумал об падении скорости и увеличении трафика, и сжалился над пользователями.
Вышло так:
if headers(pipe, target) == ‘chunked’ then
target.body = dechunk(target.body)
end
function dechunk(chunkie)
local chunk_size
local chunk
local chunks = {}
chunkie, chunk_size = readline(chunkie)
while chunk_size and tonumber(chunk_size, 16) > 0 do
chunkie, chunk = readbytes(chunkie, tonumber(chunk_size, 16))
table.insert(chunks, chunk)
chunkie, chunk_size = readline(chunkie)
if not chunk_size or chunk_size == » then — sometimes there’s a crlf, sometimes not
chunkie, chunk_size = readline(chunkie)
end
end
return table.concat(chunks)
end
Ушёл читать матчасть. Слава богу, по этим пунктам документации порядочно.
Склеиваем «чанки», получаем gzip файл (иногда deflate, но мне не встречался пока). Распаковываем (спасибо David Manura за библиотеку).
Распаковка вышла ещё проще:
if headers(pipe, target) == ‘gzip’ and #target.body > 0 then
local decoded = {}
gzip.gunzip {input=target.body, output=function(byte) table.insert(decoded, string.char(byte)) end}
target.body = table.concat(decoded)
end
Осталось немного
— сделать HTTPS-туннелирование для HTTPS сайтов (слава богу, OpenSSL бандлить не надо, просто данные прозрачно передавать туда-сюда):
if request.method() == ‘CONNECT’ then
local sent_to_server, err = client.send(«HTTP/1.0 200 Connection established\r\nProxy-agent: BotHQ-Agent/1.2\r\n\r\n»)
print(‘https transparent connection’)
https(client, server)
return
end
local function https(client, server)
close_callback = function()
client.close()
server.close()
end
client.receive_subscribe(function(data)
server.send(data)
end, close_callback)
server.receive_subscribe(function(data)
client.send(data)
end, close_callback)
end
— положить в инсталлятор:
В целом приключения с запуском 7zip sfx на Heroku стоят отдельного поста. Радость победы затмевает любые сложные моменты разработки.
Ну что же, не знаю, как вам, а мне было интересно и увлекательно этим заниматься. Не жалею потраченного времени.
В итоге:
Сам прокси сервер на 71 строку .
Асинхронная библиотека TCP-сервер-клиент на 272 строки .
Некий аналог HTTP клиента на 190 строк.
Фильтр для разгадывания каптчи на 150 строк .
Установочный файл размером менее мегабайта.
Уверен, такой штуке найдётся много полезных применений, начиная от не очень хороших, типа спамилок с «автоматической» разгадкой каптчи, до полезных, когда нужно гибко отфильтровать пользовательский трафик скриптом. Приведу простейший скрипт, не позволяющий пользователям, подсоединённым через прокси, соединяться с vk.com: