intelmq-extensions 1.10.0__tar.gz → 1.11.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/PKG-INFO +8 -7
- intelmq_extensions-1.11.0/intelmq_extensions/bots/experts/iban_extractor/expert.py +75 -0
- intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/generic_json/parser.py +86 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/iban_extractor/test_expert.py +74 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/generic_json/test_parser.py +171 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/malwaredomains/__init__.py +0 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/modat/__init__.py +0 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/cli/__init__.py +0 -0
- intelmq_extensions-1.11.0/intelmq_extensions/tests/lib/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/PKG-INFO +8 -7
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/SOURCES.txt +8 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/entry_points.txt +4 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/requires.txt +6 -5
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/pyproject.toml +1 -1
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/LICENSE +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/README.md +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/blackkite/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/blackkite/_client.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/blackkite/collector.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/disp/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/disp/_client.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/disp/collector.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/modat/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/modat/collector.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/xmpp/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/collectors/xmpp/collector.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/certat_contact_intern/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/certat_contact_intern/expert.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/copy_extra/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/copy_extra/expert.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/event_group_splitter/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/event_group_splitter/expert.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/event_splitter/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/event_splitter/expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/experts/replace_in_dict → intelmq_extensions-1.11.0/intelmq_extensions/bots/experts/iban_extractor}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/experts/squelcher → intelmq_extensions-1.11.0/intelmq_extensions/bots/experts/replace_in_dict}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/replace_in_dict/expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/experts/vulnerability_lookup → intelmq_extensions-1.11.0/intelmq_extensions/bots/experts/squelcher}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/squelcher/expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/outputs → intelmq_extensions-1.11.0/intelmq_extensions/bots/experts/vulnerability_lookup}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/vulnerability_lookup/expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/outputs/mattermost → intelmq_extensions-1.11.0/intelmq_extensions/bots/outputs}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/outputs/to_logs → intelmq_extensions-1.11.0/intelmq_extensions/bots/outputs/mattermost}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/outputs/mattermost/output.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/outputs/xmpp → intelmq_extensions-1.11.0/intelmq_extensions/bots/outputs/to_logs}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/outputs/to_logs/output.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/parsers → intelmq_extensions-1.11.0/intelmq_extensions/bots/outputs/xmpp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/outputs/xmpp/output.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/parsers/blackkite → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/parsers/disp → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/blackkite}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/parsers/blackkite/_transformers.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/parsers/blackkite/parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/parsers/malwaredomains → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/disp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/parsers/disp/parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/bots/parsers/modat → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/generic_json}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/cli → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/malwaredomains}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/parsers/malwaredomains/parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/lib → intelmq_extensions-1.11.0/intelmq_extensions/bots/parsers/modat}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/parsers/modat/parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests → intelmq_extensions-1.11.0/intelmq_extensions/cli}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/create_reports.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/intelmqcli.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/lib.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/utils.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/etc/harmonization.conf +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/etc/squelcher.conf +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots → intelmq_extensions-1.11.0/intelmq_extensions/lib}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/lib/api_helpers.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/lib/blackkite.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/collectors → intelmq_extensions-1.11.0/intelmq_extensions/tests}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/base.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/collectors/blackkite → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/collectors/disp → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/collectors}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/collectors/modat → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/collectors/blackkite}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/blackkite/base.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/blackkite/test_client.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/blackkite/test_collector.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/collectors/xmpp → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/collectors/disp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/disp/base.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/disp/test_client.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/disp/test_collector.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/collectors/modat}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/modat/test_collector.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/certat_contact_intern → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/collectors/xmpp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/collectors/xmpp/test_collector.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/copy_extra → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/event_group_splitter → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/certat_contact_intern}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/certat_contact_intern/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/event_splitter → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/copy_extra}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/copy_extra/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/replace_in_dict → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/event_group_splitter}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/event_group_splitter/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/squelcher → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/event_splitter}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/event_splitter/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/experts/vulnerability_lookup → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/iban_extractor}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/outputs → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/replace_in_dict}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/replace_in_dict/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/outputs/mattermost → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/squelcher}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/squelcher/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/outputs/xmpp → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/experts/vulnerability_lookup}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/experts/vulnerability_lookup/test_expert.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/parsers → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/outputs}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/parsers/blackkite → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/outputs/mattermost}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/outputs/mattermost/test_output.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/parsers/disp → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/outputs/xmpp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/outputs/xmpp/test_output.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/parsers/malwaredomains → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers}/__init__.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/bots/parsers/modat → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/blackkite}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/blackkite/data.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/blackkite/test_parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/cli → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/disp}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/disp/test_parser.py +0 -0
- {intelmq_extensions-1.10.0/intelmq_extensions/tests/lib → intelmq_extensions-1.11.0/intelmq_extensions/tests/bots/parsers/generic_json}/__init__.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/malwaredomains/test_parser.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/modat/data.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/bots/parsers/modat/test_parser.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/cli/test_create_reports.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/cli/test_intelmqcli.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/lib/base.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/lib/test_api_helpers.py +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/dependency_links.txt +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/top_level.txt +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/setup.cfg +0 -0
- {intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intelmq_extensions
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: Additional bots for IntelMQ
|
|
5
5
|
Author: CERT.at Data & Development Team
|
|
6
6
|
License: AGPLv3
|
|
@@ -9,17 +9,18 @@ Classifier: Programming Language :: Python :: 3
|
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist: psycopg2-binary
|
|
12
|
+
Requires-Dist: tabulate>=0.7.5
|
|
13
|
+
Requires-Dist: netaddr>=0.7.14
|
|
15
14
|
Requires-Dist: rt<3.0.0,>=1.0.9
|
|
16
15
|
Requires-Dist: psycopg2-binary>=2.5.5
|
|
16
|
+
Requires-Dist: slixmpp
|
|
17
|
+
Requires-Dist: schwifty
|
|
17
18
|
Requires-Dist: mergedeep
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: python-termstyle>=0.1.10
|
|
20
|
-
Requires-Dist: tabulate>=0.7.5
|
|
19
|
+
Requires-Dist: psycopg2-binary
|
|
21
20
|
Requires-Dist: netaddr>=0.7.14
|
|
22
21
|
Requires-Dist: intelmq
|
|
22
|
+
Requires-Dist: importlib_metadata; python_version < "3.8"
|
|
23
|
+
Requires-Dist: python-termstyle>=0.1.10
|
|
23
24
|
Provides-Extra: dev
|
|
24
25
|
Requires-Dist: pytest; extra == "dev"
|
|
25
26
|
Requires-Dist: tox>=4; extra == "dev"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""
|
|
2
|
+
IBAN Extractor looks for IBAN in the given field and extracts
|
|
3
|
+
information as extra fields, including a hash of the iban
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import hashlib
|
|
7
|
+
import re
|
|
8
|
+
|
|
9
|
+
import schwifty
|
|
10
|
+
from intelmq.lib.bot import ExpertBot
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class IBANExtractorExpertBot(ExpertBot):
|
|
14
|
+
lookup_field: str = "extra.text"
|
|
15
|
+
default_country: str = "AT"
|
|
16
|
+
# first group has to match potential IBAN
|
|
17
|
+
base_regex: str = r"\b(([A-Z]{2}|)( |)[0-9]{2}[0-9 ]{1,30})\b"
|
|
18
|
+
|
|
19
|
+
def init(self):
|
|
20
|
+
self._possible_iban = re.compile(self.base_regex)
|
|
21
|
+
|
|
22
|
+
def process(self):
|
|
23
|
+
event = self.receive_message()
|
|
24
|
+
|
|
25
|
+
lookup_data = event.get(self.lookup_field)
|
|
26
|
+
if not lookup_data:
|
|
27
|
+
self.logger.info("Lookup data not found in the event.")
|
|
28
|
+
self.send_message(event, path="no_lookup_data", path_permissive=True)
|
|
29
|
+
self.send_message(event, path="not_found", path_permissive=True)
|
|
30
|
+
self.acknowledge_message()
|
|
31
|
+
return
|
|
32
|
+
|
|
33
|
+
iban = None
|
|
34
|
+
for match in self._possible_iban.finditer(lookup_data):
|
|
35
|
+
iban_str = match.group(1).strip()
|
|
36
|
+
if iban_str[0] in "0123456789":
|
|
37
|
+
iban_str = self.default_country + iban_str
|
|
38
|
+
try:
|
|
39
|
+
iban = schwifty.IBAN(iban_str)
|
|
40
|
+
break
|
|
41
|
+
except Exception:
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
if not iban:
|
|
45
|
+
self.send_message(event, path="not_found", path_permissive=True)
|
|
46
|
+
self.acknowledge_message()
|
|
47
|
+
return
|
|
48
|
+
|
|
49
|
+
event.add("extra.iban", str(iban), overwrite=False)
|
|
50
|
+
event.add(
|
|
51
|
+
"source.geolocation.cc",
|
|
52
|
+
iban.country_code,
|
|
53
|
+
overwrite=False,
|
|
54
|
+
raise_failure=False,
|
|
55
|
+
)
|
|
56
|
+
event.add(
|
|
57
|
+
"extra.bic",
|
|
58
|
+
str(iban.bic) if iban.bic else None,
|
|
59
|
+
overwrite=False,
|
|
60
|
+
raise_failure=False,
|
|
61
|
+
)
|
|
62
|
+
event.add(
|
|
63
|
+
"extra.bank",
|
|
64
|
+
str(iban.bank_short_name) if iban.bank_short_name else None,
|
|
65
|
+
overwrite=False,
|
|
66
|
+
raise_failure=False,
|
|
67
|
+
)
|
|
68
|
+
iban_hash = hashlib.sha256(str(iban).encode()).hexdigest()
|
|
69
|
+
event.add("extra.iban_hash", iban_hash, overwrite=False)
|
|
70
|
+
|
|
71
|
+
self.send_message(event)
|
|
72
|
+
self.acknowledge_message()
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
BOT = IBANExtractorExpertBot
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2016 by Bundesamt für Sicherheit in der Informationstechnik,
|
|
2
|
+
# 2016-2021 nic.at GmbH, 2024 Tim de Boer, 2025 Institute for Common Good Technology
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
+
# TODO: merge with the upstream bot
|
|
6
|
+
# TODO: support nested dicts
|
|
7
|
+
"""
|
|
8
|
+
JSON Parser Bot
|
|
9
|
+
Retrieves a base64 encoded JSON-String from raw and converts it into an
|
|
10
|
+
event, adding unknown fields as extra
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from json import dumps as json_dumps
|
|
14
|
+
from json import loads as json_loads
|
|
15
|
+
|
|
16
|
+
from intelmq.lib.bot import ParserBot
|
|
17
|
+
from intelmq.lib.message import MessageFactory
|
|
18
|
+
from intelmq.lib.utils import base64_decode
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class JSONGenericParserBot(ParserBot):
|
|
22
|
+
"""Parse IntelMQ-JSON data"""
|
|
23
|
+
|
|
24
|
+
splitlines: bool = False
|
|
25
|
+
multiple_events: bool = False
|
|
26
|
+
|
|
27
|
+
def init(self):
|
|
28
|
+
if self.multiple_events and self.splitlines:
|
|
29
|
+
raise ValueError(
|
|
30
|
+
(
|
|
31
|
+
"Modes 'splitlines' and 'multiple_events' "
|
|
32
|
+
"are not possible at the same time. Please use either one."
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
def process(self):
|
|
37
|
+
report = self.receive_message()
|
|
38
|
+
if self.multiple_events:
|
|
39
|
+
lines = json_loads(base64_decode(report["raw"]))
|
|
40
|
+
elif self.splitlines:
|
|
41
|
+
lines = base64_decode(report["raw"]).splitlines()
|
|
42
|
+
else:
|
|
43
|
+
lines = [base64_decode(report["raw"])]
|
|
44
|
+
|
|
45
|
+
for line in lines:
|
|
46
|
+
event = self.new_event(report)
|
|
47
|
+
if self.multiple_events:
|
|
48
|
+
event.update(
|
|
49
|
+
MessageFactory.from_dict(
|
|
50
|
+
line, harmonization=self.harmonization, default_type="Event"
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
event["raw"] = json_dumps(line, sort_keys=True)
|
|
54
|
+
else:
|
|
55
|
+
if not isinstance(line, dict):
|
|
56
|
+
line_dict = json_loads(line)
|
|
57
|
+
else:
|
|
58
|
+
line_dict = line
|
|
59
|
+
|
|
60
|
+
type_harmonization = self.harmonization.get(
|
|
61
|
+
line_dict.get("__type", "Event").lower()
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
for k in list(line_dict.keys()):
|
|
65
|
+
if k == "__type":
|
|
66
|
+
continue
|
|
67
|
+
if k not in type_harmonization and not k.startswith("extra."):
|
|
68
|
+
line_dict[f"extra.{k}"] = line_dict[k]
|
|
69
|
+
del line_dict[k]
|
|
70
|
+
|
|
71
|
+
event.update(
|
|
72
|
+
MessageFactory.from_dict(
|
|
73
|
+
line_dict,
|
|
74
|
+
harmonization=self.harmonization,
|
|
75
|
+
default_type="Event",
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
event.add("raw", line, overwrite=False)
|
|
79
|
+
event.add(
|
|
80
|
+
"classification.type", "undetermined", overwrite=False
|
|
81
|
+
) # set to undetermined if input has no classification
|
|
82
|
+
self.send_message(event)
|
|
83
|
+
self.acknowledge_message()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
BOT = JSONGenericParserBot
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Testing IBANExtractorExpertBot.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import copy
|
|
7
|
+
import unittest
|
|
8
|
+
|
|
9
|
+
from intelmq_extensions.bots.experts.iban_extractor.expert import IBANExtractorExpertBot
|
|
10
|
+
|
|
11
|
+
from ....base import BotTestCase
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestIBANExtractorExpertBot(BotTestCase, unittest.TestCase):
|
|
15
|
+
@classmethod
|
|
16
|
+
def set_bot(cls):
|
|
17
|
+
cls.bot_reference = IBANExtractorExpertBot
|
|
18
|
+
cls.default_input_message = {"__type": "Event"}
|
|
19
|
+
|
|
20
|
+
def test_event_no_lookup(self):
|
|
21
|
+
message = {
|
|
22
|
+
"__type": "Event",
|
|
23
|
+
"time.observation": "2015-01-01T00:00:00+00:00",
|
|
24
|
+
"extra.payload": "foo",
|
|
25
|
+
"extra.name": "bar",
|
|
26
|
+
"extra.firmwarerev": 1,
|
|
27
|
+
}
|
|
28
|
+
self.input_message = copy.deepcopy(message)
|
|
29
|
+
self.prepare_bot(destination_queues=["no_lookup_data", "not_found"])
|
|
30
|
+
self.run_bot(prepare=False)
|
|
31
|
+
self.assertMessageEqual(0, message, path="no_lookup_data")
|
|
32
|
+
self.assertMessageEqual(0, message, path="not_found")
|
|
33
|
+
|
|
34
|
+
def test_event_no_iban(self):
|
|
35
|
+
message = {
|
|
36
|
+
"__type": "Event",
|
|
37
|
+
"time.observation": "2015-01-01T00:00:00+00:00",
|
|
38
|
+
"extra.payload": "foo",
|
|
39
|
+
"extra.name": "bar",
|
|
40
|
+
"extra.firmwarerev": 1,
|
|
41
|
+
"extra.text": "adfssdtfghjlkl",
|
|
42
|
+
}
|
|
43
|
+
self.input_message = copy.deepcopy(message)
|
|
44
|
+
self.prepare_bot(destination_queues=["not_found"])
|
|
45
|
+
self.run_bot(prepare=False)
|
|
46
|
+
self.assertMessageEqual(0, message, path="not_found")
|
|
47
|
+
|
|
48
|
+
def test_iban(self):
|
|
49
|
+
message = {
|
|
50
|
+
"__type": "Event",
|
|
51
|
+
"time.observation": "2015-01-01T00:00:00+00:00",
|
|
52
|
+
"extra.payload": "foo",
|
|
53
|
+
"extra.name": "bar",
|
|
54
|
+
"extra.firmwarerev": 1,
|
|
55
|
+
"extra.text": (
|
|
56
|
+
"This is a message with an \n"
|
|
57
|
+
"artificially generated IBAN number AT 0820111 1532 9734423 \n "
|
|
58
|
+
"but it still should be valid"
|
|
59
|
+
),
|
|
60
|
+
}
|
|
61
|
+
self.input_message = copy.deepcopy(message)
|
|
62
|
+
self.run_bot()
|
|
63
|
+
message["extra.iban"] = "AT082011115329734423"
|
|
64
|
+
message["extra.bank"] = "Erste Bank der oesterreichischen Sparkassen AG"
|
|
65
|
+
message["extra.bic"] = "GIBAATWWXXX"
|
|
66
|
+
message["extra.iban_hash"] = (
|
|
67
|
+
"942b348fcca86b81f7465308e2b1b3cb6aaad1c218f9110699ab47cb34b6b1b8"
|
|
68
|
+
)
|
|
69
|
+
message["source.geolocation.cc"] = "AT"
|
|
70
|
+
self.assertMessageEqual(0, message)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
unittest.main()
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2016 Sebastian Wagner
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
4
|
+
|
|
5
|
+
# -*- coding: utf-8 -*-
|
|
6
|
+
import base64
|
|
7
|
+
import os
|
|
8
|
+
import unittest
|
|
9
|
+
from json import dumps as json_dumps
|
|
10
|
+
from json import loads as json_loads
|
|
11
|
+
|
|
12
|
+
import intelmq.lib.test as test
|
|
13
|
+
|
|
14
|
+
from intelmq_extensions.bots.parsers.generic_json.parser import JSONGenericParserBot
|
|
15
|
+
|
|
16
|
+
ONELINE_REPORT = {
|
|
17
|
+
"feed.name": "Test",
|
|
18
|
+
"raw": (
|
|
19
|
+
"eyJmZWVkLm5hbWUiOiAiVGVzdCBmZWVkIiwgInJhdyI6ICJabTl2WW"
|
|
20
|
+
"1GeUNnPT0iLCAiX190eXBlIjogIkV2ZW50IiwgInRpbWUub2JzZXJ2YXRpb24iOiAiMjAxNS0wMS"
|
|
21
|
+
"0wMVQwMDowMDowMCswMDowMCIsICJjbGFzc2lmaWNhdGlvbi50eXBlIjogInVua25vd24ifQ=="
|
|
22
|
+
),
|
|
23
|
+
"__type": "Report",
|
|
24
|
+
"time.observation": "2016-10-10T00:00:00+00:00",
|
|
25
|
+
}
|
|
26
|
+
EXAMPLE_EVENT = {
|
|
27
|
+
"feed.name": "Test feed",
|
|
28
|
+
"raw": "Zm9vYmFyCg==",
|
|
29
|
+
"__type": "Event",
|
|
30
|
+
"time.observation": "2015-01-01T00:00:00+00:00",
|
|
31
|
+
"classification.type": "undetermined",
|
|
32
|
+
}
|
|
33
|
+
with open(os.path.join(os.path.dirname(__file__), "data.json"), "rb") as fh:
|
|
34
|
+
RAW = base64.b64encode(fh.read()).decode()
|
|
35
|
+
|
|
36
|
+
MULTILINE_REPORT = {
|
|
37
|
+
"feed.name": "Test feed",
|
|
38
|
+
"raw": RAW,
|
|
39
|
+
"__type": "Report",
|
|
40
|
+
}
|
|
41
|
+
MULTILINE_EVENTS = [
|
|
42
|
+
{
|
|
43
|
+
"feed.name": "Test feed",
|
|
44
|
+
"raw": base64.b64encode(
|
|
45
|
+
b'{"__type": "Event", "source.ip": "127.0.0.1", "classification.type": "c2-server"}'
|
|
46
|
+
).decode(),
|
|
47
|
+
"__type": "Event",
|
|
48
|
+
"classification.type": "c2-server",
|
|
49
|
+
"source.ip": "127.0.0.1",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"feed.name": "Test feed",
|
|
53
|
+
"raw": base64.b64encode(
|
|
54
|
+
b'{"__type": "Event", "source.ip": "127.0.0.2", "classification.type": "c2-server"}'
|
|
55
|
+
).decode(),
|
|
56
|
+
"__type": "Event",
|
|
57
|
+
"classification.type": "c2-server",
|
|
58
|
+
"source.ip": "127.0.0.2",
|
|
59
|
+
},
|
|
60
|
+
]
|
|
61
|
+
with open(os.path.join(os.path.dirname(__file__), "data2.json"), "rb") as fh:
|
|
62
|
+
RAW2 = base64.b64encode(fh.read()).decode()
|
|
63
|
+
|
|
64
|
+
NO_DEFAULT_REPORT = {
|
|
65
|
+
"feed.name": "Test feed",
|
|
66
|
+
"raw": RAW2,
|
|
67
|
+
"__type": "Report",
|
|
68
|
+
}
|
|
69
|
+
NO_DEFAULT_EVENT = MULTILINE_EVENTS[1].copy()
|
|
70
|
+
NO_DEFAULT_EVENT["raw"] = base64.b64encode(
|
|
71
|
+
b'{"source.ip": "127.0.0.2", "classification.type": "c2-server"}\n'
|
|
72
|
+
).decode()
|
|
73
|
+
|
|
74
|
+
with open(os.path.join(os.path.dirname(__file__), "ncscnl.json"), "rb") as fh:
|
|
75
|
+
NCSCNL_FILE = fh.read()
|
|
76
|
+
NCSCNL_RAW = base64.b64encode(NCSCNL_FILE).decode()
|
|
77
|
+
NCSC_EVENTS = json_loads(NCSCNL_FILE)
|
|
78
|
+
for i, event in enumerate(NCSC_EVENTS):
|
|
79
|
+
NCSC_EVENTS[i]["raw"] = base64.b64encode(
|
|
80
|
+
json_dumps(event, sort_keys=True).encode()
|
|
81
|
+
).decode()
|
|
82
|
+
NCSC_EVENTS[i]["classification.type"] = "undetermined"
|
|
83
|
+
NCSC_EVENTS[i]["feed.name"] = "NCSC.NL"
|
|
84
|
+
NCSC_EVENTS[i]["__type"] = "Event"
|
|
85
|
+
|
|
86
|
+
NCSCNL_REPORT = {
|
|
87
|
+
"feed.name": "NCSC.NL",
|
|
88
|
+
"raw": NCSCNL_RAW,
|
|
89
|
+
"__type": "Report",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
with open(os.path.join(os.path.dirname(__file__), "generic_data.json"), "rb") as fh:
|
|
93
|
+
GENERIC_RAW = base64.b64encode(fh.read()).decode()
|
|
94
|
+
|
|
95
|
+
MULTILINE_GENERIC_REPORT = {
|
|
96
|
+
"feed.name": "Test feed",
|
|
97
|
+
"raw": GENERIC_RAW,
|
|
98
|
+
"__type": "Report",
|
|
99
|
+
}
|
|
100
|
+
MULTILINE_GENERIC_EVENTS = [
|
|
101
|
+
{
|
|
102
|
+
"feed.name": "Test feed",
|
|
103
|
+
"raw": base64.b64encode(
|
|
104
|
+
b'{"__type": "Event", "source.ip": "127.0.0.1", "notexists": "generic data"}'
|
|
105
|
+
).decode(),
|
|
106
|
+
"__type": "Event",
|
|
107
|
+
"extra.notexists": "generic data",
|
|
108
|
+
"source.ip": "127.0.0.1",
|
|
109
|
+
"classification.type": "undetermined",
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"feed.name": "Test feed",
|
|
113
|
+
"raw": base64.b64encode(
|
|
114
|
+
b'{"__type": "Event", "source.ip": "127.0.0.2", "somethingelse": '
|
|
115
|
+
b'"hahaha", "extra.ok": "ok"}'
|
|
116
|
+
).decode(),
|
|
117
|
+
"__type": "Event",
|
|
118
|
+
"extra.somethingelse": "hahaha",
|
|
119
|
+
"extra.ok": "ok",
|
|
120
|
+
"source.ip": "127.0.0.2",
|
|
121
|
+
"classification.type": "undetermined",
|
|
122
|
+
},
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class TestJSONParserBot(test.BotTestCase, unittest.TestCase):
|
|
127
|
+
"""
|
|
128
|
+
A TestCase for a MalwareDomainListParserBot.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
@classmethod
|
|
132
|
+
def set_bot(cls):
|
|
133
|
+
cls.bot_reference = JSONGenericParserBot
|
|
134
|
+
cls.default_input_message = ONELINE_REPORT
|
|
135
|
+
|
|
136
|
+
def test_oneline_report(self):
|
|
137
|
+
"""Test if correct Event has been produced."""
|
|
138
|
+
self.run_bot()
|
|
139
|
+
self.assertMessageEqual(0, EXAMPLE_EVENT)
|
|
140
|
+
|
|
141
|
+
def test_multiline_report(self):
|
|
142
|
+
"""Test if correct Event has been produced."""
|
|
143
|
+
self.input_message = MULTILINE_REPORT
|
|
144
|
+
self.run_bot(parameters={"splitlines": True})
|
|
145
|
+
self.assertMessageEqual(0, MULTILINE_EVENTS[0])
|
|
146
|
+
self.assertMessageEqual(1, MULTILINE_EVENTS[1])
|
|
147
|
+
|
|
148
|
+
def test_default_event(self):
|
|
149
|
+
"""Test if correct Event has been produced."""
|
|
150
|
+
self.input_message = NO_DEFAULT_REPORT
|
|
151
|
+
self.run_bot()
|
|
152
|
+
self.assertMessageEqual(0, NO_DEFAULT_EVENT)
|
|
153
|
+
|
|
154
|
+
def test_ncscnl(self):
|
|
155
|
+
"""A file containing a list of events (not per line)"""
|
|
156
|
+
self.input_message = NCSCNL_REPORT
|
|
157
|
+
self.run_bot(parameters={"multiple_events": True})
|
|
158
|
+
self.assertMessageEqual(0, NCSC_EVENTS[0])
|
|
159
|
+
self.assertMessageEqual(1, NCSC_EVENTS[1])
|
|
160
|
+
self.assertMessageEqual(2, NCSC_EVENTS[2])
|
|
161
|
+
|
|
162
|
+
def test_multiline_generic_report(self):
|
|
163
|
+
"""Test if correct Event has been produced."""
|
|
164
|
+
self.input_message = MULTILINE_GENERIC_REPORT
|
|
165
|
+
self.run_bot(parameters={"splitlines": True})
|
|
166
|
+
self.assertMessageEqual(0, MULTILINE_GENERIC_EVENTS[0])
|
|
167
|
+
self.assertMessageEqual(1, MULTILINE_GENERIC_EVENTS[1])
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
if __name__ == "__main__": # pragma: no cover
|
|
171
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intelmq_extensions
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: Additional bots for IntelMQ
|
|
5
5
|
Author: CERT.at Data & Development Team
|
|
6
6
|
License: AGPLv3
|
|
@@ -9,17 +9,18 @@ Classifier: Programming Language :: Python :: 3
|
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
|
-
Requires-Dist:
|
|
13
|
-
Requires-Dist:
|
|
14
|
-
Requires-Dist: psycopg2-binary
|
|
12
|
+
Requires-Dist: tabulate>=0.7.5
|
|
13
|
+
Requires-Dist: netaddr>=0.7.14
|
|
15
14
|
Requires-Dist: rt<3.0.0,>=1.0.9
|
|
16
15
|
Requires-Dist: psycopg2-binary>=2.5.5
|
|
16
|
+
Requires-Dist: slixmpp
|
|
17
|
+
Requires-Dist: schwifty
|
|
17
18
|
Requires-Dist: mergedeep
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist: python-termstyle>=0.1.10
|
|
20
|
-
Requires-Dist: tabulate>=0.7.5
|
|
19
|
+
Requires-Dist: psycopg2-binary
|
|
21
20
|
Requires-Dist: netaddr>=0.7.14
|
|
22
21
|
Requires-Dist: intelmq
|
|
22
|
+
Requires-Dist: importlib_metadata; python_version < "3.8"
|
|
23
|
+
Requires-Dist: python-termstyle>=0.1.10
|
|
23
24
|
Provides-Extra: dev
|
|
24
25
|
Requires-Dist: pytest; extra == "dev"
|
|
25
26
|
Requires-Dist: tox>=4; extra == "dev"
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/SOURCES.txt
RENAMED
|
@@ -29,6 +29,8 @@ intelmq_extensions/bots/experts/event_group_splitter/__init__.py
|
|
|
29
29
|
intelmq_extensions/bots/experts/event_group_splitter/expert.py
|
|
30
30
|
intelmq_extensions/bots/experts/event_splitter/__init__.py
|
|
31
31
|
intelmq_extensions/bots/experts/event_splitter/expert.py
|
|
32
|
+
intelmq_extensions/bots/experts/iban_extractor/__init__.py
|
|
33
|
+
intelmq_extensions/bots/experts/iban_extractor/expert.py
|
|
32
34
|
intelmq_extensions/bots/experts/replace_in_dict/__init__.py
|
|
33
35
|
intelmq_extensions/bots/experts/replace_in_dict/expert.py
|
|
34
36
|
intelmq_extensions/bots/experts/squelcher/__init__.py
|
|
@@ -48,6 +50,8 @@ intelmq_extensions/bots/parsers/blackkite/_transformers.py
|
|
|
48
50
|
intelmq_extensions/bots/parsers/blackkite/parser.py
|
|
49
51
|
intelmq_extensions/bots/parsers/disp/__init__.py
|
|
50
52
|
intelmq_extensions/bots/parsers/disp/parser.py
|
|
53
|
+
intelmq_extensions/bots/parsers/generic_json/__init__.py
|
|
54
|
+
intelmq_extensions/bots/parsers/generic_json/parser.py
|
|
51
55
|
intelmq_extensions/bots/parsers/malwaredomains/__init__.py
|
|
52
56
|
intelmq_extensions/bots/parsers/malwaredomains/parser.py
|
|
53
57
|
intelmq_extensions/bots/parsers/modat/__init__.py
|
|
@@ -87,6 +91,8 @@ intelmq_extensions/tests/bots/experts/event_group_splitter/__init__.py
|
|
|
87
91
|
intelmq_extensions/tests/bots/experts/event_group_splitter/test_expert.py
|
|
88
92
|
intelmq_extensions/tests/bots/experts/event_splitter/__init__.py
|
|
89
93
|
intelmq_extensions/tests/bots/experts/event_splitter/test_expert.py
|
|
94
|
+
intelmq_extensions/tests/bots/experts/iban_extractor/__init__.py
|
|
95
|
+
intelmq_extensions/tests/bots/experts/iban_extractor/test_expert.py
|
|
90
96
|
intelmq_extensions/tests/bots/experts/replace_in_dict/__init__.py
|
|
91
97
|
intelmq_extensions/tests/bots/experts/replace_in_dict/test_expert.py
|
|
92
98
|
intelmq_extensions/tests/bots/experts/squelcher/__init__.py
|
|
@@ -104,6 +110,8 @@ intelmq_extensions/tests/bots/parsers/blackkite/data.py
|
|
|
104
110
|
intelmq_extensions/tests/bots/parsers/blackkite/test_parser.py
|
|
105
111
|
intelmq_extensions/tests/bots/parsers/disp/__init__.py
|
|
106
112
|
intelmq_extensions/tests/bots/parsers/disp/test_parser.py
|
|
113
|
+
intelmq_extensions/tests/bots/parsers/generic_json/__init__.py
|
|
114
|
+
intelmq_extensions/tests/bots/parsers/generic_json/test_parser.py
|
|
107
115
|
intelmq_extensions/tests/bots/parsers/malwaredomains/__init__.py
|
|
108
116
|
intelmq_extensions/tests/bots/parsers/malwaredomains/test_parser.py
|
|
109
117
|
intelmq_extensions/tests/bots/parsers/modat/__init__.py
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/entry_points.txt
RENAMED
|
@@ -7,6 +7,7 @@ intelmq.bots.experts.certat.certat_contact_intern.expert = intelmq_extensions.bo
|
|
|
7
7
|
intelmq.bots.experts.certat.copy_extra.expert = intelmq_extensions.bots.experts.copy_extra.expert:BOT.run
|
|
8
8
|
intelmq.bots.experts.certat.event_group_splitter.expert = intelmq_extensions.bots.experts.event_group_splitter.expert:BOT.run
|
|
9
9
|
intelmq.bots.experts.certat.event_splitter.expert = intelmq_extensions.bots.experts.event_splitter.expert:BOT.run
|
|
10
|
+
intelmq.bots.experts.certat.iban_extractor.expert = intelmq_extensions.bots.experts.iban_extractor.expert:BOT.run
|
|
10
11
|
intelmq.bots.experts.certat.replace_in_dict.expert = intelmq_extensions.bots.experts.replace_in_dict.expert:BOT.run
|
|
11
12
|
intelmq.bots.experts.certat.squelcher.expert = intelmq_extensions.bots.experts.squelcher.expert:BOT.run
|
|
12
13
|
intelmq.bots.experts.certat.vulnerability_lookup.expert = intelmq_extensions.bots.experts.vulnerability_lookup.expert:BOT.run
|
|
@@ -15,6 +16,7 @@ intelmq.bots.outputs.certat.to_logs.output = intelmq_extensions.bots.outputs.to_
|
|
|
15
16
|
intelmq.bots.outputs.certat.xmpp.output = intelmq_extensions.bots.outputs.xmpp.output:BOT.run
|
|
16
17
|
intelmq.bots.parsers.certat.blackkite.parser = intelmq_extensions.bots.parsers.blackkite.parser:BOT.run
|
|
17
18
|
intelmq.bots.parsers.certat.disp.parser = intelmq_extensions.bots.parsers.disp.parser:BOT.run
|
|
19
|
+
intelmq.bots.parsers.certat.generic_json.parser = intelmq_extensions.bots.parsers.generic_json.parser:BOT.run
|
|
18
20
|
intelmq.bots.parsers.certat.malwaredomains.parser = intelmq_extensions.bots.parsers.malwaredomains.parser:BOT.run
|
|
19
21
|
intelmq.bots.parsers.certat.modat.parser = intelmq_extensions.bots.parsers.modat.parser:BOT.run
|
|
20
22
|
intelmq_extensions.bots.collectors.blackkite.collector = intelmq_extensions.bots.collectors.blackkite.collector:BOT.run
|
|
@@ -25,6 +27,7 @@ intelmq_extensions.bots.experts.certat_contact_intern.expert = intelmq_extension
|
|
|
25
27
|
intelmq_extensions.bots.experts.copy_extra.expert = intelmq_extensions.bots.experts.copy_extra.expert:BOT.run
|
|
26
28
|
intelmq_extensions.bots.experts.event_group_splitter.expert = intelmq_extensions.bots.experts.event_group_splitter.expert:BOT.run
|
|
27
29
|
intelmq_extensions.bots.experts.event_splitter.expert = intelmq_extensions.bots.experts.event_splitter.expert:BOT.run
|
|
30
|
+
intelmq_extensions.bots.experts.iban_extractor.expert = intelmq_extensions.bots.experts.iban_extractor.expert:BOT.run
|
|
28
31
|
intelmq_extensions.bots.experts.replace_in_dict.expert = intelmq_extensions.bots.experts.replace_in_dict.expert:BOT.run
|
|
29
32
|
intelmq_extensions.bots.experts.squelcher.expert = intelmq_extensions.bots.experts.squelcher.expert:BOT.run
|
|
30
33
|
intelmq_extensions.bots.experts.vulnerability_lookup.expert = intelmq_extensions.bots.experts.vulnerability_lookup.expert:BOT.run
|
|
@@ -33,6 +36,7 @@ intelmq_extensions.bots.outputs.to_logs.output = intelmq_extensions.bots.outputs
|
|
|
33
36
|
intelmq_extensions.bots.outputs.xmpp.output = intelmq_extensions.bots.outputs.xmpp.output:BOT.run
|
|
34
37
|
intelmq_extensions.bots.parsers.blackkite.parser = intelmq_extensions.bots.parsers.blackkite.parser:BOT.run
|
|
35
38
|
intelmq_extensions.bots.parsers.disp.parser = intelmq_extensions.bots.parsers.disp.parser:BOT.run
|
|
39
|
+
intelmq_extensions.bots.parsers.generic_json.parser = intelmq_extensions.bots.parsers.generic_json.parser:BOT.run
|
|
36
40
|
intelmq_extensions.bots.parsers.malwaredomains.parser = intelmq_extensions.bots.parsers.malwaredomains.parser:BOT.run
|
|
37
41
|
intelmq_extensions.bots.parsers.modat.parser = intelmq_extensions.bots.parsers.modat.parser:BOT.run
|
|
38
42
|
intelmqcli = intelmq_extensions.cli.intelmqcli:main
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/requires.txt
RENAMED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
tabulate>=0.7.5
|
|
2
|
+
netaddr>=0.7.14
|
|
3
3
|
rt<3.0.0,>=1.0.9
|
|
4
4
|
psycopg2-binary>=2.5.5
|
|
5
|
+
slixmpp
|
|
6
|
+
schwifty
|
|
5
7
|
mergedeep
|
|
6
|
-
|
|
7
|
-
python-termstyle>=0.1.10
|
|
8
|
-
tabulate>=0.7.5
|
|
8
|
+
psycopg2-binary
|
|
9
9
|
netaddr>=0.7.14
|
|
10
10
|
intelmq
|
|
11
|
+
python-termstyle>=0.1.10
|
|
11
12
|
|
|
12
13
|
[:python_version < "3.8"]
|
|
13
14
|
importlib_metadata
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/bots/experts/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/create_reports.py
RENAMED
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/cli/intelmqcli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/etc/harmonization.conf
RENAMED
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/etc/squelcher.conf
RENAMED
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/lib/api_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions/tests/lib/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intelmq_extensions-1.10.0 → intelmq_extensions-1.11.0}/intelmq_extensions.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|