├── .env ├── .gitignore ├── .pylintrc ├── .travis.yml ├── LICENSE ├── MANIFEST.in ├── NOTICE ├── README.md ├── examples ├── example1.xml ├── example2.xml ├── hdr_features_complex.txt ├── hdr_features_simple.txt ├── mac_definition_file.txt ├── re_features_complex.txt ├── re_features_simple.txt └── sniffles_example_config.txt ├── requirements.txt ├── setup.cfg ├── setup.py ├── src └── sniffles │ ├── __init__.py │ ├── feature.py │ ├── nfa.py │ ├── pcre.h │ ├── pcre_chartables.c │ ├── pcre_compile.c │ ├── pcre_globals.c │ ├── pcre_internal.h │ ├── pcre_newline.c │ ├── pcre_tables.c │ ├── pcrecomp.c │ ├── pcreconf.py │ ├── petabi_rule_writer │ ├── __init__.py │ └── petabi_rule_writer.py │ ├── rand_rule_gen.py │ ├── regex_generator.py │ ├── rule_formats.py │ ├── rulereader.py │ ├── ruletrafficgenerator.py │ ├── sniffles.py │ ├── snifflesconfig.py │ ├── traffic_writer.py │ ├── ucp.h │ └── vendor_mac_list.py ├── tests ├── TestCases │ ├── Id23 │ ├── Id24 │ ├── Id25 │ ├── Id26 │ ├── Id27 │ ├── Id28 │ ├── Id29 │ ├── Id30 │ ├── Id31 │ ├── Id32 │ ├── Id33 │ ├── Id34 │ ├── Id47 │ ├── Rulegen │ │ ├── Id39 │ │ ├── Id40 │ │ ├── Id41 │ │ ├── Id42 │ │ ├── Id43 │ │ ├── Id44 │ │ ├── Id45 │ │ └── Id47 │ └── Testing.csv ├── data_files │ ├── mac_definition_file.txt │ ├── mac_definition_file1.txt │ ├── missing feature name.txt │ ├── missing feature type.txt │ ├── missing required ambiguitylist.txt │ ├── missing required protocol.txt │ ├── rule_testTTL.xml │ ├── rule_ttlexpiryS1.xml │ ├── rule_ttlexpiryS2.xml │ ├── rule_ttlexpiryS3.xml │ ├── rule_ttlexpiryS4.xml │ ├── rule_ttlexpiryS5.xml │ ├── rule_ttlexpiryS6.xml │ ├── rules.txt │ ├── rules │ │ ├── rule_with_raw_ip.rules │ │ ├── test_rules1.rules │ │ ├── test_rules2.rules │ │ └── test_rules3.rules │ ├── test.xml │ ├── test_all.xml │ ├── test_all_1.xml │ ├── test_features.txt │ ├── test_frag.xml │ ├── test_out_of_order_n_loss.xml │ ├── test_tcp_overlap.xml │ ├── test_udp.xml │ └── wrong ip version ├── pcaps │ └── testall.pcap ├── test_examples.py ├── test_feature.py ├── test_nfa_build.py ├── test_pcrecomp.py ├── test_petabi_rule_writer.py ├── test_rand_rule_gen.py ├── test_regex_generator.py ├── test_rule_reader.py ├── test_rule_traffic_generator.py ├── test_ruleformat.py └── test_xml_rule_reader.py └── tox.ini /.env: -------------------------------------------------------------------------------- 1 | PYTHONPATH=src 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/.gitignore -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [master] 2 | extension-pkg-whitelist=sniffles.pcrecomp 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/.travis.yml -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/LICENSE -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/MANIFEST.in -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/NOTICE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/README.md -------------------------------------------------------------------------------- /examples/example1.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/example1.xml -------------------------------------------------------------------------------- /examples/example2.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/example2.xml -------------------------------------------------------------------------------- /examples/hdr_features_complex.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/hdr_features_complex.txt -------------------------------------------------------------------------------- /examples/hdr_features_simple.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/hdr_features_simple.txt -------------------------------------------------------------------------------- /examples/mac_definition_file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/mac_definition_file.txt -------------------------------------------------------------------------------- /examples/re_features_complex.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/re_features_complex.txt -------------------------------------------------------------------------------- /examples/re_features_simple.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/re_features_simple.txt -------------------------------------------------------------------------------- /examples/sniffles_example_config.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/examples/sniffles_example_config.txt -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | sortedcontainers>=0.9.6 2 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/setup.cfg -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/setup.py -------------------------------------------------------------------------------- /src/sniffles/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/sniffles/feature.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/feature.py -------------------------------------------------------------------------------- /src/sniffles/nfa.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/nfa.py -------------------------------------------------------------------------------- /src/sniffles/pcre.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre.h -------------------------------------------------------------------------------- /src/sniffles/pcre_chartables.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_chartables.c -------------------------------------------------------------------------------- /src/sniffles/pcre_compile.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_compile.c -------------------------------------------------------------------------------- /src/sniffles/pcre_globals.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_globals.c -------------------------------------------------------------------------------- /src/sniffles/pcre_internal.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_internal.h -------------------------------------------------------------------------------- /src/sniffles/pcre_newline.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_newline.c -------------------------------------------------------------------------------- /src/sniffles/pcre_tables.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcre_tables.c -------------------------------------------------------------------------------- /src/sniffles/pcrecomp.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcrecomp.c -------------------------------------------------------------------------------- /src/sniffles/pcreconf.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/pcreconf.py -------------------------------------------------------------------------------- /src/sniffles/petabi_rule_writer/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/sniffles/petabi_rule_writer/petabi_rule_writer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/petabi_rule_writer/petabi_rule_writer.py -------------------------------------------------------------------------------- /src/sniffles/rand_rule_gen.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/rand_rule_gen.py -------------------------------------------------------------------------------- /src/sniffles/regex_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/regex_generator.py -------------------------------------------------------------------------------- /src/sniffles/rule_formats.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/rule_formats.py -------------------------------------------------------------------------------- /src/sniffles/rulereader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/rulereader.py -------------------------------------------------------------------------------- /src/sniffles/ruletrafficgenerator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/ruletrafficgenerator.py -------------------------------------------------------------------------------- /src/sniffles/sniffles.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/sniffles.py -------------------------------------------------------------------------------- /src/sniffles/snifflesconfig.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/snifflesconfig.py -------------------------------------------------------------------------------- /src/sniffles/traffic_writer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/traffic_writer.py -------------------------------------------------------------------------------- /src/sniffles/ucp.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/ucp.h -------------------------------------------------------------------------------- /src/sniffles/vendor_mac_list.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/src/sniffles/vendor_mac_list.py -------------------------------------------------------------------------------- /tests/TestCases/Id23: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id23 -------------------------------------------------------------------------------- /tests/TestCases/Id24: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id24 -------------------------------------------------------------------------------- /tests/TestCases/Id25: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id25 -------------------------------------------------------------------------------- /tests/TestCases/Id26: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id26 -------------------------------------------------------------------------------- /tests/TestCases/Id27: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id27 -------------------------------------------------------------------------------- /tests/TestCases/Id28: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id28 -------------------------------------------------------------------------------- /tests/TestCases/Id29: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id29 -------------------------------------------------------------------------------- /tests/TestCases/Id30: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id30 -------------------------------------------------------------------------------- /tests/TestCases/Id31: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id31 -------------------------------------------------------------------------------- /tests/TestCases/Id32: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id32 -------------------------------------------------------------------------------- /tests/TestCases/Id33: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id33 -------------------------------------------------------------------------------- /tests/TestCases/Id34: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id34 -------------------------------------------------------------------------------- /tests/TestCases/Id47: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Id47 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id39: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id39 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id40: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id40 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id41: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id41 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id42: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id42 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id43: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id43 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id44: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id44 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id45: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id45 -------------------------------------------------------------------------------- /tests/TestCases/Rulegen/Id47: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Rulegen/Id47 -------------------------------------------------------------------------------- /tests/TestCases/Testing.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/TestCases/Testing.csv -------------------------------------------------------------------------------- /tests/data_files/mac_definition_file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/mac_definition_file.txt -------------------------------------------------------------------------------- /tests/data_files/mac_definition_file1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/mac_definition_file1.txt -------------------------------------------------------------------------------- /tests/data_files/missing feature name.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/missing feature name.txt -------------------------------------------------------------------------------- /tests/data_files/missing feature type.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/missing feature type.txt -------------------------------------------------------------------------------- /tests/data_files/missing required ambiguitylist.txt: -------------------------------------------------------------------------------- 1 | type=feature; complexity_prob=5; -------------------------------------------------------------------------------- /tests/data_files/missing required protocol.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/missing required protocol.txt -------------------------------------------------------------------------------- /tests/data_files/rule_testTTL.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_testTTL.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS1.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS1.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS2.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS2.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS3.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS3.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS4.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS4.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS5.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS5.xml -------------------------------------------------------------------------------- /tests/data_files/rule_ttlexpiryS6.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rule_ttlexpiryS6.xml -------------------------------------------------------------------------------- /tests/data_files/rules.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rules.txt -------------------------------------------------------------------------------- /tests/data_files/rules/rule_with_raw_ip.rules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rules/rule_with_raw_ip.rules -------------------------------------------------------------------------------- /tests/data_files/rules/test_rules1.rules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rules/test_rules1.rules -------------------------------------------------------------------------------- /tests/data_files/rules/test_rules2.rules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rules/test_rules2.rules -------------------------------------------------------------------------------- /tests/data_files/rules/test_rules3.rules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/rules/test_rules3.rules -------------------------------------------------------------------------------- /tests/data_files/test.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test.xml -------------------------------------------------------------------------------- /tests/data_files/test_all.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_all.xml -------------------------------------------------------------------------------- /tests/data_files/test_all_1.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_all_1.xml -------------------------------------------------------------------------------- /tests/data_files/test_features.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_features.txt -------------------------------------------------------------------------------- /tests/data_files/test_frag.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_frag.xml -------------------------------------------------------------------------------- /tests/data_files/test_out_of_order_n_loss.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_out_of_order_n_loss.xml -------------------------------------------------------------------------------- /tests/data_files/test_tcp_overlap.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_tcp_overlap.xml -------------------------------------------------------------------------------- /tests/data_files/test_udp.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/data_files/test_udp.xml -------------------------------------------------------------------------------- /tests/data_files/wrong ip version: -------------------------------------------------------------------------------- 1 | type=ip; name=proto; version=5; -------------------------------------------------------------------------------- /tests/pcaps/testall.pcap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/pcaps/testall.pcap -------------------------------------------------------------------------------- /tests/test_examples.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_examples.py -------------------------------------------------------------------------------- /tests/test_feature.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_feature.py -------------------------------------------------------------------------------- /tests/test_nfa_build.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_nfa_build.py -------------------------------------------------------------------------------- /tests/test_pcrecomp.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_pcrecomp.py -------------------------------------------------------------------------------- /tests/test_petabi_rule_writer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_petabi_rule_writer.py -------------------------------------------------------------------------------- /tests/test_rand_rule_gen.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_rand_rule_gen.py -------------------------------------------------------------------------------- /tests/test_regex_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_regex_generator.py -------------------------------------------------------------------------------- /tests/test_rule_reader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_rule_reader.py -------------------------------------------------------------------------------- /tests/test_rule_traffic_generator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_rule_traffic_generator.py -------------------------------------------------------------------------------- /tests/test_ruleformat.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_ruleformat.py -------------------------------------------------------------------------------- /tests/test_xml_rule_reader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tests/test_xml_rule_reader.py -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/petabi/sniffles/HEAD/tox.ini --------------------------------------------------------------------------------