Joedom971/Ports-Scanners
GitHub: Joedom971/Ports-Scanners
一个用于探测主机开放端口的 Python 网络扫描工具,支持隐蔽扫描、多线程并发和多种报告格式输出。
Stars: 0 | Forks: 0
# 网络端口扫描器
一个用于扫描主机或本地网络上开放端口的 Python 工具。
作为网络学习项目开发。
## 什么是端口扫描器?
每台连接到网络的机器都通过**端口**进行通信。端口就像是一扇编号的入口(从 1 到 65535),服务可以通过它接收连接。
常见端口示例:
| 端口 | 服务 |
|------|---------|
| 22 | SSH(安全远程访问) |
| 80 | HTTP(网站) |
| 443 | HTTPS(安全网站) |
| 3389 | Windows 远程桌面 |
端口扫描器**尝试连接**机器的每个端口并观察响应:
- **open** → 端口响应,后面运行着服务
- **closed** → 端口响应但拒绝连接(没有运行任何服务)
- **filtered** → 无响应(被防火墙拦截或机器已关闭)
此工具用于绘制网络上活动服务的地图——对于系统管理、安全审计或仅仅是了解自己网络上运行的内容非常有用。
## 它是如何工作的?
### TCP connect 扫描(默认模式)
这是最简单的方法。对于每个端口,扫描器执行完整的 **TCP 三次握手**(互联网的基本协议):
```
Scanner → SYN → Machine cible
Scanner ← SYN-ACK ← Machine cible (port ouvert)
Scanner → ACK → Machine cible
Scanner → FIN → Machine cible (on ferme proprement)
```
如果机器回复 `RST`(reset)而不是 `SYN-ACK`,则端口关闭。
如果在配置的超时时间后没有任何响应,则端口被过滤。
### SYN 扫描(隐蔽模式,需要 sudo)
更隐蔽。扫描器只发送第一个 `SYN` 数据包,从不完成连接。连接从未完全建立,因此不会出现在应用程序的日志中。
```
Scanner → SYN → Machine cible
Scanner ← SYN-ACK ← Machine cible (port ouvert, mais on n'envoie pas le ACK)
```
此模式需要管理员权限(`sudo`),因为它直接在网络层发送**原始数据包**(raw packets),而不经过操作系统。
### 并行处理(为什么它很快)
以 1 秒超时逐个扫描 1024 个端口 = **17 分钟**。
使用 100 个并行线程 = **几秒钟**。
该项目使用 `ThreadPoolExecutor`:一组同时工作的线程池,每个线程扫描不同的端口。
## 项目结构
```
Port_scanner_Reseau/
├── cli.py → Interface interactive pas-à-pas (pour débuter)
├── main.py → Interface ligne de commande complète
├── scanner.py → Moteur de scan (la logique principale)
├── output.py → Export des résultats (txt, json, csv, html)
├── discovery.py → Découverte des machines actives sur un réseau
├── tests/ → Tests automatisés (57 tests)
└── documentation/ → Rapports de conception, tests, éthique
```
## 使用的库
### Python 标准库(无需安装)
**`socket`**
Python 的基础网络库。它是实际执行 TCP 连接的组件。它允许打开一个套接字(连接点),将其连接到 IP 地址 + 端口,并读取/写入数据。
```
sock.connect_ex(("192.168.1.1", 80)) # retourne 0 si ouvert
```
**`concurrent.futures` (ThreadPoolExecutor)**
管理并行线程池。`ThreadPoolExecutor` 自动在 N 个线程之间分配工作并收集结果,而不是手动启动和管理每个线程。
```
with ThreadPoolExecutor(max_workers=100) as executor:
futures = {executor.submit(scanner, port): port for port in ports}
```
**`subprocess`**
允许从 Python 执行系统命令——用于在通过 ICMP 发现主机时发送 ping(`ping -c 1 192.168.1.1`)。
**`ipaddress`**
解析和操作 IP 地址及 CIDR 网络(`192.168.1.0/24`)。允许计算子网的所有地址列表,而无需手动进行二进制计算。
**`argparse`**
处理命令行参数(`--target`、`--ports` 等)。自动生成 `--help` 消息。
**`json` / `csv`**
以这些标准格式导出结果。
**`threading`**
用于全局速率限制:一个所有线程共享的 `Lock`(锁)确保在启用 `--max-rate` 时一次只发送一个数据包。
**`html`**
在 HTML 报告中转义特殊字符(`<`、`>`、`&`)以避免代码注入。
### 可选库(需单独安装)
**`scapy`**
Python 网络数据包操作库。它允许“手工”构建原始 TCP/IP 数据包——这正是 SYN 扫描成为可能的原因。如果没有 scapy,扫描器会自动切换到 TCP connect 模式。
```
pkt = IP(dst="192.168.1.1") / TCP(dport=80, flags="S") # paquet SYN forgé
resp = sr1(pkt, timeout=1) # envoi et attente de réponse
```
Scapy 也用于本地网络主机发现时的 ARP 扫描。
**`tqdm`**
在扫描期间在终端显示进度条。纯粹是为了美观——如果缺失,扫描器仍可正常运行,只是没有进度条。
**`pytest`**
自动化测试框架。用于通过 57 个单元测试验证项目每个函数的行为是否正确。
## 隐蔽功能
为了减少被网络监控系统(IDS)检测:
**`--randomize`** — 在扫描前打乱端口顺序。顺序扫描(1、2、3、4...)是 IDS 立即可识别的特征。
**`--max-rate 2`** — 通过所有线程共享的全局锁将速率限制为每秒 2 个数据包。如果没有这个,100 个线程将同时发送 100 个数据包。
**`--jitter 0.3`** — 添加 0 到 0.3 秒之间的随机延迟。固定延迟产生可检测的规律节奏;可变延迟更像人类流量。
**单次 DNS 解析** — 如果你扫描 `monserveur.local`,该名称在开始时仅解析为 IP 一次,而不是每次连接都解析。避免了网络上可见的 N 次 DNS 查询。
## 安装与使用
### 前置条件
- Python 3.10 或更高版本
- VS Code *(推荐)*
### 首次安装(VS Code)
```
# 在 VS Code 终端 (Ctrl+`)
python3 -m venv .venv # crée un environnement Python isolé
source .venv/bin/activate # l'active
pip install -r requirements.txt # installe les dépendances
```
### 运行扫描器
```
# 交互模式 (推荐)
python cli.py
# 直接命令行
python main.py --target 192.168.1.1 --ports 22,80,443 --output rapport.html
```
### 运行测试
```
python -m pytest tests/ -v
# 57 项测试,预期结果:57 passed
```
## 结果示例
```
Scan de 192.168.1.1 — 5 ports (connect)
22 open ssh SSH-2.0-OpenSSH_8.9
80 filtered http
443 closed https
3389 filtered ms-wbt-server
8080 filtered http-alt
open: 1 closed: 1 filtered: 3
```
## ⚠️ 法律声明
**未经授权**扫描网络是非法的。
在比利时,2000 年 11 月 28 日关于计算机犯罪的法律惩罚未经授权访问计算机系统的行为。欧盟 NIS2 指令加强了关键基础设施的这些义务。
**允许的用途:** 你自己的网络、你管理的机器、测试环境、经所有者书面同意的渗透测试。
**禁止的用途:** 未经许可扫描第三方机器或网络。
标签:AES-256, Awesome, DInvoke, DNS查询工具, Facebook API, GitHub, HTML报告, JSON报告, Python, Qt框架, Scapy, SYN扫描, TCP/IP, 二进制发布, 交互式界面, 反检测, 域名解析, 套接字编程, 学习项目, 安全规则引擎, 密码管理, 局域网扫描, 开源工具, 插件系统, 无后门, 服务识别, 漏洞评估, 端口扫描器, 系统管理, 网络安全, 逆向工具, 防御绕过, 限速, 随机化, 隐私保护, 隐蔽扫描