Upload Server
This commit is contained in:
		
							
								
								
									
										74
									
								
								server.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								server.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
		Reference in New Issue
	
	Block a user