From: Eric Leblond Date: Fri, 30 Nov 2012 19:47:47 +0000 (+0100) Subject: suricatasc: real cmd line parsing and verbose mode X-Git-Tag: suricata-1.4.1~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36519fb4e4d5869ef1ea2944dbe3f84b95809fee;p=thirdparty%2Fsuricata.git suricatasc: real cmd line parsing and verbose mode This patch adds commandline parsing and help to suricatasc. It also adds a verbose mode (-v) where the send and received JSON object are shown. This should ease development of unix socket client. --- diff --git a/scripts/suricatasc/suricatasc.in b/scripts/suricatasc/suricatasc.in index 567c89edf5..e784186917 100755 --- a/scripts/suricatasc/suricatasc.in +++ b/scripts/suricatasc/suricatasc.in @@ -20,6 +20,10 @@ import re from socket import socket, AF_UNIX, error from time import sleep import sys +import argparse + +VERSION = "0.1" +SIZE = 4096 class Completer: def __init__(self, words): @@ -54,18 +58,23 @@ def json_recv(socket): sleep(0.3) return cmdret -VERSION = "0.1" -if len(sys.argv) == 2: - SOCKET_PATH = "@e_localstatedir@/" + sys.argv[1] +parser = argparse.ArgumentParser(prog='suricatasc', description='Client for Suricata unix socket') +parser.add_argument('-v', '--verbose', action='store_const', const=True, help='verbose output (including JSON dump)') +parser.add_argument('socket', metavar='socket', nargs='?', help='socket file to connnect to', default=None) +args = parser.parse_args() + +if args.socket != None: + SOCKET_PATH = "@e_localstatedir@/" + args.socket[0] else: SOCKET_PATH = "@e_localstatedir@/suricata-command.socket" -SIZE = 4096 socket = socket(AF_UNIX) socket.connect(SOCKET_PATH) socket.settimeout(10) #send version +if args.verbose: + print "SND: " + json.dumps({"version": VERSION}) socket.send(json.dumps({"version": VERSION})) # get return @@ -75,6 +84,8 @@ if cmdret == None: sys.stderr.write("Unable to get message from server") sys.exit(1) +if args.verbose: + print "RCV: "+ json.dumps(cmdret) # if ok loop if cmdret["return"] == "NOK": sys.stderr.write("Error: %s" % (cmdret["message"])) @@ -82,6 +93,8 @@ if cmdret["return"] == "NOK": # get command list +if args.verbose: + print "SND: " + json.dumps({"command": "command-list"}) socket.send(json.dumps({"command": "command-list"})) cmdret = json_recv(socket) @@ -89,6 +102,9 @@ if cmdret == None: sys.stderr.write("Unable to get message from server") sys.exit(1) +if args.verbose: + print "RCV: "+ json.dumps(cmdret) + # if ok loop if cmdret["return"] == "NOK": sys.stderr.write("Error: %s" % (cmdret["message"])) @@ -150,15 +166,20 @@ try: cmdmsg["command"] = cmd cmdmsg["arguments"] = {} cmdmsg["arguments"]["variable"] = variable - else: cmdmsg["command"] = command + if args.verbose: + print "SND: " + json.dumps(cmdmsg) socket.send(json.dumps(cmdmsg)) cmdret = json_recv(socket) if cmdret == None: sys.stderr.write("Unable to get message from server") sys.exit(1) + + if args.verbose: + print "RCV: "+ json.dumps(cmdret) + #decode json message if cmdret["return"] == "NOK": print "Error: %s" % (cmdret["message"])