
PhishCollector एक शोध ढांचा है जो फ़िशिंग साइटों को एकत्र करने, विश्लेषण करने और ट्रैक करने के लिए है।
PhishCollector एक शोध ढांचा है जो फिशिंग साइटों को इकट्ठा करने, विश्लेषण करने और ट्रैक करने के लिए है। इसे जानबूझकर एक शुरुआती बिंदु के रूप में डिज़ाइन किया गया है — डिटेक्शन नियम, टेक्नोलॉजी सिग्नेचर, वर्डलिस्ट और प्लगइन्स सभी सादे डेटा संरचनाएँ हैं जिन्हें शोधकर्ताओं को पढ़ने, विस्तार करने और अपने खतरे के परिदृश्य के अनुकूल बनाने की उम्मीद है।
एक संदिग्ध URL सबमिट करें और PhishCollector निम्नलिखित करेगा:
सभी परिणाम REST API, वेब डैशबोर्ड, और CLI के माध्यम से सुलभ हैं।


cp .env.example .env # configure (see below)
docker compose up --build # starts db + app + frontend
| सेवा | URL |
|---|---|
| GUI | http://localhost:3000 |
| API दस्तावेज़ | http://localhost:8000/docs |
| डेटाबेस | localhost:5432 |
सभी सेटिंग्स PHISH_ उपसर्ग वाले पर्यावरण चर हैं। .env.example को .env में कॉपी करें और समायोजित करें।
| चर | डिफ़ॉल्ट | विवरण |
|---|---|---|
PHISH_DATABASE_URL | postgres://… | PostgreSQL DSN |
PHISH_API_KEY | (खाली) | यदि सेट किया गया है, तो सभी अनुरोधों के लिए X-API-Key: <value> आवश्यक है |
PHISH_DATA_DIR | /data | स्क्रीनशॉट, HTML, एसेट्स के लिए भंडारण रूट |
PHISH_BROWSER_TIMEOUT | 30000 | पेज लोड टाइमआउट (मिलीसेकंड में) |
PHISH_REQUEST_TIMEOUT | 15 | HTTP उप-अनुरोध टाइमआउट (सेकंड में) |
PHISH_MAX_SPIDER_PAGES | 50 | प्रति कार्य स्पाइडर द्वारा देखी जाने वाली अधिकतम URL |
PHISH_MAX_ASSET_SIZE | 10485760 | स्टोर करने के लिए अधिकतम JS/CSS फ़ाइल आकार (बाइट्स) |
PHISH_PROXY_URL | (खाली) | आउटबाउंड प्रॉक्सी — नीचे देखें |
PHISH_PROXY_SSL_VERIFY | true | इंटरसेप्टिंग प्रॉक्सी के लिए false सेट करें — नीचे देखें |
PHISH_URLHAUS_ENABLED | false | URLhaus प्रतिष्ठा जाँच सक्षम करें |
PHISH_VIRUSTOTAL_API_KEY | (खाली) | VirusTotal v3 API कुंजी (अक्षम करने के लिए खाली छोड़ें) |
सभी आउटबाउंड ट्रैफ़िक को प्रॉक्सी के माध्यम से रूट करने से विश्लेषक का IP फिशिंग सर्वर से छिपा रहता है।
PHISH_PROXY_URL=socks5://127.0.0.1:9050
PHISH_PROXY_SSL_VERIFY=true # Tor does not intercept TLS
Burp TLS मैन-इन-द-मिडल के रूप में कार्य करता है और प्रत्येक HTTPS कनेक्शन के लिए अपना CA प्रमाणपत्र प्रस्तुत करता है। SSL सत्यापन को अक्षम किए बिना प्रॉक्सी के माध्यम से प्रत्येक HTTPS अनुरोध विफल हो जाएगा।
PHISH_PROXY_URL=http://127.0.0.1:8080
PHISH_PROXY_SSL_VERIFY=false # required for Burp / intercepting proxies
ध्यान दें:
PHISH_PROXY_SSL_VERIFY=falseकेवल Python बैकएंड (प्लगइन्स, फिंगरप्रिंटर, स्पाइडर) द्वारा किए गए आउटबाउंड HTTPS कनेक्शनों को प्रभावित करता है। Playwright ब्राउज़र पहले से ही इस सेटिंग की परवाह किए बिनाignore_https_errors=trueके साथ काम करता है।
चेतावनी: प्रॉक्सी कॉन्फ़िगर किए बिना कभी भी
PHISH_PROXY_SSL_VERIFY=falseसेट न करें — यह बाहरी API कॉल (URLhaus, VirusTotal) के लिए प्रमाणपत्र सत्यापन को अक्षम कर देगा।
आधार पथ: /api/v1
| विधि | पथ | विवरण |
|---|---|---|
POST | /collections | संग्रह के लिए URL सबमिट करें |
GET | /collections | सभी संग्रहों की सूची |
GET | /collections/{id} | पूर्ण विवरण + फिंगरप्रिंट |
GET | /collections/{id}/screenshot | पूर्ण-पृष्ठ PNG |
GET | /collections/{id}/html | कैप्चर की गई HTML (सादे पाठ के रूप में डाउनलोड करें) |
GET | /collections/{id}/requests | नेटवर्क अनुरोध लॉग |
GET | /collections/{id}/spider | स्पाइडर परिणाम |
GET | /collections/{id}/plugins | थ्रेट-इंटेल प्लगइन परिणाम |
POST | /collections/{id}/plugins/refresh | प्लगइन्स को फिर से चलाएँ (जैसे लंबित VT परिणाम प्राप्त करें) |
POST | /collections/{id}/rescan | उसी URL को फिर से एकत्र करें (मूल संरक्षित रहता है) |
PATCH | /collections/{id} | टैग और नोट्स अपडेट करें |
GET | /collections/{id}/export?format=json|csv | संग्रह डेटा निर्यात करें |
DELETE | /collections/{id} | एक संग्रह और उसके सभी आर्टिफैक्ट्स को हटाएँ |
GET | /search | IP, फ़ेविकॉन हैश, टेक्नोलॉजी, देश, शीर्षक द्वारा फिंगरप्रिंट खोजें |
पूर्ण इंटरैक्टिव दस्तावेज़ /docs पर (Swagger UI)।
curl -X POST http://localhost:8000/api/v1/collections \
-H 'Content-Type: application/json' \
-d '{"url": "https://suspicious-site.example.com", "use_wordlist": true}'
# Install (inside container or local venv with requirements.txt)
pip install -e .
# Submit a URL and wait for completion
phishcollector collect https://target.example.com --wait
# With wordlist fuzzing
phishcollector collect https://target.example.com --wordlist --wait
# List recent jobs
phishcollector list
# View full detail
phishcollector detail <job-id>
# Download screenshot
phishcollector screenshot <job-id> -o capture.png
# Search by tech stack / favicon hash / country
phishcollector search --tech WordPress --country RU
phishcollector search --favicon-hash -1234567890
इसके लिए auth.abuse.ch से मुफ्त Auth-Key आवश्यक है।
PHISH_URLHAUS_ENABLED=true
PHISH_URLHAUS_API_KEY=<your-auth-key>
इसके लिए virustotal.com से मुफ्त या भुगतान वाली API key आवश्यक है।
PHISH_VIRUSTOTAL_API_KEY=<your-key>
जब किसी URL का VT द्वारा अभी तक विश्लेषण नहीं किया गया है, तो PhishCollector इसे स्कैनिंग के लिए सबमिट करता है और परिणाम प्राप्त होने तक हर 30 सेकंड में स्वचालित रूप से पुनः प्राप्त करता है।
प्रत्येक प्लगइन phishcollector/plugins/ में एक एकल फ़ाइल है जो एक async फ़ंक्शन प्रदान करता है:
# phishcollector/plugins/myplugin.py
from . import CheckResult
async def check(url: str, proxy_url=None, ssl_verify=True) -> CheckResult:
# query your feed / API here
return CheckResult(
plugin_name="myplugin",
status="malicious", # malicious | suspicious | clean | unknown | error
score=0.95, # 0.0–1.0, or None
result={"raw": ...}, # stored as JSONB, displayed in the GUI
)
फिर इसे phishcollector/plugins/runner.py में पंजीकृत करें:
from .myplugin import check as myplugin_check
tasks.append(myplugin_check(url, proxy_url=settings.proxy_url, ssl_verify=settings.proxy_ssl_verify))
किसी अन्य बदलाव की आवश्यकता नहीं है — परिणाम स्वचालित रूप से संग्रहीत होता है, डैशबोर्ड में प्रदर्शित होता है, और खतरे के स्कोर में शामिल किया जाता है।
डिटेक्शन इंजन को जानबूझकर सादे, पठनीय डेटा के रूप में रखा गया है ताकि शोधकर्ता इसे अपने ट्रैक किए जा रहे किट और अभियानों के अनुसार ट्यून कर सकें। सब कुछ एक फ़ाइल में रहता है:
phishcollector/collector/fingerprint.py
PHISHING_PATTERNS — रेंडर की गई HTML + JS के विरुद्ध स्कैन किए गए रेगेक्स नियम