changedetection.io-osint-processor 0.0.1__py3-none-any.whl

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.
Files changed (29) hide show
  1. changedetection_io_osint_processor-0.0.1.dist-info/METADATA +274 -0
  2. changedetection_io_osint_processor-0.0.1.dist-info/RECORD +29 -0
  3. changedetection_io_osint_processor-0.0.1.dist-info/WHEEL +5 -0
  4. changedetection_io_osint_processor-0.0.1.dist-info/entry_points.txt +2 -0
  5. changedetection_io_osint_processor-0.0.1.dist-info/licenses/LICENSE +661 -0
  6. changedetection_io_osint_processor-0.0.1.dist-info/top_level.txt +1 -0
  7. changedetectionio_osint/__init__.py +22 -0
  8. changedetectionio_osint/forms.py +289 -0
  9. changedetectionio_osint/plugin.py +37 -0
  10. changedetectionio_osint/processor.py +655 -0
  11. changedetectionio_osint/steps/__init__.py +4 -0
  12. changedetectionio_osint/steps/base.py +76 -0
  13. changedetectionio_osint/steps/bgp.py +88 -0
  14. changedetectionio_osint/steps/dns.py +147 -0
  15. changedetectionio_osint/steps/dns_scan.py +88 -0
  16. changedetectionio_osint/steps/dnssec.py +260 -0
  17. changedetectionio_osint/steps/email_security.py +236 -0
  18. changedetectionio_osint/steps/http_fingerprint.py +359 -0
  19. changedetectionio_osint/steps/http_scan.py +31 -0
  20. changedetectionio_osint/steps/mac_lookup.py +209 -0
  21. changedetectionio_osint/steps/os_detection.py +245 -0
  22. changedetectionio_osint/steps/portscan.py +113 -0
  23. changedetectionio_osint/steps/registry.py +49 -0
  24. changedetectionio_osint/steps/smtp_fingerprint.py +517 -0
  25. changedetectionio_osint/steps/ssh_fingerprint.py +310 -0
  26. changedetectionio_osint/steps/tls_analysis.py +332 -0
  27. changedetectionio_osint/steps/traceroute.py +127 -0
  28. changedetectionio_osint/steps/whois_lookup.py +125 -0
  29. changedetectionio_osint/steps/whois_scan.py +123 -0
