owlscan 1.2.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.
- owlscan-1.2.0/LICENSE +32 -0
- owlscan-1.2.0/PKG-INFO +440 -0
- owlscan-1.2.0/README.md +340 -0
- owlscan-1.2.0/owlscan/__init__.py +47 -0
- owlscan-1.2.0/owlscan/cli.py +339 -0
- owlscan-1.2.0/owlscan/core/__init__.py +0 -0
- owlscan-1.2.0/owlscan/core/config.py +244 -0
- owlscan-1.2.0/owlscan/core/database.py +83 -0
- owlscan-1.2.0/owlscan/core/engine.py +276 -0
- owlscan-1.2.0/owlscan/core/models.py +279 -0
- owlscan-1.2.0/owlscan/exporters/__init__.py +0 -0
- owlscan-1.2.0/owlscan/exporters/manager.py +528 -0
- owlscan-1.2.0/owlscan/intel/__init__.py +0 -0
- owlscan-1.2.0/owlscan/intel/apis/__init__.py +0 -0
- owlscan-1.2.0/owlscan/intel/apis/all_apis.py +1558 -0
- owlscan-1.2.0/owlscan/intel/apis/base.py +215 -0
- owlscan-1.2.0/owlscan/intel/apis/shodan_api.py +165 -0
- owlscan-1.2.0/owlscan/intel/orchestrator.py +130 -0
- owlscan-1.2.0/owlscan/intel/people/__init__.py +0 -0
- owlscan-1.2.0/owlscan/intel/people/aggregator.py +254 -0
- owlscan-1.2.0/owlscan/scrapers/__init__.py +0 -0
- owlscan-1.2.0/owlscan/scrapers/api_hunter.py +286 -0
- owlscan-1.2.0/owlscan/scrapers/crawler.py +366 -0
- owlscan-1.2.0/owlscan/scrapers/dns_recon.py +379 -0
- owlscan-1.2.0/owlscan/scrapers/port_scanner.py +267 -0
- owlscan-1.2.0/owlscan/scrapers/spiders/__init__.py +0 -0
- owlscan-1.2.0/owlscan/scrapers/tech_detector.py +447 -0
- owlscan-1.2.0/owlscan/web/__init__.py +0 -0
- owlscan-1.2.0/owlscan/web/app.py +134 -0
- owlscan-1.2.0/owlscan/web/routes/__init__.py +0 -0
- owlscan-1.2.0/owlscan/web/routes/api.py +106 -0
- owlscan-1.2.0/owlscan/web/routes/dashboard.py +48 -0
- owlscan-1.2.0/owlscan/web/routes/export.py +66 -0
- owlscan-1.2.0/owlscan/web/routes/intel.py +59 -0
- owlscan-1.2.0/owlscan/web/routes/scans.py +124 -0
- owlscan-1.2.0/owlscan/web/routes/settings.py +63 -0
- owlscan-1.2.0/owlscan.egg-info/PKG-INFO +440 -0
- owlscan-1.2.0/owlscan.egg-info/SOURCES.txt +42 -0
- owlscan-1.2.0/owlscan.egg-info/dependency_links.txt +1 -0
- owlscan-1.2.0/owlscan.egg-info/entry_points.txt +3 -0
- owlscan-1.2.0/owlscan.egg-info/requires.txt +63 -0
- owlscan-1.2.0/owlscan.egg-info/top_level.txt +1 -0
- owlscan-1.2.0/setup.cfg +4 -0
- owlscan-1.2.0/setup.py +51 -0
owlscan-1.2.0/LICENSE
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 packetsn1ffer
|
|
4
|
+
Claude (Anthropic) — AI Architecture & Implementation
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
NightOwl — Open Source OSINT Intelligence Framework
|
|
27
|
+
"The night sees all. The owl forgets nothing."
|
|
28
|
+
|
|
29
|
+
This software is intended for authorized security research, OSINT investigation,
|
|
30
|
+
and educational purposes only. Users are solely responsible for ensuring their
|
|
31
|
+
use complies with all applicable local, state, national, and international laws.
|
|
32
|
+
The authors assume no liability for misuse or damage caused by this software.
|
owlscan-1.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: owlscan
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: OwlScan :: Open-Source OSINT Intelligence Framework
|
|
5
|
+
Home-page: https://github.com/owlscan/owlscan
|
|
6
|
+
Author: packetsn1ffer
|
|
7
|
+
Project-URL: Bug Reports, https://github.com/owlscan/owlscan/issues
|
|
8
|
+
Project-URL: Source, https://github.com/owlscan/owlscan
|
|
9
|
+
Keywords: osint intelligence reconnaissance security pentest
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Web Environment
|
|
12
|
+
Classifier: Intended Audience :: Information Technology
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Security
|
|
21
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
22
|
+
Classifier: Topic :: System :: Networking :: Monitoring
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: flask>=3.0.0
|
|
27
|
+
Requires-Dist: flask-socketio>=5.3.6
|
|
28
|
+
Requires-Dist: flask-sqlalchemy>=3.1.0
|
|
29
|
+
Requires-Dist: flask-login>=0.6.3
|
|
30
|
+
Requires-Dist: flask-wtf>=1.2.1
|
|
31
|
+
Requires-Dist: eventlet>=0.35.0
|
|
32
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
33
|
+
Requires-Dist: alembic>=1.13.0
|
|
34
|
+
Requires-Dist: scrapy>=2.11.0
|
|
35
|
+
Requires-Dist: scrapy-splash>=0.9.0
|
|
36
|
+
Requires-Dist: scrapy-rotating-proxies>=0.6.2
|
|
37
|
+
Requires-Dist: scrapy-user-agents>=0.1.1
|
|
38
|
+
Requires-Dist: playwright>=1.40.0
|
|
39
|
+
Requires-Dist: httpx[asyncio]>=0.26.0
|
|
40
|
+
Requires-Dist: aiohttp>=3.9.0
|
|
41
|
+
Requires-Dist: requests>=2.31.0
|
|
42
|
+
Requires-Dist: urllib3>=2.1.0
|
|
43
|
+
Requires-Dist: shodan>=1.31.0
|
|
44
|
+
Requires-Dist: censys>=2.2.0
|
|
45
|
+
Requires-Dist: OTXv2>=1.5.12
|
|
46
|
+
Requires-Dist: dnspython>=2.4.0
|
|
47
|
+
Requires-Dist: python-whois>=0.9.4
|
|
48
|
+
Requires-Dist: ipwhois>=1.2.0
|
|
49
|
+
Requires-Dist: scapy>=2.5.0
|
|
50
|
+
Requires-Dist: cryptography>=42.0.0
|
|
51
|
+
Requires-Dist: bcrypt>=4.1.0
|
|
52
|
+
Requires-Dist: pyotp>=2.9.0
|
|
53
|
+
Requires-Dist: pydantic>=2.5.0
|
|
54
|
+
Requires-Dist: pandas>=2.1.0
|
|
55
|
+
Requires-Dist: numpy>=1.26.0
|
|
56
|
+
Requires-Dist: click>=8.1.0
|
|
57
|
+
Requires-Dist: rich>=13.7.0
|
|
58
|
+
Requires-Dist: typer>=0.9.0
|
|
59
|
+
Requires-Dist: reportlab>=4.0.8
|
|
60
|
+
Requires-Dist: openpyxl>=3.1.2
|
|
61
|
+
Requires-Dist: lxml>=5.0.0
|
|
62
|
+
Requires-Dist: stix2>=3.0.1
|
|
63
|
+
Requires-Dist: jinja2>=3.1.2
|
|
64
|
+
Requires-Dist: weasyprint>=61.0
|
|
65
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
66
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
67
|
+
Requires-Dist: aiofiles>=23.2.1
|
|
68
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
69
|
+
Requires-Dist: humanize>=4.9.0
|
|
70
|
+
Requires-Dist: tldextract>=5.1.1
|
|
71
|
+
Requires-Dist: ua-parser>=0.18.0
|
|
72
|
+
Requires-Dist: user-agents>=2.2.0
|
|
73
|
+
Requires-Dist: fake-useragent>=1.4.0
|
|
74
|
+
Requires-Dist: geoip2>=4.8.0
|
|
75
|
+
Requires-Dist: geopy>=2.4.1
|
|
76
|
+
Requires-Dist: Pillow>=10.2.0
|
|
77
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
78
|
+
Requires-Dist: aiofiles>=23.2.1
|
|
79
|
+
Requires-Dist: aiodns>=3.1.1
|
|
80
|
+
Requires-Dist: matplotlib>=3.8.0
|
|
81
|
+
Requires-Dist: pytest>=7.4.0
|
|
82
|
+
Requires-Dist: pytest-asyncio>=0.23.0
|
|
83
|
+
Requires-Dist: pytest-cov>=4.1.0
|
|
84
|
+
Requires-Dist: black>=23.12.0
|
|
85
|
+
Requires-Dist: isort>=5.13.2
|
|
86
|
+
Requires-Dist: flake8>=7.0.0
|
|
87
|
+
Requires-Dist: mypy>=1.8.0
|
|
88
|
+
Requires-Dist: pre-commit>=3.6.0
|
|
89
|
+
Dynamic: author
|
|
90
|
+
Dynamic: classifier
|
|
91
|
+
Dynamic: description
|
|
92
|
+
Dynamic: description-content-type
|
|
93
|
+
Dynamic: home-page
|
|
94
|
+
Dynamic: keywords
|
|
95
|
+
Dynamic: license-file
|
|
96
|
+
Dynamic: project-url
|
|
97
|
+
Dynamic: requires-dist
|
|
98
|
+
Dynamic: requires-python
|
|
99
|
+
Dynamic: summary
|
|
100
|
+
|
|
101
|
+
# 🦉 OwlScan // PHANTOM SIGNAL
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
██████╗ ██╗ ██╗██╗ ███████╗ ██████╗ █████╗ ███╗ ██╗
|
|
105
|
+
██╔═══██╗██║ ██║██║ ██╔════╝██╔════╝██╔══██╗████╗ ██║
|
|
106
|
+
██║ ██║██║ █╗ ██║██║ ███████╗██║ ███████║██╔██╗ ██║
|
|
107
|
+
██║ ██║██║███╗██║██║ ╚════██║██║ ██╔══██║██║╚██╗██║
|
|
108
|
+
╚██████╔╝╚███╔███╔╝███████╗███████║╚██████╗██║ ██║██║ ╚████║
|
|
109
|
+
╚═════╝ ╚══╝╚══╝ ╚══════╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝
|
|
110
|
+
>> OPEN-SOURCE OSINT INTELLIGENCE FRAMEWORK <<
|
|
111
|
+
"See everything. Leave no trace."
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
[](https://python.org)
|
|
115
|
+
[](LICENSE)
|
|
116
|
+
[]()
|
|
117
|
+
[](https://github.com/owlscan/owlscan/stargazers)
|
|
118
|
+
[](https://github.com/owlscan/owlscan/issues)
|
|
119
|
+
[](https://github.com/owlscan/owlscan/actions/workflows/ci.yml)
|
|
120
|
+
[](https://owlscan.sh)
|
|
121
|
+
[](CHANGELOG.md)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 🎬 Demo
|
|
127
|
+
|
|
128
|
+
### CLI — Ghost Run in action
|
|
129
|
+
|
|
130
|
+

|
|
131
|
+
|
|
132
|
+
### Web UI — Shadow Grid (Dashboard)
|
|
133
|
+
|
|
134
|
+

|
|
135
|
+
|
|
136
|
+
### Web UI — Launch Ghost Run
|
|
137
|
+
|
|
138
|
+

|
|
139
|
+
|
|
140
|
+
### Web UI — Scan Results
|
|
141
|
+
|
|
142
|
+

|
|
143
|
+
|
|
144
|
+
### Web UI — Theme Options
|
|
145
|
+
|
|
146
|
+
OwlScan ships with two built-in UI themes, selectable via the **☀/🌙 toggle** in the top navigation bar. Your preference is saved automatically and persists across sessions.
|
|
147
|
+
|
|
148
|
+
| Theme | Description |
|
|
149
|
+
|-------|-------------|
|
|
150
|
+
| **Dark** *(default)* | Cyberpunk aesthetic — deep charcoal background, neon green/cyan/purple accents, matrix rain canvas, glowing owl logo |
|
|
151
|
+
| **Light** | "Phantom Dawn" — soft blue-grey background, muted accent palette, clean black ASCII logo, matrix rain disabled |
|
|
152
|
+
|
|
153
|
+
> **Asciinema recording:** Watch the full interactive demo on asciinema.org, or play it locally:
|
|
154
|
+
> ```bash
|
|
155
|
+
> pip install asciinema
|
|
156
|
+
> asciinema play docs/assets/demo.cast
|
|
157
|
+
> ```
|
|
158
|
+
|
|
159
|
+
[](https://asciinema.org/a/QHiA1uk3kf9pKxY6)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## ⚡ What is OwlScan?
|
|
164
|
+
|
|
165
|
+
OwlScan is a **community-powered, open-source OSINT intelligence framework** built for security researchers, penetration testers, investigators, and enthusiasts. It combines web scraping, network reconnaissance, people intelligence aggregation, and threat analysis into a single cohesive platform.
|
|
166
|
+
|
|
167
|
+
> **LEGAL DISCLAIMER:** OwlScan is for **authorized security research, OSINT investigations, and educational purposes only**. Only scan targets you have explicit permission to test. You are solely responsible for compliance with all applicable laws. The developers assume NO liability for misuse.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 🔥 Features
|
|
172
|
+
|
|
173
|
+
### 🕷 Web Reconnaissance
|
|
174
|
+
- **Scrapy-powered** deep web crawler with JavaScript rendering support
|
|
175
|
+
- **Technology detection** — fingerprints 50+ technologies (CMS, frameworks, CDNs, WAFs)
|
|
176
|
+
- **API endpoint hunter** — discovers REST APIs, GraphQL, Swagger docs, admin panels, `.env` leaks
|
|
177
|
+
- **Security header analysis** with graded posture scoring
|
|
178
|
+
- **Email, phone, link, and comment harvesting**
|
|
179
|
+
|
|
180
|
+
### 🌐 Network Intelligence
|
|
181
|
+
- **Async port scanner** — 65,535 ports, banner grabbing, service detection
|
|
182
|
+
- **DNS recon** — A/AAAA/MX/NS/TXT/SOA/CAA, zone transfer attempts, subdomain brute-force
|
|
183
|
+
- **Certificate transparency** via crt.sh — uncover subdomains via SSL history
|
|
184
|
+
- **SPF/DMARC analysis** — identify email spoofing vulnerabilities
|
|
185
|
+
- **Reverse DNS** and co-hosted domain discovery
|
|
186
|
+
|
|
187
|
+
### 🔬 Intelligence APIs (30+ Integrations)
|
|
188
|
+
|
|
189
|
+
| Category | APIs |
|
|
190
|
+
|----------|------|
|
|
191
|
+
| **Network Scanning** | Shodan, Censys, ZoomEye, BinaryEdge |
|
|
192
|
+
| **Threat Intelligence** | VirusTotal, AbuseIPDB, GreyNoise, AlienVault OTX |
|
|
193
|
+
| **Email** | Hunter.io, HaveIBeenPwned, HaveIBeenPwned |
|
|
194
|
+
| **Domain/Web** | SecurityTrails, URLScan.io, WhoisXML, Local WHOIS |
|
|
195
|
+
| **Geolocation** | IPInfo.io |
|
|
196
|
+
| **People Search** | Pipl, FullContact, WhitePages, Spokeo, Clearbit |
|
|
197
|
+
| **Social** | GitHub, Twitter/X |
|
|
198
|
+
| **Custom** | Bring your own API via plugin architecture |
|
|
199
|
+
|
|
200
|
+
### 👤 Shadow Profiler (People Intelligence)
|
|
201
|
+
LexisNexis-style identity aggregation from public records:
|
|
202
|
+
- Cross-correlates data from multiple people-search APIs
|
|
203
|
+
- Discovers emails, phones, addresses, relatives, employers
|
|
204
|
+
- Breach data correlation via HIBP and other sources
|
|
205
|
+
- Social media profile linking
|
|
206
|
+
- **Shadow Score** — digital exposure quantification (0-100)
|
|
207
|
+
- Social graph building and timeline reconstruction
|
|
208
|
+
|
|
209
|
+
### 📦 Export Formats
|
|
210
|
+
| Format | Description |
|
|
211
|
+
|--------|-------------|
|
|
212
|
+
| **JSON** | Raw machine-readable data |
|
|
213
|
+
| **CSV** | Spreadsheet-compatible |
|
|
214
|
+
| **HTML** | Self-contained cyberpunk-styled report |
|
|
215
|
+
| **PDF** | Professional dossier via ReportLab |
|
|
216
|
+
| **XML** | Structured data |
|
|
217
|
+
| **XLSX** | Excel workbook |
|
|
218
|
+
| **STIX 2.1** | Threat intelligence sharing format |
|
|
219
|
+
| **Markdown** | Human-readable report |
|
|
220
|
+
|
|
221
|
+
All formats support **ZIP compression** and **AES-256-GCM encryption**.
|
|
222
|
+
|
|
223
|
+
### 🌑 Ghost Mode
|
|
224
|
+
- Low-and-slow scanning profiles to minimize detection
|
|
225
|
+
- Identity rotation via user-agent spoofing
|
|
226
|
+
- Tor proxy integration (Docker compose profile: `ghost`)
|
|
227
|
+
- Configurable request jitter and delays
|
|
228
|
+
|
|
229
|
+
### 🔔 Additional Features
|
|
230
|
+
- **Real-time live feed** — WebSocket-powered terminal during scans
|
|
231
|
+
- **Shadow Score** — composite risk/exposure scoring
|
|
232
|
+
- **Scheduled Phantoms** — recurring automated ghost runs
|
|
233
|
+
- **API health monitor** — dashboard showing configured APIs and rate limits
|
|
234
|
+
- **Light/Dark theme** — toggle between cyberpunk Dark mode and "Phantom Dawn" Light mode via the ☀/🌙 button; preference persisted in localStorage
|
|
235
|
+
- **Full REST API** — integrate OwlScan into your own toolchain
|
|
236
|
+
- **CLI interface** — `owlscan scan`, `owlscan profile`, `owlscan export`
|
|
237
|
+
- **Docker** — single-command deployment
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 🚀 Quick Start
|
|
242
|
+
|
|
243
|
+
### Option 1: Docker (Recommended)
|
|
244
|
+
```bash
|
|
245
|
+
git clone https://github.com/owlscan/owlscan
|
|
246
|
+
cd owlscan
|
|
247
|
+
docker-compose up -d
|
|
248
|
+
# Open http://localhost:5000
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Option 2: Manual Installation
|
|
252
|
+
```bash
|
|
253
|
+
# Python 3.10+ required
|
|
254
|
+
git clone https://github.com/owlscan/owlscan
|
|
255
|
+
cd owlscan
|
|
256
|
+
pip install -e .
|
|
257
|
+
owlscan init
|
|
258
|
+
owlscan web --open-browser
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Option 3: CLI Scan
|
|
262
|
+
```bash
|
|
263
|
+
# Quick probe
|
|
264
|
+
owlscan scan example.com --profile quick
|
|
265
|
+
|
|
266
|
+
# Full spectrum with export
|
|
267
|
+
owlscan scan 192.168.1.1 --type ip_recon --format html --output ./reports
|
|
268
|
+
|
|
269
|
+
# People intelligence
|
|
270
|
+
owlscan profile --email target@company.com --first-name John --last-name Doe
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## ⚙️ Configuration
|
|
276
|
+
|
|
277
|
+
### Environment Variables (Recommended for API Keys)
|
|
278
|
+
```bash
|
|
279
|
+
export SHODAN_API_KEY="your-shodan-key"
|
|
280
|
+
export VIRUSTOTAL_API_KEY="your-vt-key"
|
|
281
|
+
export HUNTER_API_KEY="your-hunter-key"
|
|
282
|
+
export HIBP_API_KEY="your-hibp-key"
|
|
283
|
+
export GREYNOISE_API_KEY="your-greynoise-key"
|
|
284
|
+
export IPINFO_TOKEN="your-ipinfo-token"
|
|
285
|
+
export ABUSEIPDB_API_KEY="your-abuseipdb-key"
|
|
286
|
+
export ALIENVAULT_API_KEY="your-otx-key"
|
|
287
|
+
export GITHUB_TOKEN="your-github-token"
|
|
288
|
+
export SECURITYTRAILS_API_KEY="your-st-key"
|
|
289
|
+
# See config/owlscan.yaml for full list
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Config File
|
|
293
|
+
Copy `config/owlscan.yaml` to `~/.owlscan/config.yaml` and customize.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 🔌 Adding Custom APIs
|
|
298
|
+
|
|
299
|
+
OwlScan uses a plugin architecture. Adding a new intelligence source takes ~20 lines:
|
|
300
|
+
|
|
301
|
+
```python
|
|
302
|
+
# owlscan/intel/apis/my_api.py
|
|
303
|
+
from owlscan.intel.apis.base import BaseIntelAPI, register_api, APICategory, APITier
|
|
304
|
+
|
|
305
|
+
@register_api
|
|
306
|
+
class MyAPI(BaseIntelAPI):
|
|
307
|
+
NAME = "myapi"
|
|
308
|
+
DESCRIPTION = "My custom intelligence source"
|
|
309
|
+
REQUIRES_KEY = True
|
|
310
|
+
TIER = APITier.FREE_LIMITED
|
|
311
|
+
CATEGORIES = [APICategory.NETWORK]
|
|
312
|
+
BASE_URL = "https://api.myservice.com/v1"
|
|
313
|
+
SIGN_UP_URL = "https://myservice.com/signup"
|
|
314
|
+
|
|
315
|
+
async def search(self, query: str, **kwargs):
|
|
316
|
+
data = await self._get(
|
|
317
|
+
f"{self.BASE_URL}/search",
|
|
318
|
+
params={"q": query, "key": self._api_key}
|
|
319
|
+
)
|
|
320
|
+
return [self._wrap_result("my_result", data)]
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Then import it in `owlscan/intel/orchestrator.py` and it auto-registers.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 🏗 Architecture
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
owlscan/
|
|
331
|
+
├── core/ — Engine, config, database, models
|
|
332
|
+
├── scrapers/ — Scrapy crawler, tech detector, port scanner, API hunter, DNS recon
|
|
333
|
+
├── intel/
|
|
334
|
+
│ ├── apis/ — 30+ API integrations (plugin architecture)
|
|
335
|
+
│ └── people/ — People intelligence aggregation
|
|
336
|
+
├── exporters/ — JSON/CSV/PDF/HTML/XML/XLSX/STIX + crypto wrapper
|
|
337
|
+
└── web/
|
|
338
|
+
├── routes/ — Flask blueprints (dashboard, scans, intel, settings, export, REST API)
|
|
339
|
+
├── templates/ — Cyberpunk Jinja2 templates
|
|
340
|
+
└── static/ — CSS (cyberpunk), JS (matrix, terminal, app)
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 🛡 REST API
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Create a scan
|
|
349
|
+
curl -X POST http://localhost:5000/api/v1/scans \
|
|
350
|
+
-H "Content-Type: application/json" \
|
|
351
|
+
-d '{"target": "example.com", "scan_type": "web_recon"}'
|
|
352
|
+
|
|
353
|
+
# Get results
|
|
354
|
+
curl http://localhost:5000/api/v1/scans/{scan_id}
|
|
355
|
+
|
|
356
|
+
# List all APIs
|
|
357
|
+
curl http://localhost:5000/api/v1/apis
|
|
358
|
+
|
|
359
|
+
# Health check
|
|
360
|
+
curl http://localhost:5000/api/v1/health
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 🤝 Contributing
|
|
366
|
+
|
|
367
|
+
OwlScan thrives on community contributions. Ways to help:
|
|
368
|
+
|
|
369
|
+
1. **Add API integrations** — Follow the plugin pattern above
|
|
370
|
+
2. **Improve detection signatures** — Expand `tech_detector.py`
|
|
371
|
+
3. **Bug reports** — [GitHub Issues](https://github.com/owlscan/owlscan/issues)
|
|
372
|
+
4. **Documentation** — Improve the wiki
|
|
373
|
+
5. **Translations** — Internationalize the UI
|
|
374
|
+
|
|
375
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please also review our [Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md).
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 📖 Documentation
|
|
380
|
+
|
|
381
|
+
- **[Usage Guide](docs/USAGE.md)** — full walkthroughs, usage scenarios, CLI reference, and per-platform troubleshooting (Linux / macOS / Windows / Docker)
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## ⚠️ Legal & Ethics
|
|
386
|
+
|
|
387
|
+
OwlScan is a dual-use tool. Operators are responsible for:
|
|
388
|
+
- Obtaining explicit authorization before scanning any system
|
|
389
|
+
- Complying with applicable laws (CFAA, GDPR, CCPA, ECPA, local laws)
|
|
390
|
+
- Respecting privacy and data protection regulations
|
|
391
|
+
- Not using this tool for harassment, stalking, or unauthorized surveillance
|
|
392
|
+
|
|
393
|
+
**The developers provide this software as-is with no warranty. Misuse is your responsibility.**
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## 🏷 Topics
|
|
398
|
+
|
|
399
|
+
[](https://github.com/topics/osint)
|
|
400
|
+
[](https://github.com/topics/security)
|
|
401
|
+
[](https://github.com/topics/python)
|
|
402
|
+
[](https://github.com/topics/hacking)
|
|
403
|
+
[](https://github.com/topics/cybersecurity)
|
|
404
|
+
[](https://github.com/topics/reconnaissance)
|
|
405
|
+
[](https://github.com/topics/recon)
|
|
406
|
+
[](https://github.com/topics/penetration-testing)
|
|
407
|
+
[](https://github.com/topics/ethical-hacking)
|
|
408
|
+
[](https://github.com/topics/bug-bounty)
|
|
409
|
+
[](https://github.com/topics/information-gathering)
|
|
410
|
+
[](https://github.com/topics/threat-intelligence)
|
|
411
|
+
[](https://github.com/topics/security-tools)
|
|
412
|
+
[](https://github.com/topics/network-scanner)
|
|
413
|
+
[](https://github.com/topics/dns-recon)
|
|
414
|
+
[](https://github.com/topics/infosec)
|
|
415
|
+
[](https://github.com/topics/flask)
|
|
416
|
+
[](https://github.com/topics/security-research)
|
|
417
|
+
[](https://github.com/topics/footprinting)
|
|
418
|
+
[](https://github.com/topics/automation)
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## 🤝 Community
|
|
423
|
+
|
|
424
|
+
| Document | Description |
|
|
425
|
+
|----------|-------------|
|
|
426
|
+
| [Code of Conduct](CODE_OF_CONDUCT.md) | Community standards and expectations |
|
|
427
|
+
| [Contributing Guidelines](CONTRIBUTING.md) | How to contribute to OwlScan |
|
|
428
|
+
| [Security Policy](SECURITY.md) | Reporting vulnerabilities responsibly |
|
|
429
|
+
| [License](LICENSE) | MIT License terms |
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## 📜 License
|
|
434
|
+
|
|
435
|
+
MIT License — see [LICENSE](LICENSE)
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
*Built with questionable amounts of caffeine. "The night sees all. The owl forgets nothing."*
|
|
440
|
+
*Some ghosts leave no trace. This one left commits. — Claude*
|