cypher-me/net-scanner

GitHub: cypher-me/net-scanner

基于 Python 的综合网络侦察工具,集成 ICMP 探测、TCP 扫描、Banner 抓取和 nmap 高级检测功能。

Stars: 0 | Forks: 0

# Net Scanner 一个强大的基于 Python 的网络扫描器和服务发现工具,用于子网探测、主机发现、端口扫描和服务指纹识别。 ## 描述 Net Scanner 是一个综合性的网络侦察工具,结合了多种扫描技术来发现和分析网络主机及服务。它具有 ICMP ping 扫描、TCP 连接扫描、服务 Banner 抓取等功能,并集成了 nmap 以进行高级服务和操作系统检测。 ### 核心功能 - **子网扫描**:使用 CIDR 表示法扫描整个网络范围(例如 `192.168.1.0/24`) - **主机发现**:ICMP ping 扫描,非 root 用户自动回退到 TCP 连接探测 - **端口扫描**:并发的 TCP 连接扫描,支持自定义端口范围 - **服务检测**:通过 Banner 抓取识别开放端口上运行的服务 - **Nmap 集成**:可选的 nmap 集成,用于高级服务版本检测和操作系统检测 - **ARP 扫描**:发现本地网络上的主机和 MAC 地址 - **多线程**:带有可配置线程池的并发扫描,以实现最佳性能 - **多种导出格式**:支持终端表格、JSON 和 CSV 输出 - **安全意识**:标记敏感端口和服务 - **彩色输出**:易于阅读的终端输出,带有视觉指示器 ## 安装 ### 前置条件 - **Python 3.7+**(必需) - **nmap**(可选,用于高级功能) - **arp-scan**(可选,用于 ARP 扫描) - **Root/sudo 权限**(可选,用于 ICMP ping 和操作系统检测) ### 克隆仓库 ``` # 导航到项目目录 cd net_scanner # 使脚本可执行(可选) chmod +x net_scanner.py ``` ### 安装可选依赖项 **在 Ubuntu/Debian 上:** ``` sudo apt update sudo apt install nmap arp-scan ``` **在 Fedora/RHEL 上:** ``` sudo dnf install nmap arp-scan ``` **在 macOS 上:** ``` brew install nmap arp-scan ``` ## 如何运行 ### 基本用法 ``` # 无 root(仅 TCP connect 扫描) python3 net_scanner.py [command] [target] [options] # 有 root(完整 ICMP 和高级功能) sudo python3 net_scanner.py [command] [target] [options] ``` ### 可用命令 1. **`scan`** - 扫描子网中的所有主机 2. **`host`** - 深度扫描单个主机 3. **`ports`** - 仅进行端口扫描(跳过主机发现) 4. **`arp`** - ARP 扫描以发现主机和 MAC 地址 ## 使用示例 ### 1. 子网扫描 扫描整个子网以查找存活主机和开放端口: ``` # 基本子网扫描(默认:前 100 个端口) sudo python3 net_scanner.py scan 192.168.1.0/24 # 扫描特定端口 sudo python3 net_scanner.py scan 192.168.1.0/24 --ports 22,80,443,3306 # 扫描端口范围 sudo python3 net_scanner.py scan 192.168.1.0/24 --ports 1-1024 # 结合 nmap 扫描前 N 个端口 sudo python3 net_scanner.py scan 192.168.1.0/24 --top-ports 100 --nmap # 包含 OS 检测和 banner grabbing 的完整扫描 sudo python3 net_scanner.py scan 192.168.1.0/24 --nmap --os --banner ``` ### 2. 单主机扫描 对特定主机执行详细扫描: ``` # 基本主机扫描 python3 net_scanner.py host 192.168.1.1 # 使用自定义端口范围扫描 python3 net_scanner.py host 192.168.1.1 --ports 1-1024 # 包含 service detection 的深度扫描 sudo python3 net_scanner.py host 192.168.1.1 --nmap --banner --os # 扫描特定端口 python3 net_scanner.py host 192.168.1.1 --ports 22,80,443,3389,5900 ``` ### 3. 仅端口扫描 跳过主机发现直接扫描端口(对于已知的存活主机更快): ``` # 快速端口扫描 python3 net_scanner.py ports 192.168.1.1 --range 1-1024 # 使用更多线程的快速全端口扫描 python3 net_scanner.py ports 192.168.1.1 --range 1-65535 --threads 300 # 包含 banner grabbing 的端口扫描 python3 net_scanner.py ports 192.168.1.1 --range 1-10000 --banner ``` ### 4. ARP 扫描 发现本地网络上的主机和 MAC 地址: ``` # ARP 扫描(需要 root) sudo python3 net_scanner.py arp 192.168.1.0/24 # 替代方案:如果 arp-scan 不可用则使用 nmap sudo python3 net_scanner.py arp 10.0.0.0/24 ``` ### 5. 导出结果 将扫描结果保存为 JSON 或 CSV: ``` # 导出为 JSON sudo python3 net_scanner.py scan 192.168.1.0/24 --json results.json # 导出为 CSV sudo python3 net_scanner.py scan 192.168.1.0/24 --csv results.csv # 导出为两种格式 sudo python3 net_scanner.py scan 192.168.1.0/24 --json results.json --csv results.csv ``` ## 命令选项 ### 通用选项(适用于 scan/host/ports 命令) | 选项 | 短选项 | 描述 | |--------|-------|-------------| | `--ports` | `-p` | 指定端口:`22,80,443` 或 `1-1024` | | `--top-ports N` | | 扫描最常用的 N 个端口 | | `--threads N` | `-t` | 并发端口扫描线程数(默认:150) | | `--timeout N` | | 连接超时时间(秒)(默认:0.8) | | `--nmap` | | 启用 nmap 服务/版本检测 | | `--os` | | 启用操作系统检测(需要 root 权限) | | `--banner` | `-b` | 抓取服务 Banner | | `--show-closed` | | 在输出中显示已关闭/被过滤的端口 | | `--json FILE` | | 将结果导出为 JSON 文件 | | `--csv FILE` | | 将结果导出为 CSV 文件 | ### Scan 命令专属选项 | 选项 | 描述 | |--------|-------------| | `--host-threads N` | 并发主机扫描线程数(默认:30) | ### Ports 命令选项 | 选项 | 短选项 | 描述 | |--------|-------|-------------| | `--range` | `-r` | 要扫描的端口范围(默认:1-1024) | ## 输出格式 该工具以格式化的终端表格显示扫描结果: ``` ╔══ Net Scanner ══════════════════════════════ ║ Target : 192.168.1.0/24 (254 hosts) ║ Ports : 100 port(s) per host ║ Threads : 150 port / 30 host ║ Nmap : enabled ╚══════════════════════════════════════════════ ① Ping sweep… [██████████████████████████████████████████████████] 100.0% alive=5 ② Port scanning live hosts… [██████████████████████████████████████████████████] 100.0% ┌─ Host 192.168.1.1 (router.local) │ Status : ● ALIVE Latency : 2.3ms │ MAC : AA:BB:CC:DD:EE:FF Vendor: Cisco Systems │ Open : 3 port(s) ├────────────────────────────────────────────────────────── │ PORT STATE SERVICE VERSION/BANNER ├────────────────────────────────────────────────────────── │ 22/tcp open SSH OpenSSH 8.2p1 │ 80/tcp open HTTP nginx 1.18.0 ⚠ │ 443/tcp open HTTPS nginx 1.18.0 ⚠ └────────────────────────────────────────────────────────── ``` ## 安全与道德 **重要提示:法律声明** 本工具旨在用于: - 网络管理和安全审计 - 测试您自己的网络和系统 - 授权环境下的教育目的 **在扫描您不拥有或未管理的网络之前,请务必获得适当授权。** 未经授权的端口扫描在您所在的司法管辖区可能是非法的,并可能被视为敌对行为。请负责任且合乎道德地使用。 ## 故障排除 ### 权限错误 如果您在 ICMP ping 时遇到权限错误: ``` # 使用 sudo 运行以获得完整功能 sudo python3 net_scanner.py scan 192.168.1.0/24 ``` ### 找不到 Nmap 如果 nmap 集成显示为禁用状态: ``` # 安装 nmap sudo apt install nmap # Ubuntu/Debian sudo dnf install nmap # Fedora/RHEL brew install nmap # macOS ``` ### 扫描缓慢 要加快扫描速度: - 增加线程数:`--threads 300` - 减少超时时间:`--timeout 0.5` - 扫描更少的端口:`--top-ports 20` - 跳过 nmap:不要使用 `--nmap` 标志 ## 技术细节 ### 扫描技术 - **ICMP Echo 请求**:原始套接字(Raw socket)ICMP ping(需要 root 权限) - **TCP Connect 扫描**:完整的 TCP 连接(无需 root 权限) - **Banner 抓取**:捕获服务 Banner 以进行识别 - **ARP 发现**:本地网络上的二层(Layer 2)主机发现 ### 端口范围 - **Top 100 端口**:最常见的服务(子网扫描的默认设置) - **知名端口(Well-Known Ports)**:1-1024(单主机扫描的默认设置) - **所有端口**:1-65535(完整扫描) - **自定义**:任何以逗号分隔的列表或范围 ## 许可证 本项目按“原样”提供,用于教育和专业网络管理目的。 ## 贡献 欢迎贡献!请随时提交 issue 或 pull request。
标签:AES-256, ARP扫描, Banner Grabbing, C2日志可视化, CVE, Facebook API, GitHub, ICMP, Nmap, OS检测, Python, Qt框架, TCP连接扫描, 子网扫描, 安全运营中心, 密码管理, 指纹识别, 插件系统, 数字签名, 数据展示, 数据统计, 无后门, 服务识别, 漏洞评估, 端口扫描, 系统独立性, 红队, 网络安全, 网络映射, 虚拟驱动器, 逆向工具, 防御绕过, 隐私保护