\r
+import sys\r
+import os\r
+python2_zmq_path = os.path.abspath(os.path.join(os.pardir,os.pardir,os.pardir,os.pardir,\r
+ os.pardir,'external_libs','pyzmq-14.5.0','python2','fedora18','64bit'))\r
+sys.path.append(python2_zmq_path)\r
\r
import zmq\r
import json\r
-\r
+from argparse import *\r
+from pprint import pprint\r
\r
class Scapy_server_wrapper():\r
def __init__(self,dest_scapy_port=5555,server_ip_address='localhost'):\r
+ self.server_ip_address = server_ip_address\r
self.context = zmq.Context()\r
self.socket = self.context.socket(zmq.REQ)\r
self.dest_scapy_port =dest_scapy_port\r
- self.socket.connect("tcp://"+str(server_ip_address)+":"+str(self.dest_scapy_port)) #ip address of csi-trex-11\r
+ self.socket.connect("tcp://"+str(self.server_ip_address)+":"+str(self.dest_scapy_port)) \r
\r
def call_method(self,method_name,method_params):\r
json_rpc_req = { "jsonrpc":"2.0","method": method_name ,"params": method_params, "id":"1"}\r
\r
def _get_all_pkt_offsets(self,pkt_desc):\r
return self.call_method('_get_all_pkt_offsets',[pkt_desc])\r
+\r
+ def _activate_console(self):\r
+ context = zmq.Context()\r
+ # Socket to talk to server\r
+ print 'Connecting:'\r
+ socket = context.socket(zmq.REQ)\r
+ socket.connect("tcp://"+str(self.server_ip_address)+":"+str(self.dest_scapy_port)) \r
+ try:\r
+ print('This is a simple console to communicate with Scapy server.\nInvoke supported_methods (with 1 parameter = all) to see supported commands\n')\r
+ while True:\r
+ command = raw_input("enter RPC command [enter quit to exit]:\n")\r
+ if (command == 'quit'):\r
+ break \r
+ parameter_num = 0\r
+ params = []\r
+ while True:\r
+ try:\r
+ parameter_num = int(raw_input('Enter number of parameters to command:\n'))\r
+ break\r
+ except Exception:\r
+ print('Invalid input. Try again')\r
+ for i in range(1,parameter_num+1,1):\r
+ print "input parameter %d:" % i\r
+ user_parameter = raw_input()\r
+ params.append(user_parameter)\r
+ pprint_output = raw_input('pprint the output [y/n]? ')\r
+ while ((pprint_output!= 'y') and (pprint_output!='n')):\r
+ pprint_output = raw_input('pprint the output [y/n]? ')\r
+ json_rpc_req = { "jsonrpc":"2.0","method": command ,"params":params, "id":"1"}\r
+ request = json.dumps(json_rpc_req)\r
+ print("Sending request in json format %s " % request)\r
+ socket.send(request)\r
+\r
+ # Get the reply.\r
+ message = socket.recv()\r
+ print ('received reply:')\r
+ parsed_message = json.loads(message)\r
+ if (pprint_output == 'y'):\r
+ pprint(parsed_message)\r
+ else:\r
+ print message\r
+ except KeyboardInterrupt:\r
+ print('Terminated By Ctrl+C')\r
+ finally:\r
+ socket.close()\r
+ context.destroy()\r
+\r
+\r
+\r
+if __name__=='__main__':\r
+ parser = ArgumentParser(description='Example of client module for Scapy server ')\r
+ parser.add_argument('-p','--dest-scapy-port',type=int, default = 4507, dest='dest_scapy_port',\r
+ help='Select port to which this Scapy Server client will send to.\n default is 4507\n',action='store')\r
+ parser.add_argument('-s','--server',type=str, default = 'localhost', dest='dest_scapy_ip',\r
+ help='Remote server IP address .\n default is localhost\n',action='store')\r
+ parser.add_argument('-c','--console',\r
+ help='Run simple client console for Scapy server.\nrun with \'-s\' and \'-p\' to determine IP and port of the server\n',\r
+ action='store_true',default = False)\r
+ args = parser.parse_args()\r
+ if (args.console):\r
+ s = Scapy_server_wrapper(args.dest_scapy_port,args.dest_scapy_ip)\r
+ sys.exit(s._activate_console())\r
+ else:\r
+ print('Scapy client: for interactive console re-run with \'-c\', else import as seperate module.')\r
+\r
\r
\r
def error_handler(self,e,req_id):\r
+ response = []\r
try:\r
raise e\r
except ParseException as e:\r
try:\r
while True:\r
message = self.socket.recv_string()\r
+ if args.verbose:\r
+ print('Received Message: %s \n' % 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
response = self.scapy_wrapper.error_handler(e,req_id)\r
finally:\r
json_response = json.dumps(response)\r
+ if args.verbose:\r
+ print('Sending Message: %s \n' % json_response)\r
# Send reply back to client\r
self.socket.send_string(json_response)\r
if (method == 'shut_down'):\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
args = parser.parse_args()\r
port = args.scapy_port\r
sys.exit(main(port))\r