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