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, 二进制发布, 交互式界面, 反检测, 域名解析, 套接字编程, 学习项目, 安全规则引擎, 密码管理, 局域网扫描, 开源工具, 插件系统, 无后门, 服务识别, 漏洞评估, 端口扫描器, 系统管理, 网络安全, 逆向工具, 防御绕过, 限速, 随机化, 隐私保护, 隐蔽扫描