{"id":25650656,"url":"https://github.com/sk3pp3r/echo","last_synced_at":"2026-05-04T17:36:40.686Z","repository":{"id":277364902,"uuid":"932192761","full_name":"sk3pp3r/echo","owner":"sk3pp3r","description":"A modern web-based port scanning tool built with Flask and Docker. Echo-Port Scanner provides an intuitive interface for network port scanning with support for multiple output formats and dark mode.","archived":false,"fork":false,"pushed_at":"2025-02-18T13:25:51.000Z","size":348,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T15:51:54.315Z","etag":null,"topics":["docker","flask","nmap","port-scanner","python"],"latest_commit_sha":null,"homepage":"","language":"HTML","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/sk3pp3r.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}},"created_at":"2025-02-13T14:21:00.000Z","updated_at":"2025-02-19T21:41:19.000Z","dependencies_parsed_at":"2025-02-18T13:35:59.779Z","dependency_job_id":null,"html_url":"https://github.com/sk3pp3r/echo","commit_stats":null,"previous_names":["sk3pp3r/echo-port-scanner","sk3pp3r/echo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sk3pp3r/echo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sk3pp3r%2Fecho","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sk3pp3r%2Fecho/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sk3pp3r%2Fecho/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sk3pp3r%2Fecho/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sk3pp3r","download_url":"https://codeload.github.com/sk3pp3r/echo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sk3pp3r%2Fecho/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32618225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","flask","nmap","port-scanner","python"],"created_at":"2025-02-23T15:17:43.013Z","updated_at":"2026-05-04T17:36:40.671Z","avatar_url":"https://github.com/sk3pp3r.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🔍 Echo-Port Scanner\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=flat\u0026logo=docker\u0026logoColor=white)](https://www.docker.com/)\n[![Flask](https://img.shields.io/badge/flask-%23000.svg?style=flat\u0026logo=flask\u0026logoColor=white)](https://flask.palletsprojects.com/)\n[![Python](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n[![Security: OWASP](https://img.shields.io/badge/security-OWASP-green.svg)](https://owasp.org/www-project-top-ten/)\n[![Docker Build](https://github.com/sk3pp3r/echo/actions/workflows/docker-build.yml/badge.svg)](https://github.com/sk3pp3r/echo/actions/workflows/docker-build.yml)\n\nA modern, secure web-based port scanning tool built with Flask and Docker. Featuring an intuitive interface, multiple output formats, and dark mode support.\n\n[Features](#features) • [Quick Start](#quick-start) • [Security](#security) • [Documentation](#documentation) • [Screenshots](screenshots.md)\n\n![Echo-Port Scanner Screenshot](screenshots/main.jpg)\n\n\u003c/div\u003e\n\n## Features\n\n- 🌐 **Web Interface**: Clean, modern UI with dark mode support\n- 🎯 **Flexible Targeting**:\n  - Single IP/hostname scanning\n  - IP range support (e.g., 192.168.1.1-254)\n  - Multiple target scanning\n- 📊 **Multiple Export Formats**:\n  - LOG (detailed scan output)\n  - JSON (structured data)\n  - CSV (spreadsheet-friendly)\n- 🛡️ **Enterprise-Grade Security**:\n  - OWASP Top 10 compliant\n  - Rate limiting protection\n  - Input sanitization\n  - Security headers\n- 🐳 **Container Ready**:\n  - Docker support\n  - Docker Compose configuration\n  - Health checks included\n\n## Quick Start\n\n### Using Docker (Recommended)\n```bash\n# Clone the repository\ngit clone https://github.com/sk3pp3r/echo.git\ncd echo\n\n# Deploy using script\nchmod +x deploy.sh\n./deploy.sh\n\n# Or manually with Docker Compose\ndocker-compose up -d\n```\n\nAccess the application at `http://localhost:8085`\n\n### Manual Installation\n```bash\n# Clone and setup\ngit clone https://github.com/sk3pp3r/echo.git\ncd echo\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # Linux/Mac\n# or\n.\\venv\\Scripts\\activate  # Windows\n\n# Install dependencies\npip install -r requirements.txt\n\n# Run the application\npython app.py\n```\n\n## Security\n\n### OWASP TOP 10 Security Enhancements\n| **Type**               | **Enhancement**                     | **Details**                                                                                                                                       |\n|--------------------------------|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| Environment Configuration 🔑   | Secret Key Management               | Uses environment variables for secrets, reducing hard-coded values           |\n| Input Validation 🛡️| Target Validation                    | Robust hostname/IP validation blocking malicious inputs    |\n| Command Security 🔐| Nmap Command Sanitization           | Whitelist approach for parameters, blocking command injection         |\n| Rate Limiting ⏱️| Request Throttling                  | Prevents abuse with configurable request limits |\n| Session Security 🍪| Secure Session Cookies              | Implements secure cookie configuration and lifetime limits |\n| Data Protection 🔇| Output Sanitization               | Redacts sensitive information from scan results |\n| Logging 📜| Enhanced Error Handling          | Comprehensive logging with rotation and unique error IDs            |\n| Web Security 🔐| Security Headers           | Implements all recommended security headers |\n\n## Documentation\n\n### Scanning Options\n- **Single Host**: `example.com` or `192.168.1.1`\n- **IP Range**: `192.168.1.1-254`\n- **Multiple Targets**: `192.168.1.10,10.0.0.138`\n- **Port Formats**:\n  - Single: `80`\n  - Multiple: `80,443,8080`\n  - Range: `1-1000`\n\n### Export Formats\n- **LOG**: Raw scan output with metadata\n- **JSON**: Structured data format\n- **CSV**: Spreadsheet-compatible format\n\n## 🛠️ Development\n\n### Project Structure\n```\necho-port-scanner/\n├── app.py                      # Main application\n├── templates/                  # HTML templates\n├── static/                    # Static assets\n├── Dockerfile                 # Container definition\n├── docker-compose.yml         # Container orchestration\n└── requirements.txt           # Python dependencies\n```\n\n### Contributing\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 👥 Author\n\n**Haim Cohen**\n- LinkedIn: [@haimc](https://www.linkedin.com/in/haimc/)\n- GitHub: [@sk3pp3r](https://github.com/sk3pp3r)\n\n## 🙏 Acknowledgments\n\n- [Nmap](https://nmap.org/) - Network scanning capabilities\n- [Flask](https://flask.palletsprojects.com/) - Web framework\n- [Bootstrap](https://getbootstrap.com/) - UI components\n\n## ⚠️ Disclaimer\n\nThis tool is for educational and authorized testing purposes only. Unauthorized scanning may be illegal. Use responsibly and only on networks you own or have permission to test.\n\n---\n\u003cdiv align=\"center\"\u003e\nMade by Haim Cohen 2025\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsk3pp3r%2Fecho","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsk3pp3r%2Fecho","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsk3pp3r%2Fecho/lists"}