Janiru-Sudasinghe/Network-Scanner-Project
GitHub: Janiru-Sudasinghe/Network-Scanner-Project
基于 Python 标准库构建的多线程 TCP 端口扫描器,支持 CIDR 子网解析,专为内网审计场景下的快速端口发现而设计。
Stars: 0 | Forks: 0
# 🔍 网络发现与审计工具




## 📋 目录
- [项目概述](#project-overview)
- [小组成员](#group-members)
- [技术架构](#technical-architecture)
- [核心特性](#key-features)
- [环境要求](#requirements)
- [安装与设置](#installation--setup)
- [使用方法](#usage)
- [CLI 参考](#cli-reference)
- [开发阶段](#development-phases)
- [项目结构](#project-structure)
- [致谢](#acknowledgements)
## 项目概述
**背景:** 作为网络安全公司模拟初级安全工程师职责的一部分,开发此工具是为了满足对专业级网络扫描器的需求,该扫描器能够在企业子网中进行内部审计。
该扫描器通过利用并发的多线程、强大的错误处理和结构化的命令行界面,旨在超越基础的脚本解决方案。它能够识别单个主机或整个 CIDR 块上的开放 TCP 端口,使其既适用于针对性审计,也适用于广泛的审计任务。
本项目展示了任务说明书中概述的对 **Socket 编程**、**并发** 和 **输入解析** 的熟练掌握。
## 小组成员
| 学号 | 贡献 |
|--------------------|--------------|
| COHNDNE251F-035 | 核心网络与 Socket 实现 |
| COHNDNE251F-038 | 子网解析与 IP 地址模块集成 |
| COHNDNE251F-043 | 多线程架构与性能优化 |
| COHNDNE251F-045 | CLI 界面、参数解析与文档编写 |
## 技术架构
该工具围绕四个核心开发阶段构建,每个阶段都在前一个阶段的基础上构建,以提供生产级质量的扫描解决方案:
```
User Input (argparse)
│
▼
IP / CIDR Parsing (ipaddress module)
│
▼
ThreadPoolExecutor (concurrent.futures)
┌───┴───────────────────┐
│ Thread 1 │ Thread N
│ socket.connect() │ socket.connect()
│ → Port Result │ → Port Result
└───────────────────────┘
│
▼
Aggregated Results → Terminal Output
```
## 核心特性
| 特性 | 描述 | 使用的模块 |
|---|---|---|
| **核心网络** | 尝试建立具有可配置超时的 TCP 连接,以防止在过滤端口上挂起 | `socket` |
| **子网解析** | 支持扫描单个 IP 或完整的 CIDR 块(例如 `192.168.1.0/24`) | `ipaddress` |
| **高性能** | 多线程架构显著减少了扫描时间,优于顺序扫描方法 | `concurrent.futures.ThreadPoolExecutor` |
| **CLI 界面** | 灵活的终端界面,支持目标、端口范围和线程数配置 | `argparse` |
| **错误处理** | 优雅地管理无法访问的主机、拒绝连接和网络超时 | `socket`, `try/except` |
## 环境要求
- **Python 3.x**(由于依赖 `ipaddress` 和 `concurrent.futures`,不支持低于 3.4 的版本)
- **无外部依赖** — 该工具完全基于 Python 标准库构建
```
socket
ipaddress
concurrent.futures
argparse
```
## 安装与设置
**步骤 1 — 克隆仓库**
```
git clone https://github.com/Janiru-Sudasinghe/Network-Scanner-Project
cd Network-Scanner-Project
```
**步骤 2 — 验证 Python 版本**
```
python --version
# 预期要求:Python 3.x
```
**步骤 3 — 确认无需外部包**
```
# 无需 pip install。所有模块均来自 Python Standard Library。
```
## 使用方法
### 基本扫描 — 单个主机(默认端口)
使用一组默认的常用审计端口扫描单个 IP 地址。
```
py scanner.py -t 192.168.120.131
```
**默认扫描端口:** `21, 22, 23, 80, 139, 443, 445, 3306, 8080`
### 子网扫描 — 指定端口的 CIDR 块
扫描 `/24` 子网中的所有主机的指定端口,适用于广泛的内部审计。
```
py scanner.py -t 192.168.120.0/24 -p 22,80,443
```
### 端口范围扫描 — 增加线程数的自定义范围
使用 100 个并发线程扫描单个主机上的端口范围,以实现最大吞吐量。
```
py scanner.py -t 192.168.120.131 -p 1-1000 -w 100
```
### 混合格式 — 单个端口与范围组合
将单个端口声明与连字符范围相结合。
```
py scanner.py -t 192.168.120.131 -p 21,22,80,8000-8010 -w 75
```
### 错误用例 — 格式错误的目标
通过提供无效的 IP 地址来测试错误处理(优雅地打印清晰的错误信息而不会崩溃)。
```
python scanner.py -t not-an-ip -p 80
```
### 示例输出
```
py scanner.py -t 192.168.120.131 -p 1-1000 -w 100
```
```
========================================================
Network Discovery & Auditing Tool — Group 08
========================================================
Target : 192.168.120.131
Ports : 1000 port(s) queued
Threads : 100 concurrent workers
========================================================
[OPEN] 192.168.120.131 Port 53 (DNS)
[OPEN] 192.168.120.131 Port 23 (Telnet)
[OPEN] 192.168.120.131 Port 25 (SMTP)
[OPEN] 192.168.120.131 Port 80 (HTTP)
[OPEN] 192.168.120.131 Port 22 (SSH)
[OPEN] 192.168.120.131 Port 21 (FTP)
[OPEN] 192.168.120.131 Port 139 (NetBIOS)
[OPEN] 192.168.120.131 Port 111
[OPEN] 192.168.120.131 Port 445 (SMB)
[OPEN] 192.168.120.131 Port 513
[OPEN] 192.168.120.131 Port 512
[OPEN] 192.168.120.131 Port 514
========================================================
Scan complete.
Open ports found : 12
Total checks : 1000
Time elapsed : 10.16 seconds
========================================================
```
## CLI 参考
| 参数 | 长格式 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|---|
| `-t` | `--target` | `str` | ✅ 是 | — | 目标 IP 地址或 CIDR 子网块 |
| `-p` | `--ports` | `str` | ❌ 否 | `21,22,23,80,139,443,445,3306,8080` | 逗号分隔的端口或范围(例如 `1-1024`) |
| `-w` | `--workers` | `int` | ❌ 否 | `50` | 扫描期间使用的并发线程数 |
**完整帮助输出:**
```
py scanner.py --help
```
```
usage: scanner.py [-h] -t TARGET [-p PORTS] [-w WORKERS]
Network Discovery & Auditing Tool — Group 08
Performs multi-threaded TCP port scanning across single hosts or CIDR subnets.
options:
-h, --help show this help message and exit
-t, --target TARGET Target IPv4 address or CIDR block (e.g., 192.168.1.1 or 192.168.1.0/24)
-p, --ports PORTS Ports to scan. Accepts comma-separated values or ranges (default: 21,22,23,80,139,443,445,3306,8080)
-w, --workers WORKERS
Number of concurrent threads (default: 50)
Examples:
python scanner.py -t 192.168.1.1
python scanner.py -t 192.168.1.0/24 -p 22,80,443
python scanner.py -t 192.168.1.1 -p 1-1000 -w 100
Disclaimer:
Use only on networks for which you have explicit authorisation.
```
## 开发阶段
本项目按照任务说明书分五个结构化阶段进行开发:
### 阶段 1 — 核心网络
使用 `socket` 模块实现 TCP 连接尝试。每个连接都受可配置超时的限制,以确保扫描器不会在已过滤或无响应的端口上无限期挂起。
### 阶段 2 — 子网解析
集成了 `ipaddress` 模块,允许工具接受单个 IP 地址和 CIDR 表示法。给定块内的所有主机地址都会被枚举并系统地扫描。
### 阶段 3 — 高性能多线程
用 `concurrent.futures.ThreadPoolExecutor` 替换了最初的同步扫描循环。这使得数百个端口检查可以同时进行,与顺序执行相比,扫描时间减少了数个数量级。
### 阶段 4 — CLI 界面
使用 `argparse` 构建了专业的命令行界面。用户可以直接在终端指定所有扫描参数,而无需修改源代码,从而支持灵活且可重复的审计工作流。
### 阶段 5 — 版本控制与协作
该项目通过名为 **Network-Scanner-Project** 的 GitHub 仓库进行管理。所有小组成员均通过各自的提交进行贡献,确保了具有可追溯性和可验证性的开发历史。该仓库包含完整的文档和设置说明。
- 🔗 **仓库:** [Network-Scanner-Project](https://github.com/Janiru-Sudasinghe/Network-Scanner-Project)
## 项目结构
```
Network-Scanner-Project/
│
├── scanner.py # Main source file — all scanning logic
├── README.md # Project documentation (this file)
└── requirements.txt # Dependency declaration (standard library only)
```
## 道德与法律免责声明
## 致谢
- 作为 **Python 编程 - 网络编程设计** 的提交作品开发
- 课程机构:*National Institute of Business Management (NIBM)*
- 提交者:**第 08 小组**
- 截止日期:2026 年 5 月 3 日,星期日
标签:argparse, CIDR解析, Maven构建, Python, Socket编程, TCP端口扫描, 企业网络安全, 内部审计, 子网扫描, 安全工程, 并发执行, 插件系统, 数据泄露防护, 无后门, 漏洞评估准备, 网络发现, 网络安全, 网络扫描器, 网络探测, 逆向工具, 隐私保护