header = m.group("header").strip()
+ rule = Rule(enabled=enabled, group=group)
+
# If a decoder rule, the header will be one word.
if len(header.split(" ")) == 1:
action = header
if states[state] == "action":
action = token
elif states[state] == "proto":
- proto = token
+ rule["proto"] = token
elif states[state] == "source_addr":
- source_addr = token
+ rule["source_addr"] = token
elif states[state] == "source_port":
- source_port = token
+ rule["source_port"] = token
elif states[state] == "direction":
direction = token
elif states[state] == "dest_addr":
- dest_addr = token
+ rule["dest_addr"] = token
elif states[state] == "dest_port":
- dest_port = token
+ rule["dest_port"] = token
state += 1
if action not in actions:
return None
- rule = Rule(enabled=enabled, action=action, group=group)
+ rule["action"] = action
rule["direction"] = direction
rule["header"] = header
rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] any -> any any (msg:"TEST"; sid:1; rev:1;)""")
self.assertIsNotNone(rule)
-
- rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] [1,2,3] -> any any (msg:"TEST"; sid:1; rev:1;)""")
+ self.assertEqual(rule["source_addr"], "[$HOME_NET, $OTHER_NET]")
+
+ rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] [1, 2, 3] -> any any (msg:"TEST"; sid:1; rev:1;)""")
self.assertIsNotNone(rule)
+ self.assertEqual(rule["source_port"], "[1, 2, 3]")
rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] [1,2,3] -> [!$XNET, $YNET] any (msg:"TEST"; sid:1; rev:1;)""")
self.assertIsNotNone(rule)
+ self.assertEqual(rule["dest_addr"], "[!$XNET, $YNET]")
- rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] [1,2,3] -> [!$XNET, $YNET] [!2200] (msg:"TEST"; sid:1; rev:1;)""")
+ rule = suricata.update.rule.parse("""alert any [$HOME_NET, $OTHER_NET] [1,2,3] -> [!$XNET, $YNET] [!2200, 5500] (msg:"TEST"; sid:1; rev:1;)""")
self.assertIsNotNone(rule)
+ self.assertEqual(rule["dest_port"], "[!2200, 5500]")