Форум сайта python.su
Доброго дня. Пытаюсь сбрать чат-бот в телеге для пинга сервера во внутренней сети. Вроде всё правильно прописал, код начинает работать. При запуске в телегу приходит сразу сообщение, которое я пишу “192.168.67.227 не работает”. При попытке отрубить от сети и включить обратно ничего не происходит. Сообщения не присылаются. Подскажите плиз, куда копнуть
#---------------------------------------------------- import os import requests import time #------------------------- hostname = ['192.168.67.227'] time_pause = 10 #------------------------- def SendMsgToTelegramChanel(msg): token="Мой токен" chat_id = 'мой чат id' params = {'chat_id': chat_id,'text': msg} response = requests.get('https://api.telegram.org/bot'+token+'/sendMessage', params=params) def IsHostAlive(host): ret = os.system('ping -c 2 {} > /dev/null'.format(host)) if ret == 0: return True return False while True: for i in range(len(hostname)): file_signal = hostname[i] +'_down' if IsHostAlive(hostname[i]): if os.path.isfile(file_signal): os.remove(file_signal) SendMsgToTelegramChanel(hostname[i] + ' работает') #print(hostname + ' is up!') else: if not os.path.isfile(file_signal): open(file_signal,'tw').close() SendMsgToTelegramChanel(hostname[i] + ' не работает') #print(hostname + ' is down!') time.sleep(time_pause) #------------------------------------------------
Офлайн
BorovkovichТы знаешь, что такое внутренняя сеть? Если ты запустишь это в Telegram, запрос будет относиться к внутренней сети Telegram.
Пытаюсь сбрать чат-бот в телеге для пинга сервера во внутренней сети.
Офлайн
py.user.nextС чего бы это? Где будет запущен исполняемый код - там и будет сеть
Офлайн
ZerGЧтобы бот работал, его надо будет запускать на хостинге. Даже если у него хостинг свой собственный, это надо двухкомпонентную систему делать. В боте просто не должно быть этой внутренней сети.
Где будет запущен исполняемый код - там и будет сеть
Офлайн
py.user.nextДа почему же на хостинге то? Ну вот у человека локалка - какая-то мини-фирма! У него есть там полюбому сервера которые не выключаются или даже если он дома то скажем какой нить RaspberryPi
Офлайн
ZerGЕсли ты пишешь бота так, что его нельзя поставить на хостинг, то его нельзя поставить на хостинг. Что в этом хорошего?
Да почему же на хостинге то?
ZerGА если его выключить, то бот что будет делать в Telegram? Он даже /help не сможет вывести, ведь он же не на хостинге.
если он дома то скажем какой нить RaspberryPi
Офлайн
Абсолютно верно
Если мы говорим о боте общего назначения то разумеется держать его на хостинге самый верный вариант для обеспечения отказоустойчивости
Но если мы говорим о внутренних сетях то это явно не бот для общего пользования
К примеру есть предприятие и мы хотим отслеживать состояние сервисов - использовать Телегу для таких задач очень удобно - и тут стоит рассматривать команду пинг только как пример;
На предприятиях пусть и минисерверная с упсами и инетом 24/7
Вот он там и живет - а если уж там все сломалось - то нерабочий бот это тот же показатель алярма
Ну и на конец = даже если бот на хостинге? Ну запусти на нем же WireGuard и получи доступ в свои внутренние сети; Да хоть проброс порта на роутере сделай
Ну а если предприятие больше чем три калеки с ноутами - то как я сказал выше нет никаких проблем поднять в сети виртуалку и повесить на нее бота, забикс итд
Офлайн
ZerGТам даже не в отказоустойчивости дело. Бот - это функция. Поэтому не должно в одной функции быть всё. Мы же не программисты на Basic'е. Опросник внутренней сети - это функция. Поэтом функция-бот запускает функцию-опросник.
Если мы говорим о боте общего назначения то разумеется держать его на хостинге самый верный вариант для обеспечения отказоустойчивости
>>> def bot(): ... result = pinger() ... if result: ... return 'ping ok' ... else: ... return 'ping fail' ... >>> def pinger(): ... host = '192.168.0.1' ... if ping_host(host): ... return True ... else: ... return False ... >>> def ping_host(host): ... return True ... >>> bot() 'ping ok' >>>
>>> def bot(): ... host = '192.168.0.1' ... result = True ... if result: ... return 'ping ok' ... else: ... return 'ping fail' ... >>> bot() 'ping ok' >>>
def bot(): result = all((pinger1(), pinger2(), pinger3())) if result: return 'ping ok' else: return 'ping fail'
def pinger1(): host = '192.168.0.1' if ping_host(host): return True else: return False def pinger2(): host = '192.168.0.2' if ping_host(host): return True else: return False def pinger3(): host = '192.168.0.3' if ping_host(host): return True else: return False
Офлайн
ZerGЭтот бот может много функций иметь. Одна из них - опрос сетей каких-то. А другая - заказать кофе в офис в автоматическом режиме. Собрать всех на митинг. Позвать эникейщика в отдел такой-то.
Но если мы говорим о внутренних сетях то это явно не бот для общего пользования
Отредактировано py.user.next (Июнь 3, 2023 12:54:02)
Офлайн
ЭЭЭ я совершенно не понял откудова ты взял монолит и 10-1000 строк, я мимо этого магазина даже в гугле не проходил(акелла промахнулся)
У меня отдельный класс на бота и логика обработки задач
Бот же в конечном итоге используется как принт/лог типа
from bot import send_mess ... some checkers actions send_mess(message, group, file, e.t.c)
Офлайн