import tornado.ioloop import tornado.httpclient import tornado.web import json import joblib import sys import pandas as pd arguments = sys.argv lib = arguments[1] model = joblib.load('./models/' + lib) head_names=["received_bytes","send_bytes","port_duration","total_duration","jitter","differents_port"] class GenericHandler(tornado.web.RequestHandler): TelegramBot="" ChatTelegramId="" message = "Alerta por escaneo. Puertos UDP escaneados desde la IP: " def send_telegram(self,ip): url = f"https://api.telegram.org/bot{self.TelegramBot}/sendMessage" data = {"chat_id": self.ChatTelegramId, "text": self.message + ip} headers = {"Content-Type": "application/json"} body = json.dumps(data) http_client = tornado.httpclient.AsyncHTTPClient() try: response = http_client.fetch( url, method="POST", body=body, headers=headers, ) except: pass finally: http_client.close() def post(self): plain_text = self.request.body.decode('utf-8') metrics = plain_text.split("||")[0] ip_src = plain_text.split("||")[1] check_data = list(map(lambda x: float(x), metrics.split(','))) df_predict = pd.DataFrame([check_data]) df_predict.columns = head_names pre = model.predict(df_predict) result = pre[0] self.set_header("Content-Type", "text/plain") self.write(str(result)) if round(result) == 1: self.send_telegram(ip_src) self.finish() def make_app(): return tornado.web.Application([ (r"/check", GenericHandler), ]) def main(): app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start() if __name__ == "__main__": main()