iSeido/netscout

GitHub: iSeido/netscout

基于 Python 的轻量级网络扫描器,用于在本地网络中快速发现存活主机和开放端口,无需安装 Nmap 等重型依赖。

Stars: 1 | Forks: 0

# netscout ![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python) ![License](https://img.shields.io/badge/License-MIT-green) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/58fb4f05ee133920.svg)](https://github.com/iSeido/netscout/actions/workflows/ci.yml) 一个用 Python 构建的网络扫描器,用于映射本地网络上的设备和开放端口。给定一个子网,它会 ping 所有地址,然后扫描所有响应的设备。 ![netscout 演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0ae64fda6f133922.png) ## 功能 - Ping 整个子网以发现活跃设备 - 扫描端口以查看哪些是开放的(SSH、HTTP、RDP 等) - 可选地抓取 banner 以识别运行的服务 - 在整洁的终端表格中显示结果 - 可以导出为 JSON 或 CSV ## 设置 ``` git clone https://github.com/iSeido/netscout.git cd netscout pip install -e . ``` 这会将 netscout 作为命令安装到您的环境中。验证它是否有效: ``` netscout --help ``` 唯一的依赖是:`rich`(用于终端输出)。其他所有功能都内置于 Python 中。 ## 运行 ``` # 本地网络基础扫描 python netscout.py 192.168.1.0/24 # 扫描更多端口 python netscout.py 192.168.1.0/24 --top-ports 100 # 仅扫描特定端口 python netscout.py 192.168.1.0/24 -p 22,80,443,3389 # 全端口范围 python netscout.py 192.168.1.0/24 -p 1-1024 # 仅发现设备,不扫描端口 python netscout.py 192.168.1.0/24 --discover-only # 单一主机,获取 banners python netscout.py 192.168.1.1 --banners # 保存输出 python netscout.py 192.168.1.0/24 -o results.json python netscout.py 192.168.1.0/24 -o results.csv ``` ### 标志 | 标志 | 功能 | 默认值 | |-------------------|------------------------------------------------|---------| | `-p` | 要扫描的端口 — `80`、`22,80,443`、`1-1024` | — | | `--top-ports N` | 扫描前 20、50 或 100 个常用端口 | `20` | | `--discover-only` | 仅进行 Ping 扫描,跳过端口扫描 | 关闭 | | `--banners` | 尝试读取服务 banner | 关闭 | | `--no-ping` | 跳过主机发现,直接扫描主机 | 关闭 | | `--timeout SEC` | 每次连接的超时等待时间 | `1.0` | | `--threads N` | 并发端口扫描线程数 | `100` | | `--host-threads N`| 并发主机扫描线程数 | `10` | | `--show-closed` | 同时显示已关闭的端口 | 关闭 | | `-o FILE` | 导出到 `.json` 或 `.csv` | — | ## 用法示例 ``` # 显示帮助 python netscout.py --help # 仅发现主机(无端口扫描) python netscout.py 192.168.1.0/24 --discover-only # 扫描前 50 个常用端口 python netscout.py 192.168.1.0/24 --top-ports 50 # 扫描自定义端口 python netscout.py 192.168.1.0/24 -p 22,80,443,3389 # 启用 banner grabbing python netscout.py 192.168.1.0/24 --banners # 导出结果至 JSON python netscout.py 192.168.1.0/24 -o results.json # 导出结果至 CSV python netscout.py 192.168.1.0/24 -o results.csv ``` ## 项目布局 ``` netscout/ ├── netscout.py # entry point, CLI args ├── scanner/ │ ├── discovery.py # ping sweep │ ├── port_scanner.py # TCP scanning │ ├── service_info.py # port → service name lookups │ ├── banner.py # banner grabbing │ └── reporter.py # terminal output + export ├── requirements.txt └── setup.py ``` ## 运行测试 安装开发依赖并运行 pytest: ``` pip install -r requirements-dev.txt pytest tests/ ``` ## 为什么构建这个工具 我想要一个简单、轻依赖的工具,以便在不安装 Nmap 或学习其语法的情况下,快速映射家庭或小型办公网络中存活的设备。Python 的标准库可以处理一切——socket、线程、子进程 ping——因此唯一的第三方依赖是用于终端输出的 `rich`。这也是并发 I/O 和 CLI 设计的一次实践练习。 ## 路线图 - ARP 发现 — 通过嗅探 ARP 流量发现阻止 ICMP 的主机(需要原始套接字或 `scapy`) - MAC 厂商查询 — 从本地数据库将 OUI 前缀解析为制造商名称 - UDP 扫描 — 检测常见的 UDP 服务(DNS 53、SNMP 161、TFTP 69) - 操作系统指纹识别 — 根据 TTL 和 TCP 窗口大小推断操作系统 - HTML 报告导出 — 包含可排序表格的单文件报告 ## 安全与限制 - **仅限授权使用。** 此工具仅用于教育目的以及您拥有或获得明确许可进行测试的网络。未经授权扫描网络可能是违法的。 - **依赖 ICMP。** 主机发现依赖于 ping。阻止 ICMP 的设备将不会出现在结果中。 - **不能替代 Nmap。** netscout 涵盖了常见的使用场景,但缺乏 Nmap 的深度、准确性和功能集。 - **结果可能有所不同。** 防火墙、网络分段和操作系统级别的过滤可能会影响扫描的准确性和完整性。 ## 许可证 MIT — 详情请参阅 [许可证](LICENSE)。 作者:[Ahmed Maghrabi](https://github.com/iSeido)
标签:Banner抓取, DNS枚举, Facebook API, NetScout, Ping扫描, Python, Qt框架, 子网扫描, 导出CSV, 导出JSON, 局域网扫描, 开源, 插件系统, 数据统计, 无后门, 服务器安全, 服务识别, 端口扫描, 系统独立性, 网络安全, 网络安全审计, 网络安全工具, 网络扫描器, 网络资产测绘, 设备发现, 逆向工具, 隐私保护