def parse(fingerprint: dict, single_rule=True): """ Parses a rule form a fingerprint Supports tuple min, max notation for values. Example: (1, 3) means include values between 1 and 3 (inclusive) :param single_rule: Optional. If true, a single rule will be returned, otherwise it will be one rule per property. Defaults to True. :param fingerprint: Fingerprint as {property: [values]} :return: """ rules = [] for prop, values in fingerprint.items(): if prop is 'protocol': continue if prop is Fingerprint.TCP_FLAG_KEY: prop_rules = [p == 1 for p in values] else: prop_rules = [] if isinstance(values, list): for v in values: if isinstance(v, tuple): min_v, max_v = v prop_rules.append((prop >= min_v) & (prop <= max_v)) else: prop_rules.append(prop == v) else: prop_rules.append(prop == values) rules.append(Rule.one(*prop_rules)) if single_rule: return Rule.all(*rules) return rules
def main(): fillMsgGeneratorQueue(maxStep=maxStep, maxBurstSize=maxBurstSize, msgGroupIdRange=msgGroupIdRange) Gw = gwInterface() Resource = ResourceCounter(numberResources) #basicRule1=Rule(ruleId=1,priorityGroupList=[]) #basicRule2=Rule(ruleId=2,priorityGroupList=[3,1]) #basicRule3=Rule(ruleId=3,modulo=[3],remainderList=[0,1]) cancelationRule = Rule() #Rule(ruleId=4, cancelation=[2]) terminationRule = Rule() #Rule(ruleId=5,termination=[3]) if ruleId == 1: basicRule = Rule(ruleId=ruleId, priorityGroupList=[]) if ruleId == 2: basicRule = Rule(ruleId=ruleId, priorityGroupList=priorityGroupList) if ruleId == 3: basicRule = Rule(ruleId=ruleId, modulo=modulo, remainderList=remainderList) t = ThreadMessageGeneratorSender(msgGeneratorQueue, msgRuleQueue, timeSleepMaxGenerator) t1 = ThreadRule(msgRuleQueue, msgForwarderQueue, Resource, rule=basicRule, ruleCancelation=cancelationRule, ruleTermination=terminationRule) t2 = ThreadForwarderToGwIntf(msgForwarderQueue, Resource, Gw) t3 = ThreadGwSenderToResource(gwQueue, resourceQueue) t4 = ThreadResource(resourceQueue, timeSleepMaxResource, responseResourceToGwQueue) t5 = ThreadResponseResourceToGw(responseResourceToGwQueue, Resource) t.setDaemon(True) t1.setDaemon(True) t2.setDaemon(True) t3.setDaemon(True) t4.setDaemon(True) t5.setDaemon(True) t.start() t1.start() t2.start() t3.start() t4.start() t5.start() main_thread = threading.currentThread() threads = threading.enumerate() for t in threads: print t msgGeneratorQueue.join() msgRuleQueue.join() msgForwarderQueue.join() gwQueue.join() resourceQueue.join() responseResourceToGwQueue.join()
def testInit(self): rule = Rule() self.assertIsInstance(rule, Rule) rule1 = Rule(ruleId=1, priorityGroupList=[]) self.assertIsInstance(rule1, Rule) rule2 = Rule(ruleId=2, priorityGroupList=[2, 3]) self.assertIsInstance(rule2, Rule) rule3 = Rule(ruleId=3, modulo=[2], remainderList=[1]) self.assertIsInstance(rule3, Rule) rule4 = Rule(ruleId=4, cancelation=[2, 3]) self.assertIsInstance(rule4, Rule) rule5 = Rule(ruleId=5, termination=[3, 4]) self.assertIsInstance(rule5, Rule) with self.assertRaises(AssertionError): Rule(ruleId=1.2) with self.assertRaises(AssertionError): Rule(ruleId=[1, 2, 3]) with self.assertRaises(AssertionError): Rule(ruleId=1, priorityGroupList=2) with self.assertRaises(AssertionError): Rule(ruleId=2, priorityGroupList=[1, 1.3]) with self.assertRaises(AssertionError): Rule(ruleId=3, modulo=[2, 3], remainderList=[1]) with self.assertRaises(AssertionError): Rule(ruleId=3, modulo=[4], remainderList=[1.3, 3])
def testRun(self): msg1 = Message(msgRef="1234abcd", msgGroupId=1, msgBody="1234abcd") msg2 = Message(msgRef="1235abcd", msgGroupId=2, msgBody="1234abcd") msg3 = Message(msgRef="1236abcd", msgGroupId=3, msgBody="1234abcd") msg4 = Message(msgRef="1237abcd", msgGroupId=4, msgBody="1234abcd") rule1 = Rule(ruleId=1, priorityListGroup=[]) rule1.setParam(priorityGroupList=[2]) ruleMsg1Priority = rule1.run(msg1) ruleMsg2Priority = rule1.run(msg2) ruleMsg3Priority = rule1.run(msg3) ruleMsg4Priority = rule1.run(msg4) self.assertEqual(ruleMsg1Priority, 2) self.assertEqual(ruleMsg2Priority, 1) self.assertEqual(ruleMsg3Priority, 2) self.assertEqual(ruleMsg4Priority, 2) rule2 = Rule(ruleId=2, priorityListGroup=[3]) rule2.setParam(priorityGroupList=[2, 4]) ruleMsg1Priority = rule2.run(msg1) ruleMsg2Priority = rule2.run(msg2) ruleMsg3Priority = rule2.run(msg3) ruleMsg4Priority = rule2.run(msg4) self.assertEqual(ruleMsg1Priority, 2) self.assertEqual(ruleMsg2Priority, 1) self.assertEqual(ruleMsg3Priority, 2) self.assertEqual(ruleMsg4Priority, 1) rule3 = Rule(ruleId=3, modulo=[2], remainderList=[1]) rule3.setParam(remainderList=[0]) ruleMsg1Priority = rule3.run(msg1) ruleMsg2Priority = rule3.run(msg2) ruleMsg3Priority = rule3.run(msg3) ruleMsg4Priority = rule3.run(msg4) self.assertEqual(ruleMsg1Priority, 2) self.assertEqual(ruleMsg2Priority, 1) self.assertEqual(ruleMsg3Priority, 2) self.assertEqual(ruleMsg4Priority, 1) rule4 = Rule(ruleId=4, cancelation=[2]) rule4.setParam(cancelation=[2, 3]) ruleMsg1Priority = rule4.run(msg1) ruleMsg2Priority = rule4.run(msg2) ruleMsg3Priority = rule4.run(msg3) ruleMsg4Priority = rule4.run(msg4) self.assertEqual(ruleMsg1Priority, 1) self.assertEqual(ruleMsg2Priority, 4) self.assertEqual(ruleMsg3Priority, 4) self.assertEqual(ruleMsg4Priority, 1) rule5 = Rule(ruleId=5, termination=[1]) rule5.setParam(termination=[3, 1]) ruleMsg1Priority = rule5.run(msg1) ruleMsg2Priority = rule5.run(msg2) ruleMsg3Priority = rule5.run(msg3) ruleMsg4Priority = rule5.run(msg4) self.assertEqual(ruleMsg1Priority, 5) self.assertEqual(ruleMsg2Priority, 1) self.assertEqual(ruleMsg3Priority, 5) self.assertEqual(ruleMsg4Priority, 1)
def testSetParamGetParam(self): rule1 = Rule(ruleId=1) self.assertEqual(rule1.getParam("ruleId"), 1) rule1.setParam(priorityGroupList=[2, 4]) self.assertEqual(rule1.getParam("priorityGroupList"), [2, 4]) rule1.setParam(ruleId=3, modulo=[4], remainderList=[0, 1]) self.assertEqual(rule1.getParam("modulo"), [4]) self.assertEqual(rule1.getParam("remainderList"), [0, 1]) rule1.setParam(ruleId=4, cancelation=[4, 7]) self.assertEqual(rule1.getParam("cancelation"), [4, 7]) rule1.setParam(ruleId=5, termination=[5, 9]) self.assertEqual(rule1.getParam("termination"), [5, 9])
from Conditions import Condition from Protocols import IPv4, Ethernet, TCP, UDP from Rules import Rule # Some valid conditions a = Ethernet['src'] != 'b1:30:a2:bf:0f:c7' b = IPv4['src'] < '100.0.0.0' # Combine conditions by AND cond = a & b cond = Condition(a, '&&', b) rule = Rule.all(a, b) rule = Rule(Rule(a), '&&', Rule(b)) # Combine conditions by OR cond = a | b cond = Condition(a, '||', b) rule = Rule.one(a, b) rule = Rule(Rule(a), '||', Rule(b)) # THIS WON'T WORK: Conditions cannot be combined with rules with & and | error = Rule(a) | b # But can be combined with Rule.all() and Rule.one() working = Rule.all(Rule(a), b) # Recommended way to create more complex rules rule = Rule.all( Rule.one(Ethernet['src'] != 'b1:30:a2:bf:0f:c7', IPv4['src'] < '100.0.0.0', IPv4['len'] >= 100), Rule.one(TCP['fin'] == 1, UDP['len'] >= 100))
from Protocols import IPv4 from Rules import Rule # Creating a condition is pretty easy condition = IPv4['src'] == '1.2.3.4' # Creating a rule with the same condition can be done in various ways: rule = Rule(condition) # Condition in variable rule = Rule(IPv4['src'] == '1.2.3.4') # Condition directly in constructor rule = Rule(IPv4['src'], '==', '1.2.3.4') # Separate parts of condition directly in Rule
from Program import Program from Protocols import IPv4, TCP, UDP, Ethernet from Rules import Rule # Filter packets from 132.68.0.0/16 larger than 250 bytes rule1 = Rule.all(Ethernet['len'] > 250, IPv4['src'] >= '132.68.0.0', IPv4['src'] <= '132.68.255.255') # Filter packets from port 53 (DNS) larger than 1000 rule2 = Rule.all(Ethernet['len'] > 1000, Rule.one(UDP['src'] == 53, TCP['src'] == 53)) # Generate program Program.generate_code(rule1, rule2, file='test.c')
"""Read and parse rules from a rulefile. The rulefile is created if it does not yet exist. @param fwrulefile: read the rules from this file @type fwrulefile: str @return: list of rules @rtype: [Rule()] """ try: f = open(fwrulefile, 'r') except IOError, e: # retry if it did not exist if e.errno == 2: f = open(fwrulefile, 'w+') l = [Rule(s) for s in f.readlines() if s.strip()] #syslog.syslog(str(l)) f.close() return l def _write_rules(rules, fwrulefile): """Write list of rules into the rulefile. The old rulefile is replaced atomically with the new one. The file is created if necessary. @param rules: rules to write @type rules: [Rule()] @param fwrulefile: name of the rulefile
#tipo diabetes #1- 5d9445f8a2b9c03514aab2d0 -- tipo 1 #2- 5d944733a2b9c03514aab2d1 -- tipo 2 #3- 5d944768a2b9c03514aab2d2 -- gestacional # Creo una lista de objetos Ruta a insertar en la BD filters = [Filter("sintoma"),Filter("antecedente"),Filter("enfermedades"),Filter("tipo diabetes")] facts = [Fact("5d93da0d187f6d2fb4cc1eba","sed excesiva","¿Ha tenido sed excesiva?",1,['si','no']), Fact("5d93da0d187f6d2fb4cc1eba","micción frecuente","¿Tiene micción frecuente?",1,['si','no']), Fact("5d93da0d187f6d2fb4cc1eba","aumento del apetito","¿Ha tenido hambre excesiva?",1,['si','no']), Fact("5d93da0d187f6d2fb4cc1eba","fatiga","¿Se ha sentido fatigado?",1,['si','no']), Fact("5d93da0d187f6d2fb4cc1eba","visión borrosa","¿Ha tenido visión borrosa?",1,['si','no']) ] rules = [Rule("5d941c98187f6d2c9cd73594","5d9445f8a2b9c03514aab2d0",0.7), Rule("5d941c98187f6d2c9cd73594","5d944733a2b9c03514aab2d1",0.7), Rule("5d941c98187f6d2c9cd73594","5d944768a2b9c03514aab2d2",0.6), Rule("5d941c98187f6d2c9cd73595","5d9445f8a2b9c03514aab2d0",0.7), Rule("5d941c98187f6d2c9cd73595","5d944733a2b9c03514aab2d1",0.7), Rule("5d941c98187f6d2c9cd73595","5d944768a2b9c03514aab2d2",0.5) ] types = [Tipo("5d9445f8a2b9c03514aab2d0","tipo 1",0.0), Tipo("5d944733a2b9c03514aab2d1","tipo 2",0.0), Tipo("5d944768a2b9c03514aab2d2","tipo gestacional",0.0) ] #Conexión al Server de MongoDB Pasandole el host y el puerto mongoClient = MongoClient('localhost',27017)
def testRun(self): msg1=Message(msgRef="1234abcd",msgGroupId=1,msgBody="1234abcd") msg2=Message(msgRef="1235abcd",msgGroupId=2,msgBody="1234abcd") msg3=Message(msgRef="1236abcd",msgGroupId=3,msgBody="1234abcd") msg4=Message(msgRef="1237abcd",msgGroupId=4,msgBody="1234abcd") rule1=Rule(ruleId=1,priorityListGroup=[]) rule1.setParam(priorityGroupList=[2]) ruleMsg1Priority=rule1.run(msg1) ruleMsg2Priority=rule1.run(msg2) ruleMsg3Priority=rule1.run(msg3) ruleMsg4Priority=rule1.run(msg4) self.assertEqual(ruleMsg1Priority,2) self.assertEqual(ruleMsg2Priority,1) self.assertEqual(ruleMsg3Priority,2) self.assertEqual(ruleMsg4Priority,2) rule2=Rule(ruleId=2,priorityListGroup=[3]) rule2.setParam(priorityGroupList=[2,4]) ruleMsg1Priority=rule2.run(msg1) ruleMsg2Priority=rule2.run(msg2) ruleMsg3Priority=rule2.run(msg3) ruleMsg4Priority=rule2.run(msg4) self.assertEqual(ruleMsg1Priority,2) self.assertEqual(ruleMsg2Priority,1) self.assertEqual(ruleMsg3Priority,2) self.assertEqual(ruleMsg4Priority,1) rule3=Rule(ruleId=3,modulo=[2],remainderList=[1]) rule3.setParam(remainderList=[0]) ruleMsg1Priority=rule3.run(msg1) ruleMsg2Priority=rule3.run(msg2) ruleMsg3Priority=rule3.run(msg3) ruleMsg4Priority=rule3.run(msg4) self.assertEqual(ruleMsg1Priority,2) self.assertEqual(ruleMsg2Priority,1) self.assertEqual(ruleMsg3Priority,2) self.assertEqual(ruleMsg4Priority,1) rule4=Rule(ruleId=4,cancelation=[2]) rule4.setParam(cancelation=[2,3]) ruleMsg1Priority=rule4.run(msg1) ruleMsg2Priority=rule4.run(msg2) ruleMsg3Priority=rule4.run(msg3) ruleMsg4Priority=rule4.run(msg4) self.assertEqual(ruleMsg1Priority,1) self.assertEqual(ruleMsg2Priority,4) self.assertEqual(ruleMsg3Priority,4) self.assertEqual(ruleMsg4Priority,1) rule5=Rule(ruleId=5,termination=[1]) rule5.setParam(termination=[3,1]) ruleMsg1Priority=rule5.run(msg1) ruleMsg2Priority=rule5.run(msg2) ruleMsg3Priority=rule5.run(msg3) ruleMsg4Priority=rule5.run(msg4) self.assertEqual(ruleMsg1Priority,5) self.assertEqual(ruleMsg2Priority,1) self.assertEqual(ruleMsg3Priority,5) self.assertEqual(ruleMsg4Priority,1)
def testSetParamGetParam(self): rule1=Rule(ruleId=1) self.assertEqual(rule1.getParam("ruleId"),1) rule1.setParam(priorityGroupList=[2,4]) self.assertEqual(rule1.getParam("priorityGroupList"),[2,4]) rule1.setParam(ruleId=3,modulo=[4],remainderList=[0,1]) self.assertEqual(rule1.getParam("modulo"),[4]) self.assertEqual(rule1.getParam("remainderList"),[0,1]) rule1.setParam(ruleId=4,cancelation=[4,7]) self.assertEqual(rule1.getParam("cancelation"),[4,7]) rule1.setParam(ruleId=5,termination=[5,9]) self.assertEqual(rule1.getParam("termination"),[5,9])