iSeido/netscout
GitHub: iSeido/netscout
基于 Python 的轻量级网络扫描器,用于在本地网络中快速发现存活主机和开放端口,无需安装 Nmap 等重型依赖。
Stars: 1 | Forks: 0
# netscout


[](https://github.com/iSeido/netscout/actions/workflows/ci.yml)
一个用 Python 构建的网络扫描器,用于映射本地网络上的设备和开放端口。给定一个子网,它会 ping 所有地址,然后扫描所有响应的设备。

## 功能
- 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, 局域网扫描, 开源, 插件系统, 数据统计, 无后门, 服务器安全, 服务识别, 端口扫描, 系统独立性, 网络安全, 网络安全审计, 网络安全工具, 网络扫描器, 网络资产测绘, 设备发现, 逆向工具, 隐私保护