Сообщество - Лига Сисадминов

Лига Сисадминов

1 950 постов 18 254 подписчика

Популярные теги в сообществе:

Плюс защита denuvo, и 3 МБ лицензионного соглашения

Плюс защита denuvo, и 3 МБ лицензионного соглашения Картинка с текстом, Мемы, IT юмор
Показать полностью 1

Юмор, недоступный дальтоникам

Юмор, недоступный дальтоникам Картинка с текстом, IT юмор, Диаграмма, Плюсы, Работа
Показать полностью 1

Программистская совесть

Программистская совесть Картинка с текстом, Комиксы, IT юмор, Программист, Floor796
Показать полностью 1

Ответ на пост «Настоящий джуниор»1

Ответ на пост «Настоящий джуниор»

Как я контролирую доступ к порту через телеграм бота

Как я контролирую доступ к порту через телеграм бота Linux, Программа, Программирование, Telegram, Бот, Python, Длиннопост

Я курирую контроль непрерывной работы облачной записи видеопотока камер видеонаблюдения нескольких пунктов выдачи wildberries. И я часто сталкиваюсь с проблемами потери связи клиент-сервер. Будь то неуплата за интернет, отключение электричества, отказ оборудования и т.д. Решил немного автоматизировать процесс с помощью уведомлений из телеграмм бота. Процедура относительно несложная. Сейчас распишу все поэтапно.

  1. В первую очередь нужно создать телеграмм бота. Для этого в поиске телеги ищем пользователя @botfather, пишем ему команду /newbot и создаем своего бота. После создания бота получаем токен. Он пригодится нам позже.

  2. Для создания бота я буду использовать язык питон. Качаем и устанавливаем сам питон на офф сайте. Проверить установлен ли питон можно через команду "python --version" без кавычек. Если программа установлена правильно, вы получите ответ с версией программы. Через командную строку устанавливаем нужные нам библиотеки:

    "pip install python-telegram-bot"

    "pip install pyTelegramBotAPI"

    "pip install aiogram"

    Все, теперь перейдем к написанию кода.

  3. Для написания кода можно использовать любой текстовый, кодовый редактор. Хоть блокнот. Главное что бы расширение файла было .py.

    Перед тем как писать код, надо определиться какие цели мне нужно достичь. В моем случае я имею 4 ПВЗ с белыми айпи адресами. У меня открыт 554 порт, который я должен проверять. То есть я хочу проверять каждый адрес по очереди раз в 5 минут. Если порт не отвечает, через 2 минуты повторяю попытку еще раз. Если ответа нет, мне в телеграмм приходит уведомление где указано состояние порта (Отвечает или Недоступен), айпи и порт, адрес пункта выдачи. Так же я хочу добавить кнопку "Проверка доступа", что бы получить состояние всех пунктов списком. Снизу приведу готовый код.

    "import telebot

    import socket

    import threading

    import time

    # Телеграм токен вашего бота

    TOKEN = 'Здесь указываете ваш токен'

    bot = telebot.TeleBot(TOKEN)

    # Данные для проверки адресов. Пишите свои адреса и названия

    addresses = [

    {'ip': '192.168.1.127', 'port': 554, 'name': 'Москва'},

    {'ip': '192.168.1.128', 'port': 554, 'name': 'Казань'},

    {'ip': '192.168.1.129, 'port': 554, 'name': 'Киров'},

    {'ip': '192.168.1.126', 'port': 554, 'name': 'Краснодар'}

    ]

    check_interval = 300 # Интервал в секундах между проверками (5 минут)

    retry_interval = 120 # Интервал повторной проверки в секундах (2 минуты)

    checking = False # Флаг для управления проверками

    # Функция для проверки доступности порта

    def check_port(ip, port):

    try:

    with socket.create_connection((ip, port), timeout=5):

    return True

    except (socket.timeout, socket.error):

    return False

    # Фоновая задача для постоянной проверки

    def periodic_check(chat_id):

    global checking

    while checking:

    for address in addresses:

    ip, port, name = address['ip'], address['port'], address['name']

    if not check_port(ip, port):

    time.sleep(retry_interval)

    if not check_port(ip, port):

    bot.send_message(chat_id, f"🔴 {name} ({ip}:{port}) - Не отвечает")

    time.sleep(check_interval)

    # Обработчик команды /start

    @bot.message_handler(commands=['start'])

    def start(message):

    global checking

    if not checking:

    checking = True

    bot.send_message(message.chat.id, "✅ Бот запущен. Начинаем проверки.")

    threading.Thread(target=periodic_check, args=(message.chat.id,), daemon=True).start()

    else:

    bot.send_message(message.chat.id, "ℹ️ Бот уже работает.")

    # Обработчик команды /stop

    @bot.message_handler(commands=['stop'])

    def stop(message):

    global checking

    if checking:

    checking = False

    bot.send_message(message.chat.id, "⏹️ Проверки остановлены.")

    else:

    bot.send_message(message.chat.id, "ℹ️ Бот уже остановлен.")

    # Обработчик кнопки "Проверка доступа"

    @bot.message_handler(func=lambda message: message.text == "Проверка доступа")

    def manual_check(message):

    results = []

    for address in addresses:

    ip, port, name = address['ip'], address['port'], address['name']

    status = "🟢 Доступен" if check_port(ip, port) else "🔴 Не отвечает"

    results.append(f"{status} - {name} ({ip}:{port})")

    bot.send_message(message.chat.id, "\n".join(results))

    # Добавление кнопки "Проверка доступа"

    @bot.message_handler(commands=['menu'])

    def show_menu(message):

    markup = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)

    markup.add(telebot.types.KeyboardButton("Проверка доступа"))

    bot.send_message(message.chat.id, "📋 Выберите действие:", reply_markup=markup)

    # Запуск бота

    bot.polling(none_stop=True)"

    Не забудьте вставить свой токен и вписать свои айпи адреса. Сохраняем файл с названием bot.py например на рабочем столе. Если все сделали правильно, то должно выглядеть примерно так:

