HANSAJA122/Network-Scanner-Vulnerability-Analyzer

GitHub: HANSAJA122/Network-Scanner-Vulnerability-Analyzer

一个面向作品集的 Python 网络扫描与暴露分析工具,提供多线程端口扫描、横幅抓取与服务指纹识别。

Stars: 0 | Forks: 0

# NetScan — 网络扫描器与暴露分析器 NetScan 是一个 **面向作品集** 的 Python 工具,支持 **多线程 TCP 连接扫描**、**横幅抓取**、**轻量级服务指纹识别** 以及 **基于常见风险端口和协议提示的启发式暴露警告**。 ## 功能 - 扫描 **IPv4 地址** 或 **主机名**(存在多个时优先使用第一个 IPv4 A 记录) - **灵活的端口语法**:`80`、`22,443`、`1-1024`、`8000-8010,8443` - **并发工作线程**(线程池)实现快速扫描 - **横幅捕获**,在相关场景下进行简单的 HTTP 与 TLS 探测 - **基于知名端口的服务猜测**,并结合横幅正则匹配 - **启发式警告**(仅作信息提示,非 CVE 验证) - **丰富的 CLI 表格与进度输出** - **JSON 导出**,便于自动化与仪表盘集成 - **可选 Web 仪表盘**(Flask + 图表),支持 KPI 卡片、严重性分布与服务分析 ## 快速开始 ``` cd "Network Scanner" python3 -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt ``` ### 扫描示例 ``` # 默认扫描:主机上的 1–1024 端口 python main.py scan example.com # 指定端口并保存 JSON python main.py scan 192.0.2.10 -p 22,80,443,3389,445 -o scan_results/web.json # 更快的连接探测、更高并发、无横幅 python main.py scan 198.51.100.5 -p 1-65535 --connect-timeout 0.4 -j 400 --no-banner # 静默模式(在脚本中很有用);设置 -o 时仍写入 JSON python main.py scan scanme.nmap.org -p 1-1024 -q -o scan_results/scanme.json ``` 模块形式: ``` python -m netscan scan 127.0.0.1 -p 22,80,443 ``` ### Web 仪表盘 ``` python main.py dashboard --host 127.0.0.1 --port 8765 --results-dir scan_results ``` 打开打印的 URL,选择报告,或 **上传** 使用 `-o` 导出的 JSON 文件。 ## 1. 如何运行 | 命令 | 用途 | |------|------| | `python main.py scan <目标> [选项]` | 执行端口扫描 | | `python main.py dashboard [选项]` | 启动本地报告查看器 | 常用标志: | 标志 | 含义 | |------|------| | `-p`, `--ports` | 端口列表/范围(默认 `1-1024`) | | `--connect-timeout` | TCP 连接超时(秒) | | `--banner-timeout` | 每次读取横幅的超时时间 | | `-j`, `--threads` | 最大并发线程数 | | `--no-banner` | 仅报告开启/关闭,跳过横幅读取 | | `-o`, `--output` | 将结构化 JSON 写入文件 | | `-q`, `--quiet` | 减少控制台输出 | ## 2. 扫描原理 1. **目标解析**(`netscan/resolver.py`):若目标不是 IPv4 字面量,工具将使用 `getaddrinfo`(IPv4, TCP)解析,并扫描返回的 **第一个** 地址(若存在多个 A 记录会打印警告)。 2. **端口列表解析**(`netscan/portspec.py`):将 `-p` 参数展开为 `[1, 65535]` 范围内唯一且排序的整数列表。 3. **TCP 连接扫描**(`netscan/scanner.py`):对每个端口,工作线程尝试 `socket.create_connection。成功建立握手即标记该端口为 **开启**。 4. **横幅抓取**(`netscan/banner.py`):在开启端口上(除非使用 `--no-banner`),读取初始字节;必要时对常见 Web 端口发送小型 **HTTP/1.0** `GET /` 请求,或对 `443`/`8443` 端口执行 **TLS** 握手(证书验证已故意禁用,仅用于发现场景)。 5. **服务猜测**(`netscan/services.py`):将横幅与简单正则匹配;否则使用 **IANA 风格** 的知名端口映射提供标签。猜测结果为 **概率性** 匹配。 6. **警告**(`netscan/vulnerabilities.py`):通过独立规则将 **端口 + 服务 + 横幅提示** 映射到信息性严重性层级。此过程 **非认证测试**,也 **非漏洞验证**。 并发通过 `ThreadPoolExecutor` 实现,每个端口相互独立,受 `-j` 参数限制。 ## 3. 结果解读 ### CLI 表格 - **开放端口表**:每行表示一个在连接超时内完成 TCP 握手的端口。**服务** 为尽力而为的标签,**横幅** 为经过简化的文本预览(通常为协议问候的第一行或 HTTP 头部)。 - **启发式警告**:突出显示 **常见暴露模式**(如 Telnet 明文传输、公共 RDP、无认证类 Redis 风险、SMB 暴露等)。这些是 **审查起点**,而非入侵或配置错误的证明。 ### JSON 报告(`-o`) 顶层字段: - `meta`:扫描参数、时间戳、解析目标与计数 - `open_ports`:仅包含完成 TCP 连接的端口 - `warnings`:去重后的启发式条目,含 `severity`、`title` 与 `detail` **关闭与过滤说明**:本工具不执行原始 SYN 隐蔽扫描;未开放的结果可能是 **关闭**(连接拒绝)或 **过滤**(超时/防火墙丢弃)。两者均视为“未开启”并从 `open_ports` 中排除。 ## 项目结构 ``` netscan/ __init__.py __main__.py # python -m netscan cli.py # argparse + Rich UI config.py # defaults resolver.py # DNS / IPv4 handling portspec.py # -p parsing scanner.py # threaded connect + orchestration banner.py # banner/TLS/HTTP helpers services.py # fingerprinting heuristics vulnerabilities.py # warning rules web_app.py # Flask dashboard report.py # JSON serialization main.py # convenience entrypoint requirements.txt README.md ``` ## 依赖要求 - Python 3.10+ - 请参考 `requirements.txt`(包含 `rich`、`flask`) ## 设计限制 - **仅支持 IPv4 TCP**;当前版本无 UDP、SCTP 或 IPv6 支持 - **连接扫描** 在日志与防火墙中可见 - **无利用、无凭据测试、无认证检查** - **服务与风险标签** 仅为启发式结果,请使用合适工具与流程进行验证 ## 许可证 MIT —— 适用于作品集使用;若复用模块请保留署名。
标签:Flask仪表盘, HTTP探测, JSON导出, KPI卡片, Python网络工具, Scrypt密钥派生, SEO关键词, TCP连接扫描, TLS探测, URL短链接分析, Web仪表盘, 云存储安全, 多线程扫描, 安全风险预警, 并发工作, 开源安全工具, 数据统计, 暴露分析, 服务指纹识别, 服务探测, 横幅抓取, 端口扫描, 端口范围扫描, 网络安全评估, 网络扫描, 网络暴露监控, 逆向工具, 逆向工程平台