diff options
Diffstat (limited to 'Reaktor/UDP/index')
-rwxr-xr-x | Reaktor/UDP/index | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Reaktor/UDP/index b/Reaktor/UDP/index new file mode 100755 index 00000000..b7a21508 --- /dev/null +++ b/Reaktor/UDP/index @@ -0,0 +1,76 @@ +#!/usr/bin/python + +import asyncore, socket +import logging +import re +import sys +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) + + +class ubot(asyncore.dispatcher): + """ UDP Bot """ + def __init__(self, port,pattern,action,bind_addr="",): + asyncore.dispatcher.__init__(self) + self.bind_addr = bind_addr + self.port = port + self.data = '' + self.pattern = pattern + self.action = action + self.bind_socket() + + def bind_socket(self): + """ + if the socket is already bound we want to reuse this socket anyway + """ + self.create_socket(socket.AF_INET,socket.SOCK_DGRAM) + self.set_reuse_addr() + self.socket.setsockopt( + socket.SOL_SOCKET,socket.SO_BROADCAST,1) + log.info("Binding Socket at %s:%d" + %(self.bind_addr,self.port)) + self.bind( (self.bind_addr,self.port) ) + + def handle_connect(self): + log.info("Server Started") + + def handle_read(self): + self.data,addr = self.recvfrom(2048) + 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)) + log.error("not yet implemented") + sys.exit(23) + +if __name__ == "__main__": + import os + #enable_syslog(log) + lol = logging.DEBUG if os.environ.get('debug',False) else logging.INFO + logging.basicConfig(level=lol) + ubot(1337,r'abc',{}) + asyncore.loop() |