RavinduFernando/network_scanner-NPD
GitHub: RavinduFernando/network_scanner-NPD
一个纯 Python 标准库实现的高性能多线程 TCP 端口扫描器,专用于内网资产发现与安全评估。
Stars: 0 | Forks: 0
# Network-Scanner-Project
一个使用 Python 编写的高性能、多线程 TCP 端口扫描器,用于内部网络审计和安全评估。
该工具使用线程池并行扫描单个主机、IP 范围、完整的 CIDR 块或主机名,具有适当的超时设置,因此从不会在过滤的端口上挂起,并使用 `argparse` 构建了完善的 CLI。
## 功能
- **TCP Connect 扫描** 使用标准 `socket` 模块,为每个连接设置严格的超时时间,确保被过滤或丢弃的端口绝不会阻塞扫描。
- **子网与范围解析** 由 `ipaddress` 模块驱动 — 支持单个 IP、主机名、CIDR 块(`192.168.1.0/24`)、包含边界范围(`10.0.0.1-10.0.0.50`),以及上述所有格式的逗号分隔混合列表。
- **灵活的端口指定** — 单个端口、范围(`1-1024`)或逗号列表(`22,80,443,8000-8100`)。
- **高性能多线程** 通过带有可配置工作线程数的 `concurrent.futures.ThreadPoolExecutor` 实现。
- **专业的 CLI** 基于 `argparse` — 清晰的 `--help` 说明、经过验证的输入以及丰富的示例。
- **实时进度条** 在扫描运行时实时更新。
- **彩色输出** 采用 ANSI 样式(在非 TTY 环境下可通过 `--no-color` 自动禁用)。
- **服务识别** 可识别约 70 种众所周知的 TCP 服务。
- **可选的 Banner 抓取**(`--banner`),用于对开放端口进行快速服务指纹识别。
- **文本报告**(`-o report.txt`)按主机分组,方便进行文档记录和审计追踪。
- **优雅的 Ctrl+C 处理** — 干净利落地取消待处理的任务。
--
## 要求
- *Python 3.8+*
- *无外部依赖* — 仅使用 Python 标准库(socket、ipaddress、argparse、threading、concurrent.futures)。
## 安装
克隆该代码仓库即可直接使用——无需进行任何 `pip install`。
```
git clone https://github.com//Network-Scanner-Project.git
cd Network-Scanner-Project
python network_scanner.py --help
```
(可选)在 Linux/macOS 上将脚本设为可直接执行:
```
chmod +x network_scanner.py
./network_scanner.py --help
```
## 项目结构
```
Network-Scanner-Project/
├── network_scanner.py # The full scanner (single-file, no external deps)
└── README.md # This file
```
--
## 使用方法
```
python network_scanner.py -t [-p ] [--threads N] [--timeout S] [--banner] [-o file]
```
### 参数
| 标志 | 描述 | 默认值 |
| ---- | ----------- | ------- |
| `-t, --target` | 目标 IP、主机名、CIDR 块、范围或逗号分隔的列表。**必填。** | — |
| `-p, --ports` | 要扫描的端口:单个端口、范围或逗号列表。 | `1-1024` |
| `--threads` | 工作线程数(1–1000)。 | `100` |
| `--timeout` | 每次连接的超时时间(秒)。 | `1.0` |
| `--banner` | 尝试对开放端口进行轻量级的 banner 抓取。 | 关闭 |
| `-o, --output` | 将文本报告写入指定的文件路径。 | — |
| `--no-color` | 在终端输出中禁用 ANSI 颜色。 | 关闭 |
| `--no-banner-art` | 启动时隐藏 ASCII 横幅。 | 关闭 |
| `-q, --quiet` | 禁止显示实时进度条。 | 关闭 |
## 示例
**1. 扫描整个 /24 子网的最常用端口:**
```
python network_scanner.py -t 192.168.1.0/24 -p 22,80,443
```
**2. 使用 200 个线程扫描 IP 范围内的前 1024 个端口:**
```
python network_scanner.py -t 10.0.0.1-10.0.0.50 -p 1-1024 --threads 200
```
**3. 使用激进的超时设置对主机名进行全端口扫描:**
```
python network_scanner.py -t example.com -p 1-65535 --timeout 0.5
```
**4. 扫描单个主机,抓取 banner 并生成报告:**
```
python network_scanner.py -t 192.168.1.1 -p 1-1024 --banner -o report.txt
```
**5. 混合目标(单个 IP + CIDR + 主机名):**
```
python network_scanner.py -t "192.168.1.1,10.0.0.0/30,scanme.example.com" -p 22,80,443
```
## 示例输出
```
_ _ _ ____
| \ | | ___| |_/ ___| ___ __ _ _ __ _ __ ___ _ __
| \| |/ _ \ __\___ \ / __/ _` | '_ \| '_ \ / _ \ '__|
| |\ | __/ |_ ___) | (_| (_| | | | | | | | __/ |
|_| \_|\___|\__|____/ \___\__,_|_| |_|_| |_|\___|_|
Multi-Threaded TCP Network Auditor v1.0
[i] Targets: 254 host(s)
[i] Ports: 3 per host (762 total connection attempts)
[i] Threads: 100
[i] Timeout: 1.0s
[i] Banner: disabled
[*] Scan started at 2026-04-29T14:22:11
[+] 192.168.1.1:22 open (SSH)
[+] 192.168.1.1:80 open (HTTP)
[+] 192.168.1.42:443 open (HTTPS)
[*] Scanning [██████████████████████████████] 762/762 (100.0%)
[*] Scan finished at 2026-04-29T14:22:18
[*] Duration: 7.34s
[*] Open ports discovered: 3
```
## 工作原理(项目阶段)
本项目围绕四个规定的开发阶段进行组织:
### 1. 核心网络功能
使用 `socket.socket(AF_INET, SOCK_STREAM)` 尝试 TCP 连接。每个套接字都设置了 `settimeout()`,因此被过滤或丢弃的端口绝不会挂起扫描器。使用 `connect_ex()` 可以将连接失败作为错误代码返回,而不是抛出异常,从而让我们能够清晰地区分 **开放**、**关闭**(`ECONNREFUSED`)和 **过滤**(超时)状态。
### 2. 子网解析
`ipaddress` 模块驱动 `parse_targets()`,该函数将 CIDR 块扩展为单个主机(`network.hosts()`),验证 IP,并通过 `socket.gethostbyname()` 解析主机名。同时也支持 IP 范围(`a.b.c.d-a.b.c.e`)和逗号分隔的混合目标并进行去重。
### 3. 高性能 — 多线程
工作通过 `concurrent.futures.ThreadPoolExecutor` 扇出。每一对 `(host, port)` 都成为一个 future;通过 `as_completed()` 消费结果,以便在每次扫描完成时立即输出和更新进度。`threading.Lock` 可防止打印输出交错。工作线程数量可由用户配置(`--threads`),默认值为 100。
### 4. CLI 界面
`argparse` 提供了完整的命令行体验:必选/可选标志、默认值、输入验证、`--help` 中的多行示例,以及正确的退出代码(`0` 表示成功,`2` 表示错误输入,`130` 表示用户中断)。
## 版本控制与协作
本项目通过名为 **`Network-Scanner-Project`** 的 GitHub 仓库进行开发和跟踪。每位团队成员都应拥有可见的提交历史,以反映其在四个开发阶段中所做的贡献。
## 负责任的使用
此工具**仅**用于授权的内部审计、实验室工作以及对您拥有或获得明确书面测试许可的网络的安全评估。未经授权的端口扫描在您所在的司法管辖区可能是非法的,并且违反大多数网络的可接受使用政策。请务必事先获得许可。
## 许可证
Apache-2.0 许可证 — 详见代码仓库。
标签:argparse, Banner获取, CIDR解析, CLI, DNS枚举, NetworkScanner, Python, Qt框架, TCP扫描, ThreadPoolExecutor, WiFi技术, 代码生成, 反取证, 安全评估, 并发编程, 插件系统, 数据统计, 无后门, 无线安全, 服务器安全, 服务识别, 标准库, 检测规则, 渗透测试工具, 端口扫描, 纯Python开发, 网络安全, 网络安全工具, 网络扫描器, 网络资产发现, 资产测绘, 逆向工具, 防御绕过, 隐私保护