]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
suricatasc: real cmd line parsing and verbose mode
authorEric Leblond <eric@regit.org>
Fri, 30 Nov 2012 19:47:47 +0000 (20:47 +0100)
committerVictor Julien <victor@inliniac.net>
Tue, 26 Feb 2013 11:32:48 +0000 (12:32 +0100)
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.

scripts/suricatasc/suricatasc.in

index 567c89edf581af8cbdfbd3e4f84dcb8a5f424d1d..e784186917bfef08377a844e902b01150cb70223 100755 (executable)
@@ -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"])