
स्व-होस्टेड नेटवर्क खोज और सर्च इंजन जिसमें निरंतर पोर्ट स्कैनिंग, लगभग 100 सेवाओं में गहन प्रोटोकॉल जांच, स्थानीय CVE मिलान, और बुनियादी ढांचे के इन्वेंट्री और जोखिम निगरानी के लिए पूर्ण-पाठ खोज शामिल है।
सेल्फ-होस्टेड नेटवर्क डिस्कवरी और खोज — आपका अपना Shodan, आपके हार्डवेयर पर।
TCP/UDP स्कैनिंग · ~100 प्रोटोकॉल प्रोब · TLS/JARM फ़िंगरप्रिंट · CVE मिलान · फुल-टेक्स्ट खोज · डेल्टा ट्रैकिंग · अलर्ट
त्वरित आरंभ · विशेषताएँ · आर्किटेक्चर · दस्तावेज़ीकरण · प्रोडक्शन चेकलिस्ट
महत्वपूर्ण। केवल उन्हीं नेटवर्कों को स्कैन करें जिनके आप मालिक हैं या जिन्हें स्कैन करने के लिए आपके पास लिखित प्राधिकरण है। UltraViolet निष्क्रिय सेवा टोही करता है — यह कमज़ोरियों का शोषण नहीं करता।
| यूज़ केस | आपको क्या मिलता है |
|---|
सिंगल टेनेंट, एक Docker Compose स्टैक, आपके डेटा पर पूर्ण नियंत्रण।
डिस्कवरी
SCAN_ALLOWED_CIDRS द्वारा स्कोप किया गयाडीप प्रोब (~100 प्रोटोकॉल)
robots.txt, security.txt, टेक स्टैकएनरिचमेंट
CVE और जोखिम
ऑपरेशन
viewer / operator / admin), JWT + रिफ्रेश टोकन/metrics, वैकल्पिक Grafana प्रोफ़ाइलflowchart TB
Browser["Browser"]
FE["service-frontend<br/>React + nginx"]
API["uv-api<br/>REST · WS · metrics"]
PG[("PostgreSQL 16")]
SCAN["uv-scanner<br/>probe pipeline"]
Browser --> FE
FE -->|"/api"| API
FE -->|"/realtime"| API
API <--> PG
SCAN <--> PG
API -.->|LISTEN/NOTIFY| API
रिलीज़ UI इमेज /api/ और /realtime को uv-api पर प्रॉक्सी करती है — सिंगल ऑरिजिन, प्रति API URL फ्रंटएंड रीबिल्ड की आवश्यकता नहीं।
बैकएंड डेवलपमेंट नियम: CLAUDE.md।
आवश्यकताएँ: Go 1.25+, Docker Engine ≥ 24, ~4 GB RAM। प्रोडक्शन इमेज Linux amd64 के लिए हैं।
शुरुआती मार्ग — प्रकाशित इमेज को service-env/docker-compose.registry.yml से पुल करें:
cd service-env
cp env.registry.example .env
# set POSTGRES_PASSWORD, AUTH_JWT_SECRET, AUTH_BOOTSTRAP_PASSWORD
mkdir -p geoip catalog-seed
docker compose -f docker-compose.registry.yml pull
docker compose -f docker-compose.registry.yml up -d
# UI → http://localhost:3000
दस्तावेज़ साइट में Docker Registry देखें।
API/स्कैनर इमेज service-api/bin/ से प्रीबिल्ट बाइनरी कॉपी करती हैं (उन्हें Docker के अंदर कंपाइल नहीं किया जाता)। make dev, docker compose … --build से पहले make -C service-api build-linux चलाता है।
git clone https://github.com/yakushstanislav/UltraViolet.git
cd UltraViolet/service-env
cp .env.example .env
mkdir -p secrets
openssl rand -hex 32 > secrets/postgres_password
openssl rand -hex 32 > secrets/auth_jwt_secret
cd ..
make dev
| URL | उद्देश्य |
|---|---|
| http://localhost:3000 | UI (nginx /api/ के माध्यम से API) |
| http://localhost:8080 | API सीधे |
डेव बूटस्ट्रैप: admin / admin (केवल जब APP_ENV≠production हो)।
संपूर्ण गाइड — VitePress service-documentation-frontend/docs/ में:
make docs-dev # → http://localhost:5173
प्रोडक्शन में, docs प्रोफ़ाइल सक्षम करें:
cd service-env && docker compose --profile docs up -d
# → http://localhost:${UV_DOCUMENTATION_PORT:-3002}
मुख्य अनुभाग: इंस्टॉलेशन · स्कैनिंग · API · डिप्लॉयमेंट · ऑफ़लाइन इंस्टॉल।
make dev # build-linux → compose prod + dev override --build
बैकएंड बदलावों के बाद Go बाइनरी फिर से बिल्ड करें (make -C service-api build-linux), फिर रीस्टार्ट करें या make dev दोबारा चलाएँ।
make dev-db # PostgreSQL only on :5432
cd service-api && make build
export LOGGER_NAME=uv-api LOGGER_DEBUG=true
export SERVER_ADDR=0.0.0.0 SERVER_PORT=8080
export METRICS_ADDR=0.0.0.0 METRICS_PORT=9090
export REALTIME_ADDR=0.0.0.0 REALTIME_PORT=8081
export POSTGRES_ADDR=localhost POSTGRES_PORT=5432
export POSTGRES_USERNAME=ultraviolet
export POSTGRES_PASSWORD="$(cat ../service-env/secrets/postgres_password)"
export POSTGRES_DATABASE=ultraviolet
export POSTGRES_SCHEMA_PATH="$(pwd)/deploy/migrations"
export AUTH_JWT_SECRET="$(cat ../service-env/secrets/auth_jwt_secret)"
./bin/uv-api
फ्रंटएंड: cd service-frontend && npm run dev (Vite /api → :8080 और /realtime → :8081 प्रॉक्सी करता है)।
cd service-env && make geoip-download # IPLocate MMDB → geoip/
make -C service-env cve-catalog-dump # CVE dump (requires running postgres)
make build && make lint && make frontend-build && make docs-build
लक्षित प्लेटफ़ॉर्म: linux/amd64। Apple Silicon पर, ऑफ़लाइन आर्काइव के लिए DOCKER_PLATFORM=linux/amd64 सेट करें।
git tag v0.1.0
make release VERSION=v0.1.0
make release-promote VERSION=v0.1.0 # :latest — required for local releases; GitHub Actions does this automatically
| आर्काइव | सामग्री |
|---|---|
ultraviolet-vX.Y.Z.tar.gz | compose, स्क्रिप्ट, .env.example (~50 KB, ऑनलाइन) |
ultraviolet-vX.Y.Z-offline.tar.gz | + amd64 Docker इमेज |
ultraviolet-vX.Y.Z-offline-full.tar.gz | + CVE सीड + GeoIP MMDB |
ऑनलाइन: एक्सट्रैक्ट करें → cp .env.example .env → ./install.sh (registry से पुल करें)।
ऑफ़लाइन: ./install.sh (docker load, कोई पुल नहीं)। अपग्रेड: .env, secrets/ और Postgres वॉल्यूम रखें → ./upgrade.sh।
वेरिएबल: UV_REGISTRY (डिफ़ॉल्ट docker.io/styakush), DRY_RUN=1 — पुश के बिना लोकल स्मोक बिल्ड।
# from the build machine
scp dist/ultraviolet-v0.1.0-offline.tar.gz user@host:~/
# on the server (Docker ≥ 24, amd64)
tar xzf ultraviolet-v0.1.0-offline.tar.gz && cd ultraviolet-v0.1.0
cp .env.example .env
./install.sh
अपग्रेड (डेटा सुरक्षित रखें):
docker compose -f docker-compose.yml down
# back up .env + secrets/, extract the new archive, run ./upgrade.sh
डायरेक्ट्री का नाम (ultraviolet-v0.1.0) स्थिर रखें — postgres-data Docker वॉल्यूम इसी से जुड़ा है।
secrets/ में रखें, git में कभी नहीं।CORS_ALLOWED_ORIGINS को केवल वास्तविक UI ऑरिजिन पर सेट करें।SCAN_ALLOWED_CIDRS और होस्ट/पोर्ट सीमाएँ कॉन्फ़िगर करें।AUTH_JWT_SECRET बदलें (install.sh प्लेसहोल्डर अस्वीकार करता है)।APP_ENV=production सेट करें — uv-api admin/admin और 8 अक्षरों से छोटे पासवर्ड अस्वीकार करता है।service-env/examples/nginx-tls.conf।AUDIT_TRUST_PROXY_HEADERS=true सेट करें।service-env/scripts/backup.sh + cron; upgrade.sh भी एक डंप बनाता है।बाहरी nginx पर TLS टर्मिनेशन — UI को केवल loopback से बाइंड करें:
# docker-compose.override.yml
services:
service-frontend:
ports:
- "127.0.0.1:3000:8080"
CORS_ALLOWED_ORIGINS=https://ultraviolet.example.com
AUDIT_TRUST_PROXY_HEADERS=true
सब-पाथ (/ultraviolet/):
VITE_BASE_PATH=/ultraviolet/ make frontend-build
# UV_BASE_PATH=/ultraviolet/ in compose — must match VITE_BASE_PATH
बैकअप cron (दैनिक, 14-दिन रिटेंशन):
0 3 * * * cd /opt/ultraviolet/service-env && ./scripts/backup.sh && find backups -name 'uv-*.dump' -mtime +14 -delete
GeoIP रिफ्रेश (हर महीने की 1 तारीख को):
0 4 1 * * cd /opt/ultraviolet/service-env && ./scripts/geoip-refresh.sh >> /var/log/uv-geoip.log 2>&1
POST /v1/auth/login के बाद आपको access_token (Bearer) और refresh_token (/v1/auth/refresh) प्राप्त होता है।
| भूमिका | क्षमताएँ |
|---|---|
viewer | होस्ट पढ़ना, खोज, CVE, डैशबोर्ड |
operator | + स्कैन शुरू करना और प्रबंधित करना |
admin | + उपयोगकर्ता, ऑडिट, सेटिंग्स |
GET /v1/me · GET /v1/version · GET /readyz (हेल्थ + वर्जन + कमिट)।
देखें CONTRIBUTING.md। सुरक्षा रिपोर्ट: SECURITY.md। सामुदायिक मानक: CODE_OF_CONDUCT.md।
UltraViolet MIT लाइसेंस के अंतर्गत जारी किया गया है।
UltraViolet — जानें कि आपके पास क्या है, समझें कि क्या बदला, और इसे अपने नेटवर्क पर ही रखें।
| Perimeter और इन्वेंट्री | CIDR रेंज में खुले पोर्ट और सेवाओं की निरंतर डिस्कवरी |
| इन्फ्रास्ट्रक्चर खोज | HTTP बॉडी, बैनर, TLS, DNS और CVE पर फुल-टेक्स्ट खोज |
| जोखिम और अनुपालन | स्थानीय NVD मिलान के साथ CISA KEV और EPSS — कोई क्लाउड निर्भरता नहीं |
| एयर-गैप्ड डिप्लॉयमेंट | डिस्क पर Docker इमेज, CVE सीड और GeoIP MMDB के साथ ऑफ़लाइन आर्काइव |
| परिवर्तन ट्रैकिंग | स्कैन के बीच डेल्टा, WebSocket इवेंट, सहेजी गई खोजों पर अलर्ट |
| डायरेक्ट्री | उद्देश्य |
|---|
service-api/ | Go: uv-api (HTTP API, WebSocket, वर्कर्स) + uv-scanner (पाइपलाइन) |
service-frontend/ | React 19 + Vite + RTK — स्कैन, होस्ट, खोज, डैशबोर्ड |
service-documentation-frontend/ | VitePress — उपयोगकर्ता और ऑपरेटर दस्तावेज़ीकरण |
service-env/ | docker-compose, secrets, install.sh / upgrade.sh / बैकअप |
| http://localhost:9090/metrics |
| Prometheus |
:9090/metrics पर; Grafana observability प्रोफ़ाइल के माध्यम से।service-env/scripts/geoip-refresh.sh मासिक cron पर।