{"id":50782684,"url":"https://github.com/arumes31/whois","last_synced_at":"2026-06-12T05:01:22.550Z","repository":{"id":286484414,"uuid":"952198452","full_name":"arumes31/whois","owner":"arumes31","description":"High-performance network diagnostics \u0026 discovery platform. Features DNS-over-HTTPS (DoH), WHOIS/RDAP, GeoIP, subdomain discovery, and port scanning with live WebSocket streaming.","archived":false,"fork":false,"pushed_at":"2026-06-10T14:09:48.000Z","size":97136,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-10T16:08:03.391Z","etag":null,"topics":["dns-over-https","echo-framework","geoip","golang","htmx","network-diagnostics","port-scanner","subdomain-discovery","websocket","whois"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arumes31.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-20T22:24:35.000Z","updated_at":"2026-06-10T14:13:41.000Z","dependencies_parsed_at":"2025-04-06T19:28:19.828Z","dependency_job_id":"4bfeb8d4-da51-43bf-af1c-32a9b46cbe8d","html_url":"https://github.com/arumes31/whois","commit_stats":null,"previous_names":["arumes31/whois"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arumes31/whois","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arumes31%2Fwhois","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arumes31%2Fwhois/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arumes31%2Fwhois/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arumes31%2Fwhois/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arumes31","download_url":"https://codeload.github.com/arumes31/whois/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arumes31%2Fwhois/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34229624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns-over-https","echo-framework","geoip","golang","htmx","network-diagnostics","port-scanner","subdomain-discovery","websocket","whois"],"created_at":"2026-06-12T05:01:21.653Z","updated_at":"2026-06-12T05:01:22.525Z","avatar_url":"https://github.com/arumes31.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WHOIS | Network Diagnostics \u0026 Discovery\n\n[![Go-CI](https://github.com/arumes31/whois/actions/workflows/go-ci.yml/badge.svg)](https://github.com/arumes31/whois/actions/workflows/go-ci.yml)\n[![Build and Publish Docker Image](https://github.com/arumes31/whois/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/arumes31/whois/actions/workflows/docker-publish.yml)\n[![Daily Security Scan](https://github.com/arumes31/whois/actions/workflows/security-scan.yml/badge.svg)](https://github.com/arumes31/whois/actions/workflows/security-scan.yml)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/arumes31/whois/test)](https://golang.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Issues](https://img.shields.io/github/issues/arumes31/whois)](https://github.com/arumes31/whois/issues)\n[![Last Commit](https://img.shields.io/github/last-commit/arumes31/whois/test)](https://github.com/arumes31/whois/commits/test)\n\nA high-performance, professional-grade network diagnostic platform designed for deep reconnaissance and system monitoring. Featuring a modern **Copper/Brass Steampunk** aesthetic with a glassmorphism layout, it provides real-time, multi-vector analysis for IT professionals and security researchers.\n\n## 🚀 Core Capabilities\n\n- 🔍 **Multi-Vector LOOKUP:** Comprehensive analysis including WHOIS data, advanced DNS resolution (A, AAAA, MX, NS, TXT, SPF, DMARC), and GeoIP geolocation.\n- 🌐 **Subdomain Discovery:** Uses multi-source Certificate Transparency (CT) logs (Certspotter primary, crt.sh fallback) with real-time incremental streaming.\n- 🛡️ **Security Port Scanner:** Specialized tool for open port detection and service banner grabbing with localized security controls.\n- 📡 **Live WebSocket Streaming:** Diagnostic results and discovery events are pushed individually as they complete, ensuring zero-latency feedback.\n- 📈 **Automated Monitoring:** Periodic DNS health checks with change detection and unified diff history.\n- 📦 **100% Self-Contained:** All assets (CSS, JS, Fonts) are hosted locally. Zero external CDNs required—ideal for isolated or air-gapped networks.\n\n## 🏗️ Technical Architecture\n\n```mermaid\ngraph TD\n    User((User)) --\u003e|HTMX / WebSocket| FE[Frontend: Bootstrap 5 / JS]\n    subgraph \"Go Diagnostic Engine (Echo Framework)\"\n        FE --\u003e|Requests| Handler[Echo API Handlers]\n        Handler --\u003e|Concurrent Execution| Svc[Service Layer]\n        Svc --\u003e|DoH / UDP| DNS[DNS Service]\n        Svc --\u003e|RDAP / P43| WHOIS[WHOIS Service]\n        Svc --\u003e|HTTPS| CT[CT Log Service]\n        Svc --\u003e|TCP| Scan[Scanner Service]\n        Svc --\u003e|GeoIP| Geo[GeoIP Service]\n    end\n    Svc --\u003e|Store History| Cache[Redis Storage]\n    Scheduler[Cron Scheduler] --\u003e|Periodic Tasks| Svc\n```\n\n### Technical Highlights\n*   **Echo Framework:** Leverages a high-performance, minimalist Go web framework for optimized routing and middleware management.\n*   **HTMX v2:** Enables a reactive, SPA-like user experience using pure HTML attributes, minimizing client-side JavaScript complexity.\n*   **Concurrency:** Built on Go's goroutine model with strict `context.Context` lifecycle management for safe, parallel diagnostic execution.\n*   **DNS over HTTPS (DoH):** Implements secure, encrypted DNS queries with automatic load balancing across providers (Cloudflare, Google, Quad9).\n\n## 🛠️ Tech Stack\n\n| Layer | Technologies |\n|---|---|\n| **Backend** | Go (1.24+), Echo v4, Zap Logging |\n| **Frontend** | HTMX, Bootstrap 5, Tippy.js, Prism.js |\n| **Storage** | Redis (with optimized `SCAN` iterators) |\n| **Networking** | DoH (DNS-over-HTTPS), RDAP, ICMP, TCP |\n| **DevOps** | Docker, GitHub Actions, golangci-lint |\n\n## 📦 Installation \u0026 Setup\n\n### Docker Compose (Recommended)\n```bash\ndocker compose up -d\n```\nAccess the dashboard at `http://localhost:14400`.\n\n### Reverse Proxy Configuration (Nginx)\nIf you are running behind Nginx, you **must** ensure WebSocket headers are forwarded correctly:\n```nginx\nlocation / {\n    proxy_pass http://localhost:14400;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-Host $host;\n}\n```\n\n### Environment Configuration\n\n#### 🛡️ Core \u0026 Security\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `SECRET_KEY` | **Required**. Key for session encryption and CSRF protection (do not use default values in production) | - |\n| `SEO_ENABLED` | Enable SEO optimizations and dynamic metadata | `false` |\n| `SEO_DOMAIN` | Canonical domain for SEO indexing | - |\n| `ALLOWED_DOMAIN` | Base domain allowed for WebSocket connections | - |\n| `WS_SKIP_ORIGIN_CHECK` | Completely disable WebSocket origin validation | `false` |\n| `CONFIG_USER` | Administrator username for restricted tools (configured via environment or .env) | `admin` |\n| `CONFIG_PASS` | Administrator passcode for restricted tools (configured via environment or .env) | `admin` |\n| `ENVIRONMENT` | Run environment (set to `development` for wildcard CORS, otherwise restricted) | `development` |\n| `ALLOW_DEV_CORS` | Force-allow wildcard CORS even in non-development environment | `false` |\n| `TRUSTED_IPS` | CSV of IPs allowed to access `/metrics` | `127.0.0.1,::1,...` |\n| `TRUST_PROXY` | Trust `X-Forwarded-For` headers | `true` |\n| `USE_CLOUDFLARE` | Use `CF-Connecting-IP` for client identification | `false` |\n\n#### 📡 DNS \u0026 Networking\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `DNS_SERVERS` | CSV of DoH resolvers used for multi-vector lookups | `Cloudflare, Google, Quad9` |\n| `BOOTSTRAP_DNS` | DNS used to resolve the hostnames of DoH providers | `1.1.1.1, 9.9.9.9` |\n| `DNS_RESOLVER` | Standard UDP resolver used for discovery modules | `8.8.8.8:53` |\n| `PORT` | Local port the web server listens on | `5000` |\n| `REDIS_HOST` | Hostname of the Redis server | `localhost` |\n| `REDIS_PORT` | Port of the Redis server | `6379` |\n\n#### 🔍 Diagnostic Features\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `ENABLE_GEO` | Enable GeoIP and ASN lookup features | `true` |\n| `ENABLE_DNS` | Enable authoritative DNS record retrieval | `true` |\n| `ENABLE_WHOIS` | Enable WHOIS and RDAP data retrieval | `true` |\n| `ENABLE_SSL` | Enable SSL/TLS certificate analysis | `true` |\n| `ENABLE_HTTP` | Enable HTTP security header inspection | `true` |\n| `ENABLE_CT` | Enable Certificate Transparency log discovery | `true` |\n\n#### 🌍 External API Keys\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `MAXMIND_ACCOUNT_ID` | MaxMind Account ID for GeoIP database updates | - |\n| `MAXMIND_LICENSE_KEY` | MaxMind License Key for GeoIP database updates | - |\n\n## 🔄 Development Lifecycle\n\n### Automated Workflow\nThis project utilizes **Conventional Commits** and automated maintenance tools:\n*   **Changelog:** Automatically generated via `git-cliff` on every push to the `test` branch.\n*   **Linting:** Strictly enforced `golangci-lint` standards.\n*   **Testing:** High-parallelism test suite covering all core services.\n\n```bash\n# Run tests\ngo test -v ./...\n\n# Run linter\ngo run github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.5 run\n```\n\n## ⚖️ Compliance \u0026 Security\nThis tool is intended for authorized network diagnostics and research. Users are responsible for complying with local regulations. The platform includes a mandatory **Security \u0026 Legal Disclosure** system to ensure users acknowledge terms of use before proceeding.\n\n---\n*Built with ❤️ using Go and HTMX.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farumes31%2Fwhois","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farumes31%2Fwhois","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farumes31%2Fwhois/lists"}