@@ -0,0 +1,22 @@
1
+ """
2
+ OSINT Reconnaissance Processor for changedetection.io
3
+
4
+ Uses the osint PyPI package for comprehensive reconnaissance.
5
+ """
6
+
7
+ # Translation marker for extraction
8
+ def _(x): return x
9
+ processor_description = _('OSINT Reconnaissance (DNS, WHOIS, SSL, Ports)')
10
+ name = _('OSINT Reconnaissance')
11
+ description = _('Comprehensive reconnaissance using OSINT tools (DNS, WHOIS, SSL certificates, port scanning)')
12
+ processor_weight = -50 # Show before text_json_diff
13
+ list_badge_text = "OSINT"
14
+ del _
15
+
16
+ # Processor capabilities (defaults to False unless specified)
17
+ supports_visual_selector = False
18
+ supports_browser_steps = False
19
+ supports_text_filters_and_triggers = True
20
+ supports_text_filters_and_triggers_elements = False
21
+ supports_request_type = False
22
+
@@ -0,0 +1,289 @@
1
+ """
2
+ Forms for OSINT Reconnaissance Processor configuration.
3
+
4
+ Fields prefixed with 'processor_config_*' are automatically saved to
5
+ a JSON file in the watch data directory (osint_recon.json).
6
+ """
7
+
8
+ from wtforms import (
9
+ BooleanField,
10
+ IntegerField,
11
+ StringField,
12
+ validators
13
+ )
14
+ from wtforms.fields.choices import RadioField
15
+ from flask_babel import lazy_gettext as _l
16
+
17
+ from changedetectionio.forms import processor_text_json_diff_form
18
+
19
+
20
+ class processor_settings_form(processor_text_json_diff_form):
21
+ """Form for OSINT Reconnaissance processor settings."""
22
+
23
+ # DNS Configuration
24
+ processor_config_dns_server = StringField(
25
+ _l('DNS Server'),
26
+ validators=[
27
+ validators.Optional(),
28
+ validators.Length(max=100, message=_l('DNS server address is too long'))
29
+ ],
30
+ render_kw={"placeholder": "8.8.8.8", "size": "20"}
31
+ )
32
+
33
+ # Execution Mode
34
+ processor_config_scan_mode = RadioField(
35
+ _l('Scan Mode'),
36
+ choices=[
37
+ ('serial', _l('Serial (slower, safer, easier to debug)')),
38
+ ('parallel', _l('Parallel (faster, 4-5x speedup)'))
39
+ ],
40
+ default='serial'
41
+ )
42
+
43
+ # Individual scan step toggles
44
+ processor_config_enable_dns = BooleanField(
45
+ _l('DNS Queries'),
46
+ default=True
47
+ )
48
+
49
+ processor_config_enable_whois = BooleanField(
50
+ _l('WHOIS Lookup'),
51
+ default=True
52
+ )
53
+
54
+ processor_config_enable_http = BooleanField(
55
+ _l('HTTP Fingerprinting'),
56
+ default=True
57
+ )
58
+
59
+ processor_config_enable_tls = BooleanField(
60
+ _l('SSL/TLS Analysis'),
61
+ default=True
62
+ )
63
+
64
+ processor_config_tls_vulnerability_scan = BooleanField(
65
+ _l('TLS Vulnerability Scanning'),
66
+ default=False
67
+ )
68
+
69
+ processor_config_enable_portscan = BooleanField(
70
+ _l('Port Scanning'),
71
+ default=False
72
+ )
73
+
74
+ processor_config_enable_traceroute = BooleanField(
75
+ _l('Traceroute'),
76
+ default=True
77
+ )
78
+
79
+ processor_config_enable_bgp = BooleanField(
80
+ _l('BGP/ASN Information'),
81
+ default=True
82
+ )
83
+
84
+ processor_config_enable_os_detection = BooleanField(
85
+ _l('OS Detection'),
86
+ default=True
87
+ )
88
+
89
+ processor_config_enable_email_security = BooleanField(
90
+ _l('Email Security (SPF/DMARC/DKIM)'),
91
+ default=True
92
+ )
93
+
94
+ processor_config_enable_dnssec = BooleanField(
95
+ _l('DNSSEC Validation'),
96
+ default=True
97
+ )
98
+
99
+ processor_config_enable_ssh = BooleanField(
100
+ _l('SSH Fingerprinting'),
101
+ default=True
102
+ )
103
+
104
+ processor_config_enable_smtp = BooleanField(
105
+ _l('SMTP/Email Server Fingerprinting'),
106
+ default=True
107
+ )
108
+
109
+ processor_config_smtp_ehlo_hostname = StringField(
110
+ _l('SMTP EHLO Hostname'),
111
+ validators=[
112
+ validators.Optional(),
113
+ validators.Length(max=253, message=_l('Hostname is too long'))
114
+ ],
115
+ render_kw={"placeholder": "localhost.localdomain", "size": "30"}
116
+ )
117
+
118
+ processor_config_whois_expire_warning_days = IntegerField(
119
+ _l('WHOIS Expiration Warning (days)'),
120
+ validators=[
121
+ validators.Optional(),
122
+ validators.NumberRange(min=0, max=10000)
123
+ ],
124
+ default=3
125
+ )
126
+
127
+ processor_config_tls_expire_warning_days = IntegerField(
128
+ _l('TLS Certificate Expiration Warning (days)'),
129
+ validators=[
130
+ validators.Optional(),
131
+ validators.NumberRange(min=0, max=10000)
132
+ ],
133
+ default=3
134
+ )
135
+
136
+ def extra_tab_content(self):
137
+ """Tab label for processor-specific settings."""
138
+ return _l('OSINT Settings')
139
+
140
+ def extra_form_content(self):
141
+ """Render processor-specific form fields.
142
+
143
+ @NOTE: Fields prefixed with processor_config_* are saved to
144
+ datadir/uuid/osint_recon.json and read at process time.
145
+ """
146
+ return '''
147
+ {% from '_helpers.html' import render_field, render_checkbox_field %}
148
+ <fieldset>
149
+ <legend>OSINT Reconnaissance Configuration</legend>
150
+
151
+ <div class="pure-control-group">
152
+ {{ render_field(form.processor_config_dns_server) }}
153
+ <span class="pure-form-message-inline">
154
+ <strong>DNS server to use for all DNS lookups.</strong><br>
155
+ Default: 8.8.8.8 (Google DNS). Other options: 1.1.1.1 (Cloudflare), 9.9.9.9 (Quad9)
156
+ </span>
157
+ </div>
158
+
159
+ <div class="pure-control-group">
160
+ <fieldset class="pure-group inline-radio">
161
+ {{ render_field(form.processor_config_scan_mode) }}
162
+ </fieldset>
163
+ <span class="pure-form-message-inline">
164
+ <strong>Serial mode</strong> runs scans one after another (safer, easier to debug).<br>
165
+ <strong>Parallel mode</strong> runs all scans simultaneously (4-5x faster).
166
+ </span>
167
+ </div>
168
+ </fieldset>
169
+
170
+ <fieldset>
171
+ <legend>Enable/Disable Scan Steps</legend>
172
+ <span class="pure-form-message-inline" style="display: block; margin-bottom: 10px;">
173
+ Uncheck any scan steps you don't want to run. This can reduce processing time and output size.
174
+ </span>
175
+
176
+ <div class="pure-control-group">
177
+ {{ render_checkbox_field(form.processor_config_enable_dns) }}
178
+ <span class="pure-form-message-inline">
179
+ DNS queries: A, AAAA, MX, NS, TXT, SOA, CAA records
180
+ </span>
181
+ </div>
182
+
183
+ <div class="pure-control-group">
184
+ {{ render_checkbox_field(form.processor_config_enable_whois) }}
185
+ <span class="pure-form-message-inline">
186
+ WHOIS domain registration information (registrar, nameservers, dates)
187
+ </span>
188
+ </div>
189
+
190
+ <div class="pure-control-group" style="margin-left: 25px;">
191
+ {{ render_field(form.processor_config_whois_expire_warning_days, placeholder="3", size="5") }}
192
+ <span class="pure-form-message-inline">
193
+ Show countdown warning when domain expires within this many days (0 to disable warnings)
194
+ </span>
195
+ </div>
196
+
197
+ <div class="pure-control-group">
198
+ {{ render_checkbox_field(form.processor_config_enable_http) }}
199
+ <span class="pure-form-message-inline">
200
+ HTTP fingerprinting: Server headers, CDN/WAF detection, redirect chains, cookies
201
+ </span>
202
+ </div>
203
+
204
+ <div class="pure-control-group">
205
+ {{ render_checkbox_field(form.processor_config_enable_tls) }}
206
+ <span class="pure-form-message-inline">
207
+ SSL/TLS certificate analysis: Validity, issuer, cipher suites, protocols
208
+ </span>
209
+ </div>
210
+
211
+ <div class="pure-control-group" style="margin-left: 25px;">
212
+ {{ render_field(form.processor_config_tls_expire_warning_days, placeholder="3", size="5") }}
213
+ <span class="pure-form-message-inline">
214
+ Show countdown warning when TLS certificate expires within this many days (0 to disable warnings)
215
+ </span>
216
+ </div>
217
+
218
+ <div class="pure-control-group" style="margin-left: 25px;">
219
+ {{ render_checkbox_field(form.processor_config_tls_vulnerability_scan) }}
220
+ <span class="pure-form-message-inline">
221
+ <strong>⚠️ Advanced TLS security checks:</strong> Heartbleed, ROBOT, CCS Injection, TLS Compression (CRIME), Session Renegotiation, and more. Adds ~5-10 seconds to scan time.
222
+ </span>
223
+ </div>
224
+
225
+ <div class="pure-control-group">
226
+ {{ render_checkbox_field(form.processor_config_enable_portscan) }}
227
+ <span class="pure-form-message-inline">
228
+ Port scanning: Check common service ports (HTTP, HTTPS, SSH, FTP, etc.)
229
+ </span>
230
+ </div>
231
+
232
+ <div class="pure-control-group">
233
+ {{ render_checkbox_field(form.processor_config_enable_traceroute) }}
234
+ <span class="pure-form-message-inline">
235
+ Traceroute: Network path analysis (last N hops to target)
236
+ </span>
237
+ </div>
238
+
239
+ <div class="pure-control-group">
240
+ {{ render_checkbox_field(form.processor_config_enable_bgp) }}
241
+ <span class="pure-form-message-inline">
242
+ BGP/ASN information: Autonomous System Number and ISP details
243
+ </span>
244
+ </div>
245
+
246
+ <div class="pure-control-group">
247
+ {{ render_checkbox_field(form.processor_config_enable_os_detection) }}
248
+ <span class="pure-form-message-inline">
249
+ OS detection via TTL fingerprinting (requires raw socket permissions for active scanning)
250
+ </span>
251
+ </div>
252
+
253
+ <div class="pure-control-group">
254
+ {{ render_checkbox_field(form.processor_config_enable_email_security) }}
255
+ <span class="pure-form-message-inline">
256
+ Email security: SPF, DMARC, and DKIM record analysis for anti-spoofing
257
+ </span>
258
+ </div>
259
+
260
+ <div class="pure-control-group">
261
+ {{ render_checkbox_field(form.processor_config_enable_dnssec) }}
262
+ <span class="pure-form-message-inline">
263
+ DNSSEC validation: Verify DNS cryptographic signatures and chain of trust
264
+ </span>
265
+ </div>
266
+
267
+ <div class="pure-control-group">
268
+ {{ render_checkbox_field(form.processor_config_enable_ssh) }}
269
+ <span class="pure-form-message-inline">
270
+ SSH fingerprinting: Server banner, version, host keys, and supported algorithms
271
+ </span>
272
+ </div>
273
+
274
+ <div class="pure-control-group">
275
+ {{ render_checkbox_field(form.processor_config_enable_smtp) }}
276
+ <span class="pure-form-message-inline">
277
+ SMTP fingerprinting: Email server capabilities, authentication, and encryption (ports 25, 587, 465)
278
+ </span>
279
+ </div>
280
+
281
+ <div class="pure-control-group" style="margin-left: 25px;">
282
+ {{ render_field(form.processor_config_smtp_ehlo_hostname, placeholder="localhost.localdomain", size="30") }}
283
+ <span class="pure-form-message-inline">
284
+ <strong>Hostname to use in SMTP EHLO command.</strong><br>
285
+ ⚠️ Security: Leave empty to use "localhost.localdomain" (anonymous). Setting this to a real hostname may reveal your identity.
286
+ </span>
287
+ </div>
288
+ </fieldset>
289
+ '''
@@ -0,0 +1,37 @@
1
+ """
2
+ OSINT Reconnaissance Processor, get changes of DNS, routing, SSL expiring and more.
3
+
4
+ This module implements the changedetectionio plugin interface to register
5
+ the OSINT processor with the main application.
6
+ """
7
+
8
+ from changedetectionio.pluggy_interface import hookimpl
9
+ from loguru import logger
10
+
11
+
12
+ @hookimpl
13
+ def register_processor():
14
+ """Register the OSINT reconnaissance processor.
15
+
16
+ Returns:
17
+ dict: Processor registration information
18
+ """
19
+ try:
20
+ # Import the processor module
21
+ from . import processor
22
+ from . import name, description, processor_weight, list_badge_text
23
+
24
+ return {
25
+ 'processor_name': 'osint_recon',
26
+ 'processor_module': processor,
27
+ 'processor_class': processor.perform_site_check,
28
+ 'metadata': {
29
+ 'name': name,
30
+ 'description': description,
31
+ 'processor_weight': processor_weight,
32
+ 'list_badge_text': list_badge_text,
33
+ }
34
+ }
35
+ except Exception as e:
36
+ logger.error(f"Failed to register OSINT processor: {e}")
37
+ return None