From: Eric Leblond Date: Thu, 11 Dec 2014 19:01:59 +0000 (+0100) Subject: suricatasc: now python 2 and 3 compatible X-Git-Tag: suricata-2.1beta3~100 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=55ccd3b17da45ea0fe234cddc99057a7eaf8e3fb;p=thirdparty%2Fsuricata.git suricatasc: now python 2 and 3 compatible Update code to support both python 2 and python 3. --- diff --git a/scripts/suricatasc/src/suricatasc.py b/scripts/suricatasc/src/suricatasc.py index d3babe188e..c941b4b51e 100644 --- a/scripts/suricatasc/src/suricatasc.py +++ b/scripts/suricatasc/src/suricatasc.py @@ -14,7 +14,10 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import simplejson as json +try: + import simplejson as json +except: + import json import re import readline from socket import socket, AF_UNIX, error @@ -69,7 +72,7 @@ class SuricataCompleter: if state == 0: self.generator = self.complete(text) try: - return self.generator.next() + return next(self.generator) except StopIteration: return None return None @@ -86,11 +89,14 @@ class SuricataSC: data = "" while i < 5: i += 1 - data += self.socket.recv(SIZE) + if sys.version < '3': + data += self.socket.recv(SIZE) + else: + data += self.socket.recv(SIZE).decode('iso-8859-1') try: cmdret = json.loads(data) break - except json.decoder.JSONDecodeError: + except: sleep(0.3) return cmdret @@ -103,15 +109,18 @@ class SuricataSC: if (arguments != None): cmdmsg['arguments'] = arguments if self.verbose: - print "SND: " + json.dumps(cmdmsg) - self.socket.send(json.dumps(cmdmsg)) + print("SND: " + json.dumps(cmdmsg)) + if sys.version < '3': + self.socket.send(json.dumps(cmdmsg)) + else: + self.socket.send(bytes(json.dumps(cmdmsg), 'iso-8859-1')) cmdret = self.json_recv() if cmdret == None: raise SuricataReturnException("Unable to get message from server") if self.verbose: - print "RCV: "+ json.dumps(cmdret) + print("RCV: "+ json.dumps(cmdret)) return cmdret @@ -119,14 +128,17 @@ class SuricataSC: try: self.socket = socket(AF_UNIX) self.socket.connect(self.sck_path) - except error, err: + except error as err: raise SuricataNetException(err) self.socket.settimeout(10) #send version if self.verbose: - print "SND: " + json.dumps({"version": VERSION}) - self.socket.send(json.dumps({"version": VERSION})) + print("SND: " + json.dumps({"version": VERSION})) + if sys.version < '3': + self.socket.send(json.dumps({"version": VERSION})) + else: + self.socket.send(bytes(json.dumps({"version": VERSION}), 'iso-8859-1')) # get return cmdret = self.json_recv() @@ -135,7 +147,7 @@ class SuricataSC: raise SuricataReturnException("Unable to get message from server") if self.verbose: - print "RCV: "+ json.dumps(cmdret) + print("RCV: "+ json.dumps(cmdret)) if cmdret["return"] == "NOK": raise SuricataReturnException("Error: %s" % (cmdret["message"])) @@ -192,27 +204,30 @@ class SuricataSC: return (cmd, arguments) def interactive(self): - print "Command list: " + ", ".join(self.cmd_list) + print("Command list: " + ", ".join(self.cmd_list)) try: readline.set_completer(SuricataCompleter(self.cmd_list)) readline.set_completer_delims(";") readline.parse_and_bind('tab: complete') while True: - command = raw_input(">>> ").strip() + if sys.version < '3': + command = raw_input(">>> ").strip() + else: + command = input(">>> ").strip() if command == "quit": break; try: (cmd, arguments) = self.parse_command(command) - except SuricataCommandException, err: - print err + except SuricataCommandException as err: + print(err) continue cmdret = self.send_command(cmd, arguments) #decode json message if cmdret["return"] == "NOK": - print "Error:" - print json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': ')) + print("Error:") + print(json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': '))) else: - print "Success:" - print json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': ')) + print("Success:") + print(json.dumps(cmdret["message"], sort_keys=True, indent=4, separators=(',', ': '))) except KeyboardInterrupt: - print "[!] Interrupted" + print("[!] Interrupted") diff --git a/scripts/suricatasc/suricatasc.in b/scripts/suricatasc/suricatasc.in index 12340a715d..ea00f09380 100755 --- a/scripts/suricatasc/suricatasc.in +++ b/scripts/suricatasc/suricatasc.in @@ -32,28 +32,28 @@ else: sc = SuricataSC(SOCKET_PATH, verbose=args.verbose) try: sc.connect() -except SuricataNetException, err: - print "Unable to connect to socket %s: %s" % (SOCKET_PATH, err) +except SuricataNetException as err: + print("Unable to connect to socket %s: %s" % (SOCKET_PATH, err)) sys.exit(1) -except SuricataReturnException, err: - print "Unable to negotiate version with server: %s" % (err) +except SuricataReturnException as err: + print("Unable to negotiate version with server: %s" % (err)) sys.exit(1) if args.command: (command, arguments) = sc.parse_command(args.command) - print sc.send_command(command, arguments) + print(sc.send_command(command, arguments)) sc.close() sys.exit(0) try: sc.interactive() -except SuricataNetException, err: - print "Communication error: %s" % (err) +except SuricataNetException as err: + print("Communication error: %s" % (err)) sys.exit(1) -except SuricataReturnException, err: - print "Invalid return from server: %s" % (err) +except SuricataReturnException as err: + print("Invalid return from server: %s" % (err)) sys.exit(1) -print "[+] Quit command client" +print("[+] Quit command client") sc.close()