
Python CLI टूल तेज़ IOC विश्लेषण (IPs, Domains, CVEs) के लिए जो 6 मुफ़्त Threat Intel APIs का उपयोग करता है। आउटपुट: रंग-कोडित Excel, JSON, CSV। उपयोग: VT, Shodan, AbuseIPDB।
6 मुफ़्त थ्रेट इंटेल API के ज़रिए IPs, डोमेन, हैश और CVE की जाँच करें — ब्राउज़र टैब्स के बीच स्विच किए बिना।
क्विक स्टार्ट · उपयोग · आर्किटेक्चर · API कुंजियाँ · स्क्रीनशॉट · योगदान
🚀 गर्व के साथ आधिकारिक Awesome OSINT रिपॉज़िटरी में शामिल।
ThreatLens एक एकल कमांड-लाइन टूल है जो सबसे भरोसेमंद मुफ़्त OSINT स्रोतों में थ्रेट इंटेलिजेंस लुकअप को एकीकृत करता है। पाँच अलग-अलग वेबसाइटों में एक IP पेस्ट करने के बजाय, ThreatLens उन सभी को समानांतर में क्वेरी करता है, परिणामों को सामान्यीकृत करता है, और आपको एक स्पष्ट निर्णय देता है — टर्मिनल में, या एक बेहतरीन, रंग-कोडित Excel/JSON/CSV रिपोर्ट में।
SOC विश्लेषकों, इंसिडेंट रिस्पॉन्डरों, थ्रेट हंटरों, और किसी भी ऐसे व्यक्ति के लिए बनाया गया है जो शेल छोड़े बिना तेज़, विश्वसनीय IOC संवर्धन चाहता है।
# 1. Clone & install
git clone https://github.com/AbdaullahAG/threatlens.git
cd threatlens
pip install -r requirements.txt
# 2. Configure your API keys
cp config/keys.env.example config/keys.env
# → edit config/keys.env and fill in your keys
# 3. Run your first scan
python main.py -i 45.33.32.156
💡 NVD (CVE लुकअप) बिना किसी API कुंजी के तुरंत काम करता है। बाकी हर API एक मुफ़्त टियर प्रदान करता है जिसके लिए साइन अप करने में 2 मिनट से कम समय लगता है — नीचे API कुंजियाँ देखें।
pip install --require-hashes -r requirements.lock
threat_intel_tool/
├── main.py # CLI entry point & argument parser
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt # Dev/CI tooling (ruff, bandit, pip-audit, pip-tools)
├── requirements.lock # Pinned lockfile with SHA-256 hashes
├── pytest.ini # pytest configuration (marks, etc.)
├── config/
│ └── keys.env # API keys (copy from keys.env.example)
├── output/ # Generated reports land here
├── src/
│ ├── engine.py # Main orchestrator (collect → enrich → report)
│ ├── models.py # IOC & EnrichmentResult dataclasses
│ ├── storage.py # SQLite cache & investigation history
│ ├── parsers/
│ │ └── ioc_parser.py # Regex-based IOC extractor with validation
│ ├── enrichers/
│ │ ├── base.py # Abstract base — safe HTTP client (redirect-block, budget, retry)
│ │ ├── registry.py # Enricher dispatcher
│ │ ├── abuseipdb.py # AbuseIPDB (IP)
│ │ ├── virustotal.py # VirusTotal (IP / Domain / URL / Hash)
│ │ ├── otx.py # AlienVault OTX (IP / Domain / URL / Hash)
│ │ ├── shodan.py # Shodan (IP)
│ │ ├── urlscan.py # URLScan.io (URL / Domain)
│ │ └── nvd.py # NVD / NIST (CVE — no key required)
│ ├── reporters/
│ │ ├── excel_reporter.py # Color-coded Excel reports
│ │ ├── other_reporters.py # JSON & CSV output
│ │ └── terminal_display.py # Rich terminal tables
│ └── utils/
│ ├── config.py # API key loader & runtime config
│ ├── logger.py # Rich logging setup
│ ├── banner.py # ASCII banner
│ ├── quota.py # Per-run request budget (thread-safe)
│ └── security.py # IOC validation, formula neutralisation, secret redaction
└── tests/
├── conftest.py # pytest fixtures & --run-e2e flag
├── test_core.py # IOC parser, verdict logic, cache round-trip (34 tests)
├── test_enrichers.py # BaseEnricher HTTP edge-cases — mock only (9 tests)
├── test_reporters.py # Excel/CSV formula protection + SQLite integration (17 tests)
└── test_cli_e2e.py # Full CLI run against real NVD API (opt-in, --run-e2e)
डिज़ाइन सिद्धांत
src/enrichers/ में एक नई फ़ाइल चाहिए जो BaseEnricher को सबक्लास करे। कहीं और बदलाव की ज़रूरत नहीं।BaseEnricher.get() एक ही स्थान पर HTTPS-only, होस्ट allow-listing, रीडायरेक्ट ब्लॉकिंग, 429/Retry-After हैंडलिंग, और रिक्वेस्ट बजट कैपिंग लागू करता है।config/keys.env से पढ़ी जाती हैं, सिस्टम एनवायरनमेंट वेरिएबल्स पर फ़ॉलबैक के साथ।--delay) आपको प्रत्येक API की मुफ़्त-टियर सीमाओं के भीतर रखता है।result.errors में संग्रहीत की जाती है; एक विफल API कभी पूरे स्कैन को नहीं गिराता।=, +, -, @ उपसर्ग) के विरुद्ध न्यूट्रलाइज़ किए जाते हैं।# Run all unit and integration tests (no network required)
pytest tests/ -v --ignore=tests/test_cli_e2e.py
# With coverage report
pytest tests/ -v --ignore=tests/test_cli_e2e.py --cov=src --cov-report=term-missing
# Run the end-to-end CLI test (makes a real NVD request)
pytest tests/test_cli_e2e.py --run-e2e -v
टर्मिनल:
╭──────────────────────────── IOC Collection ─────────────────────────────╮
│ Found 4 IOCs to investigate │
│ CVE: 1 Domain: 1 Hash: 1 IP: 1 │
╰──────────────────────────────────────────────────────────────────────────╯
✓ Active APIs: abuseipdb, virustotal, otx, shodan, urlscan, nvd
🌐 IP Address Results
┌─────────────────┬──────────────┬──────────┬─────────┬────────────────────┐
│ IP Address │ Verdict │ Abuse % │ Country │ ISP / Org │
├─────────────────┼──────────────┼──────────┼─────────┼────────────────────┤
│ 45.33.32.156 │ Suspicious │ 42 │ US │ Linode │
└─────────────────┴──────────────┴──────────┴─────────┴────────────────────┘
⚠️ CVE Results
┌──────────────────┬──────────┬──────┬──────────────┐
│ CVE ID │ Severity │ CVSS │ Published │
├──────────────────┼──────────┼──────┼──────────────┤
│ CVE-2021-44228 │ Critical │ 10.0 │ 2021-12-10 │
└──────────────────┴──────────┴──────┴──────────────┘
Excel रिपोर्ट: रंग-कोडित निर्णयों के साथ मल्टी-शीट वर्कबुक (🔴 दुर्भावनापूर्ण · 🟡 संदिग्ध · 🟢 स्वच्छ), output/ThreatLens_Report_<timestamp>.xlsx में सहेजी गई
कोई विचार है? एक इश्यू खोलें — योगदान और सुझाव स्वागत योग्य हैं।
योगदान स्वागत और सराहनीय है!
git checkout -b feature/my-featurepytest tests/ -v --ignore=tests/test_cli_e2e.py पास हो और ruff check . स्वच्छ होनए एनरिचर, बग फ़िक्स, दस्तावेज़ीकरण सुधार, और टेस्ट कवरेज सभी बेहतरीन पहले योगदान हैं — एनरिचर कैसे संरचित हैं, यह देखने के लिए आर्किटेक्चर देखें।
यह प्रोजेक्ट PolyForm Noncommercial License 1.0.0 के अंतर्गत लाइसेंस प्राप्त है।
आप व्यक्तिगत, शैक्षिक, या शोध उद्देश्यों के लिए इस कोड का उपयोग, अध्ययन, संशोधन, और साझा करने के लिए स्वतंत्र हैं। लेखक ([email protected]) की पूर्व लिखित अनुमति के बिना व्यावसायिक उपयोग की अनुमति नहीं है।
यह टूल केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए है। एकीकृत APIs की सेवा शर्तों और सभी लागू कानूनों का पालन करने की एकमात्र ज़िम्मेदारी उपयोगकर्ता की है। लेखक कोई दायित्व स्वीकार नहीं करता और इस प्रोग्राम के किसी भी दुरुपयोग, अवैध गतिविधि, या क्षति के लिए ज़िम्मेदार नहीं है।
अगर ThreatLens ने आपका समय बचाया, तो इसे एक ⭐ देने पर विचार करें — यह दूसरों को प्रोजेक्ट खोजने में मदद करता है।
|
ThreatLens क्यों
|
इसके लिए नहीं
|
| विशेषता | विवरण |
|---|
| 🎯 IOC प्रकार | IP, डोमेन, URL, फ़ाइल हैश (MD5 / SHA1 / SHA256), CVE |
| 🔌 एकीकृत APIs | AbuseIPDB, VirusTotal, AlienVault OTX, Shodan, URLScan.io, NVD |
| 📄 लॉग पार्सिंग | किसी भी लॉग या टेक्स्ट फ़ाइल से हर IOC प्रकार स्वतः निकालता है |
| 📊 रिपोर्ट | Excel (रंग-कोडित), JSON, CSV |
| 💾 स्थानीय कैश | कॉन्फ़िगर करने योग्य TTL के साथ SQLite कैश — ज्ञात IOCs को दोबारा क्वेरी करना छोड़ें |
| 🛡️ सुरक्षा | रीडायरेक्ट ब्लॉकिंग, होस्ट allow-listing, लॉग्स में API-key redaction, स्प्रेडशीट-फ़ॉर्मूला न्यूट्रलाइज़ेशन |
| 🔒 लॉकफ़ाइल | पुनरुत्पादक इंस्टॉल के लिए SHA-256 हैश के साथ requirements.lock |
| 💻 CLI अनुभव | Rich प्रोग्रेस बार, रंगीन टेबल, और स्पष्ट निर्णय सारांश |
| 🧩 आर्किटेक्चर | मॉड्यूलर एनरिचर, टाइप्ड मॉडल, चिंताओं का सख्त पृथक्करण |
| ✅ परीक्षित | pytest के साथ 60 यूनिट और इंटीग्रेशन टेस्ट; GitHub Actions के ज़रिए CI |
| ⚡ लचीला | एक विफल API कभी बाकी को नहीं रोकता — त्रुटियाँ अलग और लॉग की जाती हैं |
| बुनियादी एकल-IOC लुकअप |
| एक ही रन में IOC प्रकारों को मिलाएँ और मैच करें |
| कच्चे लॉग्स से सीधे बल्क जाँच |
| पाइपलाइन के लिए मशीन-पठनीय आउटपुट |
| संवर्धन को चयनित स्रोतों तक सीमित करें |
| एक ही रन में Excel + JSON + CSV |
| NIST NVD के ज़रिए CVE संवर्धन (मुफ़्त, कुंजी नहीं) |
| समस्या निवारण के लिए पूर्ण रिक्वेस्ट/रिस्पॉन्स लॉगिंग |
| फ़्लैग | विवरण |
|---|
-i, --ip | जाँच के लिए IP पता/पते |
-d, --domain | जाँच के लिए डोमेन |
-s, --hash | फ़ाइल हैश — MD5 / SHA1 / SHA256 |
-c, --cve | CVE ID, जैसे CVE-2021-44228 |
--file | IOCs स्वतः निकालने के लिए लॉग/टेक्स्ट फ़ाइल का पथ |
--apis | संवर्धन को विशिष्ट APIs के सेट तक सीमित करें |
--format | आउटपुट प्रारूप: excel (डिफ़ॉल्ट) | json | csv | all |
--output | रिपोर्ट सहेजने की निर्देशिका (डिफ़ॉल्ट: ./output) |
--no-report | परिणाम केवल टर्मिनल पर प्रिंट करें, फ़ाइल सहेजना छोड़ें |
--cache-path | स्थानीय कैश के लिए SQLite पथ (डिफ़ॉल्ट: .threatlens/investigations.db) |
--cache-ttl | कैश जीवनकाल सेकंड में (डिफ़ॉल्ट: 3600) |
--no-cache | स्थानीय कैश को पूरी तरह बायपास करें |
--max-requests | प्रति रन बाहरी API कॉल की सीमा (डिफ़ॉल्ट: 250) |
--max-iocs | प्रति रन अधिकतम अद्वितीय IOCs (डिफ़ॉल्ट: 1000) |
--allow-private-iocs | निजी/लूपबैक IPs की अनुमति दें (डिफ़ॉल्ट रूप से अक्षम) |
--delay | दर-सीमा ट्यूनिंग के लिए API कॉल के बीच विलंब |
-v, --verbose | डिबग लॉगिंग सक्षम करें |
| प्रदाता | साइन अप | मुफ़्त टियर |
|---|
| AbuseIPDB | मुफ़्त | 1,000 जाँच/दिन |
| VirusTotal | मुफ़्त | 4 req/min · 500 req/day |
| AlienVault OTX | मुफ़्त | असीमित (सार्वजनिक फ़ीड) |
| Shodan | मुफ़्त | सीमित लुकअप |
| URLScan.io | मुफ़्त | 5,000 req/day (खोज मुफ़्त है) |
| NVD / NIST | वैकल्पिक | कुंजी की आवश्यकता नहीं |
| टेस्ट फ़ाइल | कवरेज |
|---|
test_core.py | IOC पार्सर (सभी प्रकार + एज केस), निर्णय लॉजिक, SQLite कैश राउंड-ट्रिप |
test_enrichers.py | BaseEnricher.get() — रीडायरेक्ट ब्लॉकिंग, बजट समाप्ति, 429+Retry-After, लॉग्स में API-key redaction, गैर-JSON रिस्पॉन्स, अमान्य JSON, होस्ट allow-list, HTTP स्कीम ब्लॉक |
test_reporters.py | Excel और CSV फ़ॉर्मूला-इंजेक्शन न्यूट्रलाइज़ेशन (7 उपसर्ग वेरिएंट), संख्यात्मक पासथ्रू, SQLite TTL समाप्ति, upsert, जाँच रिकॉर्डिंग |
test_cli_e2e.py | पूर्ण सबप्रोसेस रन: python main.py -c CVE-2021-44228 --apis nvd --format json → exit 0, वैध JSON, सही निर्णय |
| नियंत्रण | कार्यान्वयन |
|---|
| केवल HTTPS | BaseEnricher.get() अनुरोध करने से पहले किसी भी गैर-https:// URL को अस्वीकार करता है |
| होस्ट allow-list | प्रत्येक एनरिचर allowed_hosts घोषित करता है; अज्ञात होस्ट के अनुरोध चुपचाप छोड़ दिए जाते हैं |
| रीडायरेक्ट ब्लॉकिंग | सभी अनुरोध allow_redirects=False का उपयोग करते हैं |
| 429 / Retry-After | Retry-After हेडर का सम्मान करते हुए एकल स्वचालित पुनःप्रयास (15 s तक सीमित) |
| रिक्वेस्ट बजट | --max-requests प्रति रन कुल API कॉल को कठोरता से सीमित करता है |
| API-key redaction | अपवादों और लॉग पंक्तियों में कच्चे कुंजी मान [REDACTED] से बदल दिए जाते हैं |
| फ़ॉर्मूला इंजेक्शन | सभी Excel और CSV सेल मान spreadsheet_value() से सैनिटाइज़ किए जाते हैं |
| IOC सत्यापन | CLI से दिया गया प्रत्येक IOC संवर्धन से पहले सत्यापित और सामान्यीकृत किया जाता है |
| निजी IP गार्ड | निजी/लूपबैक पते डिफ़ॉल्ट रूप से अस्वीकार किए जाते हैं (ओवरराइड के लिए --allow-private-iocs) |
| डिपेंडेंसी ऑडिट | CI में pip-audit चलता है; requirements.lock पुनरुत्पादक इंस्टॉल के लिए सभी हैश पिन करता है |