Как обойти блокировку Телеграмм бота

Лучшей рекламы для прекрасного мессенджера и придумать невозможно — “несгибаемый Дуров держит оборону и стоит за конфиденциальность своих клиентов, как за свою жизнь”. Но суть данного поста не в маркетинговой составляющей блокировки Telegram на территории России. Если ваш Telegram бот перестал работать и вам нужно эту работу срочно восстановить, добро пожаловать под кат.

Вчера вечером мы столкнулись с проблемой, с которой было ожидаемо столкновение. API сервер одного нашего клиента располагался в Heroku. Вчера недовольный клиент мне пишет (в Telegram, разумеется), что на сайте информация рандомно то появляется, то нет. Сам сайт (приложение на NodeJS) уже был заранее перенесен на Московский сервер для уменьшения пинга.

Спустя полчаса изучения проблемы был получен простой вывод: Роскомнадзор заблокировал часть адресов heroku. Ротация серверов heroku происходит на уровне DNS и DNS иногда отдавал рабочий IP, иногда — нет. К слову, выяснять причину проблемы было довольно таки непросто — когда тестировали мы с разработчиками — проблемы не было. Когда тестировал клиент — были. Уже появлялись мысли ответить клиенту великую фразу разработчика “у меня на компе все работает”.

Как обойти блокировку Telegram в России?

Решение было довольно простым — мы перенесли API сервер приложения на Питерский сервер клиента и там его спокойно развернули. Все заработало отлично, кроме, конечно же, интеграции с Telegram. Поскольку отказаться от этой интеграции не является возможным, т.к. нет достойной альтернативы, мы начали искать решение данной проблемы.

С родным клиентом Telegram все просто — в него уже встроено взаимодействие с proxy сервером и его настройка отнимает несколько секунд. С Bot API все немного по другому. Приложение взаимодействует с https://api.telegram.org/ для каждого действия Telegram бота, а этот адрес, разумеется, заблокирован РКН.

В качестве экспресс-решения проблемы сразу пришло в голову подключить API сервер клиента к нашей OpenVPN сети для обхода этой блокировки. Решение было сразу же отвергнуто, т.к. скорость ответа оставляла желать лучшего. Гугл и Яндекс не смогли поделиться со мной полезной информацией по решению этого вопроса.

В результате пришла в голову простая и очевидная мысль — поднять самостоятельно простейший прокси сервер для соединения в телеграм. Разумеется, сервер поднимаем за пределами РФ, чтобы прокси был рабочий

Ниже предоставлен конфиг nginx который сейчас уже отлично справляется со своей задачей

Nginx config

Еще по теме:  Как указать человека в Телеграмме чате

server listen 80;
server_name my-telegram-proxy.server;
location / proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://api.telegram.org/;
client_max_body_size 100M;
>
>

Далее в приложении я подменил url BOT API для взаимодействия с telegram — вместо
https://api.telegram.org/bot
написал
http://my-telegram-proxy.server/bot

Создание Telegram бота с нуля. Урок 4 Как обойти блокировку в РФ


и интеграция с Bot Api успешно заработала

  • Серверное администрирование
  • API

Источник: habr.com

Как взаимодействовать с API Telegram в обход блокировки?

введите сюда описание изображения

Начал писать Telegram бота. Сразу столкнулся с проблемой, что не могу получить ответ (видимо из-за блокировки РКН) Попробовал прокси — не помогло — или я что-то не так настроил. Есть ли сейчас способы обойти блокировку и написать Telegram бота?

Отслеживать
задан 21 апр 2018 в 12:16
57 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
Непонятно, на каком языке написано и что попытались сделать.
21 апр 2018 в 12:51

Можете настроить vpn, есть бесплатные, настраиваются довольно просто, далее все запросы нормально проходят

22 ноя 2018 в 18:50

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Для обхода блокировки, нужно подключаться к SOCKS5 прокси:

