- Статус
- Оффлайн
- Регистрация
- 31 Май 2019
- Сообщения
- 245
- Реакции
- 84
Доброго времени суток
После моей недавней темы о создании бота для Telegram на C# (клик) несколько человек писали мне в лс с вопросом об обходе блокировки Telegram на территории РФ без использования VPN или покупных прокси. Итак я решил помочь всем тем, кто не хочет покупать дорогие сервера в другие странах или использовать платный VPN/прокси.
Для реализации данной функции нам понадобится библиотека из прошлой темы - Telegram.Bot для .Net. Установить ее можно с помощью менеджера пакетов NuGet или же другим удобным для вас методом. Официальный репозиторий на GitHub -
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Также понадобится библиотека Regex для работы с регулярными выражениями и успешного парсинга нужных нам прокси. Устанавливать ее не нужно, так как она уже включена в фреймворк.Вы можете модифицировать уже существующий код или же использовать предложенный мною:
C#:
class Program
{
private static StringBuilder builder = new StringBuilder();
static TelegramBotClient bot;
static void Main(string[] args)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var url = new Uri("[URL]https://top-proxies.ru/free_proxy/fre_proxy_api.php[/URL]"); // Ваш url
ParseProxy(url);
Console.WriteLine("Перебор прокси");
while (!TestProxy(builder.ToString()))
{
ParseProxy(url);
Console.WriteLine("Прокси сервер не отвечает: " + builder);
}
Console.WriteLine("Прокси найден: " + builder);
var spl = builder.ToString().Split(':');
var proxy = new WebProxy(new Uri($"http://{spl[0]}:{spl[1]}/"), true);
bot = new TelegramBotClient("токен", proxy);
Console.WriteLine("Прокси запущен!");
bot.OnMessage += MessageReceived;
var me = bot.GetMeAsync().Result;
Console.WriteLine(me.FirstName);
bot.StartReceiving();
Console.ReadLine();
bot.StopReceiving();
}
static bool TestProxy(string host)
{
Ping ping = new Ping();
try
{
PingReply reply = ping.Send(host.Split(':')[0], 2000);
if (reply == null) return false;
return (reply.Status == IPStatus.Success);
}
catch (PingException e)
{
Console.WriteLine("Прокси не прошел проверку!\n"+e.ToString());
return false;
}
}
private static void MessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
{
try
{
var Message = e.Message;
string name = Message.From.FirstName;
Console.WriteLine($"{name} отправил сообщение: '{Message.Text}'");
switch (Message.Text)
{
case "/start":
bot.SendTextMessageAsync(e.Message.Chat.Id, $"Привет, {name}!");
break;
default:
bot.SendTextMessageAsync(e.Message.Chat.Id, "Команда не распознана!");
break;
}
}
catch (Exception ex)
{
Console.WriteLine($"Во время выполнения кода произошла ошибка:\n{ex}");
}
}
public static void ParseProxy(Uri uri)
{
string pattern = @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,6}";
using (var wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
var regex = new Regex(pattern);
Match match = regex.Match(wc.DownloadString(uri));
while (match.Success)
{
builder = new StringBuilder();
builder.Append(match.Value);
break;
}
}
}
}
Последнее редактирование: