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
Example #2
0
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()
Example #3
0
    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])
Example #4
0
    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)
Example #5
0
    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
Example #8
0
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')
Example #9
0
    """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
Example #10
0
#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)

Example #11
0
    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)
Example #12
0
 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])