from scapy_service import *\r
from argparse import *\r
import socket\r
+import logging\r
+import logging.handlers\r
\r
\r
class ParseException(Exception): pass\r
raise ParseException(req_id)\r
\r
def create_error_response(self,error_code,error_msg,req_id='null'):\r
- return {"jsonrpc": "2.0", "error": {"code": error_code, "message:": error_msg}, "id": req_id}\r
+ return {"jsonrpc": "2.0", "error": {"code": error_code, "message": error_msg}, "id": req_id}\r
\r
def create_success_response(self,result,req_id=b'null'):\r
return {"jsonrpc": "2.0", "result": result, "id": req_id }\r
self.socket = self.context.socket(zmq.REP)\r
self.socket.bind("tcp://*:"+str(port))\r
self.IP_address = socket.gethostbyname(socket.gethostname())\r
+ self.logger = logging.getLogger('scapy_logger')\r
+ self.logger.setLevel(logging.INFO)\r
+ console_h = logging.StreamHandler(sys.__stdout__)\r
+ formatter = logging.Formatter(fmt='%(asctime)s %(message)s',datefmt='%d-%m-%Y %H:%M:%S')\r
+ if args.log:\r
+ logfile_h = logging.FileHandler('scapy_server.log')\r
+ logfile_h.setLevel(logging.INFO)\r
+ logfile_h.setFormatter(formatter)\r
+ self.logger.addHandler(logfile_h)\r
+ if args.verbose:\r
+ console_h.setLevel(logging.INFO)\r
+ else:\r
+ console_h.setLevel(logging.WARNING)\r
+ console_h.setFormatter(formatter)\r
+ self.logger.addHandler(console_h)\r
+\r
\r
def activate(self):\r
- print ('***Scapy Server Started***\nListening on port: %d' % self.port)\r
- print ('Server IP address: %s' % self.IP_address)\r
+ self.logger.info('***Scapy Server Started***')\r
+ self.logger.info('Listening on port: %d' % self.port)\r
+ self.logger.info('Server IP address: %s' % self.IP_address)\r
try:\r
while True:\r
message = self.socket.recv_string()\r
- if args.verbose:\r
- print('Received Message: %s \n' % message)\r
+ self.logger.info('Received Message: %s' % message)\r
try:\r
params = []\r
method=''\r
req_id = 'null'\r
method,params,req_id = self.scapy_wrapper.parse_req_msg(message)\r
if (method == 'shut_down'):\r
- print ('Shut down by remote user')\r
+ self.logger.info('Shut down by remote user')\r
result = 'Server shut down command received - server had shut down'\r
else:\r
result = self.scapy_wrapper.execute(method,params)\r
response = self.scapy_wrapper.create_success_response(result,req_id)\r
except Exception as e:\r
response = self.scapy_wrapper.error_handler(e,req_id)\r
+ self.logger.info('ERROR %s: %s',response['error']['code'], response['error']['message'])\r
finally:\r
json_response = json.dumps(response)\r
- if args.verbose:\r
- print('Sending Message: %s \n' % json_response)\r
+ self.logger.info('Sending Message: %s' % json_response)\r
# Send reply back to client\r
self.socket.send_string(json_response)\r
if (method == 'shut_down'):\r
break\r
\r
except KeyboardInterrupt:\r
- print(b'Terminated By Ctrl+C')\r
+ self.logger.info(b'Terminated By local user')\r
\r
finally:\r
self.socket.close()\r
if len(sys.argv)>1:\r
parser = ArgumentParser(description=' Runs Scapy Server ')\r
parser.add_argument('-s','--scapy-port',type=int, default = 4507, dest='scapy_port',\r
- help='Select port to which Scapy Server will listen to.\n default is 4507\n',action='store')\r
- parser.add_argument('-v','--verbose',help='Print Client-Server Request-Reply logging',action='store_true',default = False)\r
+ help='Select port to which Scapy Server will listen to.\n default is 4507.',action='store')\r
+ parser.add_argument('-v','--verbose',help='Print Client-Server Request-Reply information to console.',action='store_true',default = False)\r
+ parser.add_argument('-l','--log',help='Log every activity of the server to the log file scapy_server.log .The log does not discard older entries, the file is not limited by size.',\r
+ action='store_true',default = False)\r
args = parser.parse_args()\r
port = args.scapy_port\r
sys.exit(main(port))\r