ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Учим Телеграм бота обходить блокировку (https://forum.antichat.xyz/showthread.php?t=773326)

Se1dhe 17.03.2019 20:31

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

Тут мы научим нашего бота работать через http proxy. Отдельное спасибо человеку с ником "Vyacheslav @bvn13"

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

Java:


Код:

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
(
)
;
}
}

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

Java:


Код:

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
(
)
;
}
}
}

Подключаем зависимость:

Java:


Код:

Maven

org
.
telegram

telegrambots
-
abilities

4.1
.2

Gradle
// telegram bot api
compile
'org.telegram:telegrambots:3.6.1'

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

В классе бота:

Java:


Код:

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

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

Java:


Код:

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
(
)
;
}
}
}

С авторизацией:

Java:


Код:

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
(
)
;
}
}
}

Ну, собсно, все.

gattsu 17.03.2019 20:36

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

Se1dhe 17.03.2019 20:40

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

gattsu 17.03.2019 20:46

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

скрыл ip?

Se1dhe 17.03.2019 20:50

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

Bloomfield 17.03.2019 22:58

Можно сделать еще проще, с помощью nginx сделать proxy_pass до api.telegram.org, хост, естественно указать свой (alert.example.com) и отправлять все пакеты туда.

Когда первый раз пытался обойти блокировку с помощью прокси, оказалось, что интернет-провайдер ЦОДа блокирует все заголовки (в том числе и которые отправляются с помощью прокси). Как говорится - пришлось импровизировать.

Se1dhe 17.03.2019 23:06

Цитата:

Сообщение от Bloomfield

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

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

Bloomfield 17.03.2019 23:13

Цитата:

Сообщение от Se1dhe

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

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

Se1dhe 18.03.2019 00:14

Цитата:

Сообщение от Bloomfield

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

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

Bloomfield 18.03.2019 00:24

Цитата:

Сообщение от Se1dhe

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

Ни разу не отваливался, работает идеально Костыль - да, зато не нужно бегать менять прокси.


Время: 12:31