/*** PHP CODE ***/ /****************/ $prxy = ‘http://94.130.223.179:1080’; // адрес:порт прокси $prxy_auth = ‘auth_user:auth_pass’; // логин:пароль для аутентификации /****************/ $ch = curl_init(); $url = «https://api.telegram.org/botXXXXX/sendMessage?chat_id=XXXXX; // где XXXXX — ваши значения curl_setopt_array ($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true)); /********************* Код для подключения к прокси *********************/ curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // тип прокси curl_setopt($ch, CURLOPT_PROXY, $prxy); // ip, port прокси curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxy_auth); // авторизация на прокси curl_setopt($ch, CURLOPT_HEADER, false); // отключение передачи заголовков в запросе curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возврат результата в качестве строки curl_setopt($ch, CURLOPT_POST, 1); // использование простого HTTP POST curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // отмена проверки сертификата удаленным сервером /***********************************************************************/ $result = curl_exec($ch); // DIGITAL RESISTANCE! curl_close($ch);

Не забудьте подставить рабочий прокси адрес ($prxy) и, если необходимо, данные для аутентификации ($prxy_auth), а также свой запрос ($url)

Отслеживать
ответ дан 25 апр 2018 в 9:53
56 3 3 бронзовых знака

В линуксе можно воспользоваться, например, proxychains4 :

Usage: proxychains4 -q -f config_file program_name [arguments] -q makes proxychains quiet — this overrides the config setting -f allows one to manually specify a configfile to use for example : proxychains telnet somehost.com

Эта программа заворачивает все попытки вашего скрипта выйти в интернет через прокси. В настройках proxychains4 указываете список прокси, через которые ваш скрипт будет ходить в интернет.

Источник: ru.stackoverflow.com

Учим Телеграм бота обходить блокировку

Победитель в номинации 2021

Все уже давно в курсе, что РКН пытается блочить ТГ на территории РФ. Сам клиент заблочить у них пока так и не получилось, а вот боты работать перестают.

Еще по теме:  Решительные меры генерала корнилова которые указаны в Телеграмме были осуществлены

Тело нашего пустого бота:

public class MyBot extends AbilityBot < protected MyBot(String botToken, String botUsername) < super(botToken, botUsername); >public int creatorId() < return 0; >public Ability hello() < return Ability.builder() .name(«test») .info(«hello bot») .locality(ALL) .privacy(PUBLIC) .action(ctx ->silent.send(«hello!», ctx.chatId())) .build(); > >

Регистрация и его запуск:

public class Main < private static String BOT_NAME = «My test bot»; private static String BOT_TOKEN = «. » /* your bot’s token here */; public static void main(String[] args) < try < ApiContextInitializer.init(); // Create the TelegramBotsApi object to register your bots TelegramBotsApi botsApi = new TelegramBotsApi(); // Register your newly created AbilityBot MyBot bot = new MyBot(BOT_TOKEN, BOT_NAME); botsApi.registerBot(bot); >catch (TelegramApiException e) < e.printStackTrace(); >> >

Подключаем зависимость:
Maven org.telegram telegrambots-abilities 4.1.2 Gradle // telegram bot api compile ‘org.telegram:telegrambots:3.6.1’

Дальше пример реализации классов

public class MyBot extends AbilityBot < protected MyBot(String botToken, String botUsername, DefaultBotOptions options) < super(botToken, botUsername, options); >/* . */ >

В регистрации, если прокся без авторизации:

public class Main < private static String BOT_NAME = «My test bot»; private static String BOT_TOKEN = «. » /* your bot’s token here */; private static String PROXY_HOST = «. » /* proxy host */; private static Integer PROXY_PORT = 3128 /* proxy port */; public static void main(String[] args) < try < ApiContextInitializer.init(); // Create the TelegramBotsApi object to register your bots TelegramBotsApi botsApi = new TelegramBotsApi(); // Set up Http proxy DefaultBotOptions botOptions = ApiContext.getInstance(DefaultBotOptions.class); HttpHost httpHost = new HttpHost(PROXY_HOST, PROXY_PORT); RequestConfig requestConfig = RequestConfig.custom().setProxy(httpHost).setAuthenticationEnabled(false).build(); botOptions.setRequestConfig(requestConfig); botOptions.setHttpProxy(httpHost); // Register your newly created AbilityBot MyBot bot = new MyBot(BOT_TOKEN, BOT_NAME, botOptions); botsApi.registerBot(bot); >catch (TelegramApiException e) < e.printStackTrace(); >> >
public class Main < private static String BOT_NAME = «My test bot»; private static String BOT_TOKEN = «. » /* your bot’s token here */; private static String PROXY_HOST = «. » /* proxy host */; private static Integer PROXY_PORT = 3128 /* proxy port */; private static String PROXY_USER = «. » /* proxy user */; private static String PROXY_PASSWORD = «. » /* proxy password */; public static void main(String[] args) < try < ApiContextInitializer.init(); // Create the TelegramBotsApi object to register your bots TelegramBotsApi botsApi = new TelegramBotsApi(); // Set up Http proxy DefaultBotOptions botOptions = ApiContext.getInstance(DefaultBotOptions.class); CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(PROXY_HOST, PROXY_PORT), new UsernamePasswordCredentials(PROXY_USER, PROXY_PASSWORD)); HttpHost httpHost = new HttpHost(PROXY_HOST, PROXY_PORT); RequestConfig requestConfig = RequestConfig.custom().setProxy(httpHost).setAuthenticationEnabled(true).build(); botOptions.setRequestConfig(requestConfig); botOptions.setCredentialsProvider(credsProvider); botOptions.setHttpProxy(httpHost); // Register your newly created AbilityBot MyBot bot = new MyBot(BOT_TOKEN, BOT_NAME, botOptions); botsApi.registerBot(bot); >catch (TelegramApiException e) < e.printStackTrace(); >> >
Последнее редактирование модератором: 17 Мар 2019

