diff options
Diffstat (limited to 'UDP')
-rw-r--r-- | UDP/README | 52 | ||||
-rw-r--r-- | UDP/config | 15 | ||||
-rwxr-xr-x | UDP/index | 94 |
3 files changed, 0 insertions, 161 deletions
diff --git a/UDP/README b/UDP/README deleted file mode 100644 index 587c804..0000000 --- a/UDP/README +++ /dev/null @@ -1,52 +0,0 @@ -# Specifications -From 2011-09-16: -## Use Case - [ - { - "port": 1337, - "pattern": "XXYY", - "comment" : "does the right thing", - "action" : { - "POST": { - "url" : "xyz", - "data" : "abc" - } - } - } - ] -## Head definition - { - "bind_addr" : "127.0.0.1", - "port" : 1234, - "pattern" : "XXZZ", - "action" : { }, - } -bind is an optional entry which lets the user define a bind address for the server. -terminator is optional which lets the user define the EOM terminator. - -## Actions -### POST -"POST" : { - "url" : "http://euer.krebsco.de/", - "data" : "{ \"something\" : \"else\" }" - } - -### PROCESS -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" : { - { - "path": "/usr/bin/bc", - "argv": [ - "bc" - ], - "envp": { - "was": "geht", - }, - "stdout": "uri:///path/to/somewhere", - "stderr": "uri:///path/to/somewhere" - } - } diff --git a/UDP/config b/UDP/config deleted file mode 100644 index 623c721..0000000 --- a/UDP/config +++ /dev/null @@ -1,15 +0,0 @@ -[ - { - "comment" : "listener for licht.shack", - "bind_addr" : "0.0.0.0", - "port" : 2342, - "pattern" : "", - "action" : { - "PROCESS" : { - "path" : "/krebs/Reaktor/udp_commands/licht_resolver", - "argv" : [ ], - "envp" : { } - } - } - } -] diff --git a/UDP/index b/UDP/index deleted file mode 100755 index ffe3d6b..0000000 --- a/UDP/index +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/python - -import asyncore, socket -import logging,subprocess -import re -import json -log = logging.getLogger('ubot') - -def enable_syslog(logger): - import logging.handlers as handlers - from logging import Formatter - hdlr = handlers.SysLogHandler( - facility=handlers.SysLogHandler.LOG_DAEMON) - formatter = Formatter( - '%(filename)s: %(levelname)s: %(message)s') - hdlr.setFormatter(formatter) - logger.addHandler(hdlr) - -from twisted.internet.protocol import DatagramProtocol -from twisted.internet import reactor -from twisted.application.internet import MulticastServer -from socket import SOL_SOCKET,SO_BROADCAST -class ubot(DatagramProtocol): -# def startProtocol(self): -# log.info("Starting Listener for Multicast") -# self.transport.joinGroup("255.255.255.255") - - """ UDP Bot """ - def startProtocol(self): - log.info("starting Protocol at host (%s)" % self.bind_addr) - #self.transport. - if self.bind_addr != "255.255.255.255": - self.transport.joinGroup(self.bind_addr) - else: - self.transport.socket.setsockopt(SOL_SOCKET,SO_BROADCAST,True) - def __init__(self, pattern,action,bind_addr,**kwargs): - #DatagramProtocol.__init__(self) - self.data = '' - self.pattern = pattern - self.action = action - self.bind_addr = bind_addr - - def datagramReceived(self,datagram,addr): - self.data = datagram - log.debug('<< %s' % self.data) - if self.find_pattern(): - self.start_action() - - def find_pattern(self): - """ returns true if own pattern is found""" - log.debug("Pattern is %s" %self.pattern) - ret = re.search(self.pattern,self.data) - if ret: - log.info("Match \"%s\" with pattern \"%s\"" % ((ret.string.strip()),self.pattern)) - else: - log.info("No Match") - return ret - - - def start_action(self): - """ runs all the defined actions""" - log.debug("Actions: %s" % str(self.action)) - 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) - for i in load_conf("%s/config" %HERE): - reactor.listenMulticast(i["port"], ubot(**i)) - reactor.run() |