diff options
author | root <root@krebs> | 2011-09-25 02:53:05 +0200 |
---|---|---|
committer | root <root@krebs> | 2011-09-25 02:53:05 +0200 |
commit | a30932e4c793ceb2c813986bd84e8f99d1dc84a5 (patch) | |
tree | 218e0851b651ae147167fdb9ca4774e2be73ccda /Reaktor/UDP | |
parent | 14636218a1ca18cf66c507d39c6784a6b28f7528 (diff) |
Reaktor/UDP: working release
Reaktor/UDP is customizable via a single json config parsed at the very beginning,
starting a number of asynchronous UDP listeners. See Readme for more info
Diffstat (limited to 'Reaktor/UDP')
-rw-r--r-- | Reaktor/UDP/README | 7 | ||||
-rw-r--r-- | Reaktor/UDP/config | 15 | ||||
-rwxr-xr-x | Reaktor/UDP/index | 33 |
3 files changed, 47 insertions, 8 deletions
diff --git a/Reaktor/UDP/README b/Reaktor/UDP/README index ad7117fe..587c8046 100644 --- a/Reaktor/UDP/README +++ b/Reaktor/UDP/README @@ -5,6 +5,7 @@ From 2011-09-16: { "port": 1337, "pattern": "XXYY", + "comment" : "does the right thing", "action" : { "POST": { "url" : "xyz", @@ -15,10 +16,9 @@ From 2011-09-16: ] ## Head definition { - "bind" : "127.0.0.1", + "bind_addr" : "127.0.0.1", "port" : 1234, "pattern" : "XXZZ", - "terminator" : "\r\n" "action" : { }, } bind is an optional entry which lets the user define a bind address for the server. @@ -35,6 +35,7 @@ terminator is optional which lets the user define the EOM terminator. Process is taken from //hyper/process/test/bc.json - rev:a7fd3f stdout/stderr are optional and if left away data will be written to real stdout/stderr +in the process in envp => "payload" will be allocated for the given payload from the network "PROCESS" : { { @@ -43,7 +44,7 @@ stdout/stderr are optional and if left away data will be written to real stdout/ "bc" ], "envp": { - "was": "geht" + "was": "geht", }, "stdout": "uri:///path/to/somewhere", "stderr": "uri:///path/to/somewhere" diff --git a/Reaktor/UDP/config b/Reaktor/UDP/config new file mode 100644 index 00000000..34f0d0bc --- /dev/null +++ b/Reaktor/UDP/config @@ -0,0 +1,15 @@ +[ + { + "comment" : "listener for licht.shack", + "bind_addr" : "0.0.0.0", + "port" : 2342, + "pattern" : "", + "action" : { + "PROCESS" : { + "path" : "/krebs/Reaktor/UDP/licht_resolver", + "argv" : [ ], + "envp" : { } + } + } + } +] diff --git a/Reaktor/UDP/index b/Reaktor/UDP/index index b7a21508..3e0bbd15 100755 --- a/Reaktor/UDP/index +++ b/Reaktor/UDP/index @@ -1,9 +1,10 @@ #!/usr/bin/python import asyncore, socket -import logging +import logging,subprocess import re import sys +import json log = logging.getLogger('ubot') def enable_syslog(logger): @@ -19,7 +20,7 @@ def enable_syslog(logger): class ubot(asyncore.dispatcher): """ UDP Bot """ - def __init__(self, port,pattern,action,bind_addr="",): + def __init__(self, port,pattern,action,comment="",bind_addr="",): asyncore.dispatcher.__init__(self) self.bind_addr = bind_addr self.port = port @@ -64,13 +65,35 @@ class ubot(asyncore.dispatcher): def start_action(self): """ runs all the defined actions""" log.debug("Actions: %s" % str(self.action)) - log.error("not yet implemented") - sys.exit(23) + self.start_process() + self.start_post() + + def start_process(self): + try: + act = self.action["PROCESS"] + proc = [] + proc.append(act["path"]) + proc.extend(act["argv"]) + + env = act["envp"] + env["payload"] = json.dumps(self.data) + log.info("Starting Process: %s (env: %s)" % (proc,env)) + subprocess.Popen(proc,env=env) + except Exception as e: + log.error(e) + def start_post(self): + pass + +def load_conf(conf_file): + return json.load(open(conf_file)) + if __name__ == "__main__": import os #enable_syslog(log) + HERE = os.path.dirname(os.path.realpath(__file__)) lol = logging.DEBUG if os.environ.get('debug',False) else logging.INFO logging.basicConfig(level=lol) - ubot(1337,r'abc',{}) + for i in load_conf("%s/config" %HERE): + ubot(**i) asyncore.loop() |