{"id":51873849,"url":"https://github.com/francomano/proxydoctor","last_synced_at":"2026-07-27T06:00:32.533Z","repository":{"id":373037100,"uuid":"1307031671","full_name":"francomano/ProxyDoctor","owner":"francomano","description":"Lightweight Go tool for running network diagnostics through proxies — compare direct vs proxied connections, detect DNS/TLS/IP leaks","archived":false,"fork":false,"pushed_at":"2026-07-25T23:52:04.000Z","size":6251,"stargazers_count":1,"open_issues_count":17,"forks_count":4,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-26T05:14:18.180Z","etag":null,"topics":["cli","developer-tools","devtools","diagnostics","dns-leak","go","good-first-issue","http","ip-leak","networking","open-source","privacy","proxy","security","sock5","socks5","tls","vpn"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/francomano.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2026-07-20T21:32:41.000Z","updated_at":"2026-07-26T00:16:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/francomano/ProxyDoctor","commit_stats":null,"previous_names":["francomano/proxydoctor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/francomano/ProxyDoctor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francomano%2FProxyDoctor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francomano%2FProxyDoctor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francomano%2FProxyDoctor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francomano%2FProxyDoctor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/francomano","download_url":"https://codeload.github.com/francomano/ProxyDoctor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francomano%2FProxyDoctor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35938859,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"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":["cli","developer-tools","devtools","diagnostics","dns-leak","go","good-first-issue","http","ip-leak","networking","open-source","privacy","proxy","security","sock5","socks5","tls","vpn"],"created_at":"2026-07-25T04:00:47.164Z","updated_at":"2026-07-27T06:00:32.503Z","avatar_url":"https://github.com/francomano.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ProxyDoctor — Proxy Diagnostics\n\n**A minimal, testable Go tool for running network diagnostics through proxies**\n\n[![License: GPL-3.0](https://img.shields.io/badge/license-GPL--3.0-blue.svg)](LICENSE)\n[![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](CONTRIBUTING.md)\n[![Good First Issue](https://img.shields.io/badge/good%20first-issue-brightgreen.svg)](https://github.com/francomano/ProxyDoctor/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\n[![Go](https://img.shields.io/badge/Go-1.25+-00ADD8.svg?logo=go)](https://go.dev/)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/proxydoctor-logo.png\" alt=\"ProxyDoctor Logo\" width=\"150\"\u003e\n\u003c/p\u003e\n\n\u003e **Built with AI assistance** — This project was developed and documented with contributions from:\n\u003e - **GitHub Copilot** (Auto Mode, inline suggestions)\n\u003e - **OpenCode** with free open-source models (big-pickle / opencode models)\n\u003e - **Google Gemini Pro** (architecture design, code review)\n\n## Why ProxyDoctor?\n\n**The Problem:**\nYou're behind a corporate proxy or using a VPN, and things break mysteriously:\n- Sites don't load (proxy misconfiguration?)\n- Your IP leaks even through a \"private\" proxy\n- You can't tell if the problem is your proxy, DNS, or the site itself\n\n**The Solution:**\nProxyDoctor is a **lightweight diagnostic tool** that:\n- Runs network checks through any proxy (HTTP, HTTPS, SOCKS4, SOCKS5)\n- Compares results between direct connection and proxied connection\n- Identifies which specific layer is failing (DNS? TLS? IP leak?)\n- Gives you actionable insights in seconds\n\n**Perfect for:**\n- Developers debugging proxy issues\n- DevOps engineers troubleshooting VPN connectivity\n- Security teams validating proxy implementations\n- Anyone tired of guessing what's broken\n\n## What It Does\n\nProxyDoctor is a CLI-first tool to:\n- Run network checks (DNS resolution, IP detection, TLS certificate validation, port connectivity)\n- Compare results between direct connections and proxy-routed connections\n- Identify connectivity issues and proxy misconfigurations\n\n## Project Status\n\n**v0.2.0 (Alpha)**\n- ✅ Core engine with check registry and dependency DAG\n- ✅ CLI with diagnose and list-checks commands\n- ✅ HTTP/HTTPS proxy support in `diagnose --proxy`\n- ✅ SOCKS4/SOCKS5 proxy support (full protocol implementation, SOCKS4a domain support, SOCKS5 auth per RFC 1929)\n- ✅ HTTP server wired to the core engine, with a web GUI at `/` and `/api/checks`, `/api/diagnose` JSON endpoints\n- ✅ Web GUI — single-page form at `http://localhost:8080/`, runs a real diagnosis via `POST /api/diagnose` and renders results\n- ✅ 4 built-in checks: public_ip, dns_resolve, tls_certificate, port_connectivity\n- ✅ `--export json` and `--export markdown` (working)\n- ✅ Unit tests (6 passing tests, engine coverage)\n- 🔲 More checks (DNS leak, WebRTC leak, geolocation, IP reputation planned)\n- 🔲 Plugin system (scaffolding in place, not functional)\n\n## Requirements\n\n- **Go** \u003e= 1.25\n- **Git**\n\n## Quick Start\n\n### Setup (first time only)\n\n```bash\ngit clone https://github.com/francomano/proxydoctor\ncd ProxyDoctor\n./setup.sh\n```\n\nThis script will:\n- Verify Go installation\n- Download and verify dependencies\n- Run all tests (6 passing tests)\n- Build CLI and server binaries\n\n### Try the Web GUI\n\n```bash\n# Start the server\n./run.sh server\n\n# Open in browser\nopen http://localhost:8080\n```\n\nFill in the URL (and optionally a proxy + proxy type), hit \"Run diagnosis\" — it runs the same `core/engine.DiagnosisOrchestrator` the CLI uses and renders the results as cards.\n\nTwo JSON endpoints back the GUI, and can be called directly:\n\n```bash\n# List available checks\ncurl http://localhost:8080/api/checks\n\n# Run a diagnosis\ncurl -X POST http://localhost:8080/api/diagnose \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\":\"https://example.com\",\"proxy\":\"socks5://77.245.76.107:1080\",\"proxy_type\":\"socks5\"}'\n```\n\n### Use the CLI\n\n```bash\n# Get help\n./run.sh cli --help\n\n# List available checks\n./run.sh cli list-checks\n\n# Run diagnostics (direct connection)\n./run.sh cli diagnose --url https://example.com\n\n# Run diagnostics through an HTTP proxy\n./run.sh cli diagnose --url https://example.com --proxy http://127.0.0.1:3128 --proxy-type http\n\n# Run diagnostics through a SOCKS5 proxy (with scheme)\n./run.sh cli diagnose --url https://example.com --proxy socks5://127.0.0.1:1080 --proxy-type socks5\n\n# Run diagnostics through a SOCKS5 proxy (bare host:port + type)\n./run.sh cli diagnose --url https://example.com --proxy 127.0.0.1:1080 --proxy-type socks5\n\n# Export results as JSON\n./run.sh cli diagnose --url https://example.com --export json --output report.json\n```\n\n### Run the Server\n\n```bash\n# Start HTTP server on :8080\n./run.sh server\n```\n\n### Run Tests\n\n```bash\n# Run all tests\n./run.sh test\n\n# Or directly\ngo test -v ./...\n```\n\n## File Structure\n\n```\nProxyDoctor/\n├── setup.sh              ← One-time setup (install deps, test, build)\n├── run.sh                ← Convenience launcher (cli, server, test)\n├── cmd/\n│   ├── cli/              ← CLI application (diagnose, list-checks)\n│   └── server/           ← HTTP API server (minimal, stdlib only) + web GUI\n├── core/\n│   ├── engine/           ← Orchestration engine (tests included)\n│   ├── check/            ← Result types and interfaces (tests included)\n│   ├── adapters/         ← Proxy implementations (Direct, HTTP, HTTPS, SOCKS4, SOCKS5)\n│   ├── checks/           ← Diagnostic checks (public_ip, dns_resolve, tls_cert, port_scan)\n│   └── utils/            ← Shared helpers (proxy URL parsing)\n├── go.mod, go.sum        ← Go modules\n├── README.md\n├── ARCHITECTURE.md\n├── CHANGELOG.md\n├── NEXT_STEPS.md\n└── VERSION\n```\n\n## Built-in Checks\n\n| Check | Category | Description |\n|---|---|---|\n| `public_ip` | network | Detects public IP address via ipify.org, icanhazip.com, ifconfig.me |\n| `dns_resolve` | network | Resolves hostname to IP addresses through the current connection |\n| `tls_certificate` | tls | Validates TLS certificate (issuer, expiry, cipher suite, TLS version) |\n| `port_connectivity` | network | Tests TCP connectivity to ports 80, 443, 8080, 8443 |\n\n## Proxy Input Formats\n\nThe CLI and GUI accept proxy URLs in multiple formats:\n\n| Format | Example | Notes |\n|---|---|---|\n| `scheme://host:port` | `socks5://77.245.76.107:1080` | Auto-detects type from scheme |\n| `host:port` + type | `77.245.76.107:1080` + `--proxy-type socks5` | Requires explicit type |\n| `host` + type | `77.245.76.107` + `--proxy-type socks5` | Uses default port (1080 for SOCKS, 8080 for HTTP) |\n| With auth | `socks5://user:pass@host:port` | Credentials extracted from URL |\n\n## Contributing\n\nContributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on how to get started.\n\n- 🐛 [Report a Bug](https://github.com/francomano/ProxyDoctor/issues/new?template=bug_report.md)\n- ✨ [Request a Feature](https://github.com/francomano/ProxyDoctor/issues/new?template=feature_request.md)\n- 💡 [Good First Issues](https://github.com/francomano/ProxyDoctor/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)\n\nPlease read our [Code of Conduct](CODE_OF_CONDUCT.md) before contributing.\n\n## Known Issues / Limitations\n\n- `--export html` flag is accepted but silently falls back to text output (html formatter not implemented).\n- `--compare` flag is declared but not yet wired into the diagnosis execution.\n- DNS leak, WebRTC leak, geolocation, and IP reputation checks are planned but not yet implemented.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancomano%2Fproxydoctor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrancomano%2Fproxydoctor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancomano%2Fproxydoctor/lists"}