Еще по теме:  Бот Телеграм который показывает кто заходил в ваш профиль

gattsu

Путник

Пользователь

Победитель в номинации 2018

Победитель в номинации 2017

За веру и верность форуму

За заслуги перед форумом

Преподаватель

а размещать бота за пределами РФ?

Se1dhe

The Last Sith

Участник

Победитель в номинации 2021

Участник Новогоднего Фонда 2021

Дак никто не запрещает. Это один из вариантов обхода.

gattsu

Путник

Пользователь

Победитель в номинации 2018

Победитель в номинации 2017

За веру и верность форуму

За заслуги перед форумом

Преподаватель

3815f0ae35a9594061f07719d82372df.jpg

даже у бота скрыт ip

скрыл ip?

Se1dhe

The Last Sith

Участник

Победитель в номинации 2021

Участник Новогоднего Фонда 2021

Для халявщиков можно дописать регистрацию бота с анонимным прокси. Парсим список открытых прокси ->пишем куда-нить -> при реге бота перебираем живые.

Bloomfield

Величайший

Проверенный

Можно сделать еще проще, с помощью nginx сделать proxy_pass до api.telegram.org, хост, естественно указать свой (alert.example.com) и отправлять все пакеты туда.
Когда первый раз пытался обойти блокировку с помощью прокси, оказалось, что интернет-провайдер ЦОДа блокирует все заголовки (в том числе и которые отправляются с помощью прокси). Как говорится — пришлось импровизировать.

Se1dhe

The Last Sith

Участник

Победитель в номинации 2021

Участник Новогоднего Фонда 2021

Можно сделать еще проще, с помощью nginx сделать proxy_pass до api.telegram.org, хост, естественно указать свой (alert.example.com) и отправлять все пакеты туда.
Когда первый раз пытался обойти блокировку с помощью прокси, оказалось, что интернет-провайдер ЦОДа блокирует все заголовки (в том числе и которые отправляются с помощью прокси). Как говорится — пришлось импровизировать.

Мне было проще реализовать это программно, т.к. боты стоят у клиентов на разных серверах.

Bloomfield

Величайший

Проверенный
Мне было проще реализовать это программно, т.к. боты стоят у клиентов на разных серверах.

А если будет ситуация такая как у меня (блокировка в заголовке) встречается, кстати — довольно часто, по этой причине пришлось поднимать общий сервер для всех проектов — что будете делать? Просто праздное любопытство, не более.

Se1dhe

The Last Sith

Участник

Победитель в номинации 2021

Участник Новогоднего Фонда 2021

А если будет ситуация такая как у меня (блокировка в заголовке) встречается, кстати — довольно часто, по этой причине пришлось поднимать общий сервер для всех проектов — что будете делать? Просто праздное любопытство, не более.

Ну если столкнусь, там и посмотрим. За все время с момента блокировки — не сталкивался. Да и тема была создана в ознакомительных целях, т.к. в и в иннете, и лично у меня люди интересовались несколько раз о программном методе обхода блокировки. А, и да, описаный вами вариант о поднятии посредника это один большой костыль, т.к. бот имеет свойство отваливаться из-за таймаута.

Источник: mmo-dev.info

Рейтинг
( Пока оценок нет )
Загрузка ...