Как я контролирую доступ к порту через телеграм бота Linux, Программа, Программирование, Telegram, Бот, Python, Длиннопост

Пример

Вроде все работает. Мы запустили программу на вашем ПК. Но бот будет фунциклировать, пока ваша программа запущена и компьютер работает. Что бы бот работал 24/7 нужен VPS сервер.

4. Запуск на VPS сервере. Арендуем любой облачный сервер. У меня это Beget. У них самый дешевый сервер стоит 210 рублей в месяц, а запустить на нем можно до 10 таких ботов одновременно. После аренды облачного сервера устанавливаем на него какой либо дистрибутив линукс. У меня это Ubuntu. Заходим через SSH и устанавливаем на него питон командой

"sudo apt update"

"sudo apt install python3 python3-pip python3-venv"

Устанавливаем библиотеки

"pip install python-telegram-bot"

Через файловый менеджер создаем папку на сервере и перебрасываем туда наш файл bot.py

В командной строке перемещаемся в нужную нам директорию, и запускаем файл командой "python3 bot.py"

5. Вуаля, живем и радуемся. Кстати, не забудьте настроить работу файла в фоновом режиме и автоматический запуск.

Показать полностью 1

Как то так

Как то так

Не щадя

Не щадя
Вопрос из ленты «Эксперты»

Проблема с сетью

Сеть: коммутатор DGS-1210-28, от него 40 метров витухи (нормальной, 4-парной, флюком бьётся) стоит роутер Keenetic Giga KN-1010 (не новый уже, знаю), на последней прошивке OS 4.2.5, за ним компьютер вполне приличный.
Линк в гигабите везде. Ошибок на портах нет, а скорость ровно 100. Обычно, когда шейпер режет до сотни, на клиенте видно 120 и падение до 100, а тут 98 и ни грамма больше. Началось примерно месяц назад. Возможно, обновилась прошивка. Больше ничего не менялось. Комп тот же, роутер тот же, кабель и порт - те же.

Что проверил:
Флюком кабель с ответкой - цел, обжат нормально.
Потерь до коммутатора нет ни с какой стороны
Комп напрямую без роутера работает нормально - свои 800 Мбит тянет, в зависимости от загрузки аплинка коммутатора
Кабель-диагностика с коммутатора выдает иногда то одну, то другую пару в обрыве у роутера.
На роутере WAN - комбо. Попробовал SFP медный сунуть - та же картина.
Сбросил роутер в заводские.

Уже не понимаю, куда рыть. Остаётся прошивка роутера.

Отличная работа, все прочитано!