A fast, threaded network reconnaissance tool for host discovery, banner grabbing, and report generation.
ViperScan is a command-line network recon tool built in pure Python.
It scans a target IP, domain, or entire subnet โ finds open ports, grabs service banners, detects the OS, assigns risk levels, and generates a full HTML + TXT report. All three phases run automatically in sequence with a single command.
- ๐ Host Discovery โ scans 68 common ports per host using parallel threads
- ๐ฏ Banner Grabbing โ connects to each open port and tries 15 protocol probes (HTTP, FTP, SSH, SMTP, IMAP, Redis, and more)
- ๐ฅ OS Detection โ identifies Linux/Unix, Windows, Cisco IOS from banner keywords
โ ๏ธ Risk Classification โ automatically flags ports as HIGH / MEDIUM / LOW risk- ๐ HTML Report โ full dashboard with stat cards, summary tables, risk badges, and per-host details
- ๐ TXT Report โ plain-text version for terminals, logs, and archives
- ๐ 3 Scan Modes โ
single,multi,subnet - ๐งฎ Subnet Calculator โ supports /8 /16 /24 /32 CIDR masks
- โก Threaded โ all IPs scanned in parallel, a /24 scan finishes in under 30 seconds on LAN
- ๐ Live Progress Bar โ single updating line instead of flooding the terminal
- ๐ Report-Only Mode โ regenerate reports from existing JSON without rescanning
- ๐ฆ Zero Dependencies โ standard library only, no pip install needed
ViperScan/
โโโ ViperScan.py โ entry point, run this
โโโ README.md
โโโ LICENSE
โโโ requirements.txt
โโโ Modules/
โโโ Host_Discovery.py โ Phase 1: port scanning
โโโ Banner_Scanner.py โ Phase 2: banner grabbing & OS detection
โโโ Report.py โ Phase 3: HTML + TXT report generation
Json/andReport/folders are created automatically when you run the tool.
1. Clone the repository
git clone https://github.com/khalid609/ViperScan.git
cd ViperScan2. Check Python version (3.7+ required)
python --version3. No pip install needed โ ViperScan uses only the Python standard library.
4. Verify everything works
python -c "from Modules.Host_Discovery import HostDiscovery; from Modules.Banner_Scanner import BannerScanner; from Modules.Report import Report; print('โ
All imports OK')"python main.py [--ip IP | --domain DOMAIN] [--mode MODE] [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--ip |
str | "" |
Target IPv4 address |
--domain |
str | "" |
Target domain โ auto-resolved to IP |
--mode |
str | single |
Scan mode: single ยท multi ยท subnet |
--start |
int | 0 |
Last-octet start for multi mode |
--end |
int | 255 |
Last-octet end for multi mode |
--subnetmask |
int | โ |
CIDR prefix for subnet mode: 8 16 24 32 |
--timeout |
int | 5 |
Banner grab timeout in seconds |
--report-only |
flag | off | Skip scanning, rebuild report from existing JSON |
Scan a single IP
python ViperScan.py --ip 192.168.1.1Scan a domain
python ViperScan.py --domain example.comScan entire /24 subnet
python ViperScan.py --ip 192.168.1.1 --mode subnet --subnetmask 24Scan a custom range (multi mode)
python ViperScan.py --ip 192.168.1.1 --mode multi --start 1 --end 50Faster scan with lower timeout
python ViperScan.py --ip 192.168.1.1 --timeout 2Regenerate report without rescanning
python ViperScan.py --report-onlyViperScan runs in 3 automatic phases:
- Resolves domain to IP (if
--domainused) - Builds target IP list based on
--mode - Launches one thread per IP โ all IPs scanned simultaneously
- Checks 68 common ports per IP using TCP
connect_ex()with 0.5s timeout - Shows a live progress bar:
[=============> ] 68% | 4,624/6,800 checks | 3 host(s) found - Saves open ports to
Json/result.json
- Loads hosts from
Json/result.json - One thread per host โ all run in parallel
- Tries 15 protocol probes per port (HTTP GET, FTP QUIT, SSH handshake, SMTP HELP, etc.)
- Detects service type and OS from banner keywords
- Prints a result block per host as it finishes
- Overwrites
Json/result.jsonwith enriched data
- Reads enriched
Json/result.json - Assigns risk level per port (HIGH / MEDIUM / LOW)
- Generates
Report/report_TIMESTAMP.htmlโ full visual dashboard - Generates
Report/report_TIMESTAMP.txtโ plain-text version
| Level | Ports | Reason |
|---|---|---|
| ๐ด HIGH | 21, 23, 445, 2375, 3389, 5900-5902, 6379, 11211, 27017 | Unencrypted or commonly exploited |
| ๐ก MEDIUM | 22, 25, 80, 110, 143, 1433, 3306, 5432, 8080, 8443, 9200 | Standard services worth reviewing |
| ๐ข LOW | All others | Generally safe |
20, 21, 22, 23, 25, 53, 67, 68, 69, 80, 110, 123, 137, 138, 139,
143, 161, 389, 443, 445, 465, 554, 587, 636, 993, 995, 1433, 1521,
1935, 2049, 2181, 2375, 2376, 2379, 2380, 3000, 3306, 3389, 5000,
5060, 5061, 5222, 5223, 5432, 5672, 5900, 5901, 5902, 5984, 6379,
6443, 8000, 8080, 8081, 8082, 8086, 8443, 8888, 9000, 9042, 9090,
9092, 9200, 9300, 10250, 11211, 15672, 27017
# Test your own machine (safest)
python ViperScan.py --ip 127.0.0.1
# Test a public DNS server (always legal)
python ViperScan.py --ip 8.8.8.8
# Test imports only
python -c "from Modules.Host_Discovery import HostDiscovery; from Modules.Banner_Scanner import BannerScanner; from Modules.Report import Report; print('All OK')"Only scan networks and systems you own or have explicit written permission to test.
Unauthorized port scanning may be illegal under computer crime laws in your country.
The author accepts no liability for misuse of this tool.
khalid609
๐ง khalid609abu.kaf@gmail.com
๐ https://github.com/khalid609
This project is licensed under the MIT License โ see the LICENSE file for details.