1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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()
|