ashishkra065/Network-scanner-project
GitHub: ashishkra065/Network-scanner-project
一款基于 Python 和 Nmap 的网络扫描器,将 TCP 端口发现、Banner 抓取、服务/版本检测、OS 识别与漏洞检查整合为端到端的侦察工作流。
Stars: 0 | Forks: 0
# 🔍 Python 网络漏洞扫描器
一款基于 Python 的网络安全评估工具,旨在执行 **TCP 端口发现、Banner 抓取、服务/版本检测、OS 识别以及基于 Nmap 的漏洞扫描**。
本项目展示了网络侦察和漏洞评估中使用的实用概念。
## ⚙️ 工作原理
扫描器遵循以下工作流程:
```
Target IP / Hostname
│
▼
TCP Port Scanning
(Python Socket)
│
▼
Open Ports
│
┌─────────┴─────────┐
▼ ▼
Banner Grabbing Nmap Scanning
│
┌────────┴────────┐
▼ ▼
OS & Service Vulnerability
Detection Checks
│ │
└────────┬────────┘
▼
Scan Results
```
### 1. TCP 端口扫描
用户提供以下信息:
```
Target IP/Hostname
Starting Port
Ending Port
```
扫描器使用 Python 的 `socket` 库尝试对指定范围内的每个端口进行 TCP 连接。
概念如下:
```
socket.connect_ex((target, port))
```
成功连接的端口将被识别为 **OPEN**。
示例:
```
[SCAN] Checking port 21...
[-] Port 21 is closed
[SCAN] Checking port 22...
[+] Port 22 is OPEN
[SCAN] Checking port 80...
[+] Port 80 is OPEN
```
### 2. Banner 抓取
在发现开放端口后,扫描器会尝试获取服务 Banner。
```
sock.recv(1024)
```
根据协议的不同,Banner 可以提供有关运行在该端口上的服务的信息。
示例:
```
22 → SSH
80 → HTTP
443 → HTTPS
```
### 3. Nmap 服务检测
扫描器通过以下方式集成 Nmap:
```
nmap -sV
```
`-sV` 执行 **服务/版本检测**。
这有助于确定与暴露服务相关联的软件。
### 4. 操作系统检测
扫描器还会使用:
```
nmap -O
```
`-O` 启用 Nmap 的操作系统检测。
因此,扫描器可以收集有关目标可能的操作系统的信息。
### 5. 漏洞扫描
项目执行:
```
nmap --script=vuln
```
Nmap 的 NSE 漏洞类别脚本会对与检测到的服务相关的潜在漏洞执行检查。
目前的实现将这些功能组合如下:
```
nmap -O -sV --script=vuln
```
因此,整个 Nmap 阶段执行的操作为:
```
OS Detection
+
Service/Version Detection
+
NSE Vulnerability Checks
```
## ▶️ 运行扫描器
启动程序:
```
python scanner.py
```
扫描器会要求输入:
```
Enter the target IP or Hostname:
Enter the starting port for scanning:
Enter the ending port for scanning:
```
示例:
```
Enter the target IP or Hostname: 192.168.1.10
Enter the starting port for scanning: 1
Enter the ending port for scanning: 1000
```
生成的工作流程如下:
```
192.168.1.10
│
├── Scan ports 1-1000
│
├── Identify open ports
│
├── Attempt banner grabbing
│
├── Detect services
│
├── Attempt OS detection
│
└── Run vulnerability checks
```
# 🎯 使用场景
### 攻击面评估
识别服务器或网络资产暴露的 TCP 端口。
```
Server
├── 22 SSH
├── 80 HTTP
└── 443 HTTPS
```
这提供了面向网络的攻击面的初始概览。
### 服务枚举
使用 Banner 抓取和 Nmap 服务检测来识别与发现的端口相关联的服务。
适用于以下场景:
**网络安全评估 → 资产发现 → 服务枚举 → 漏洞评估**
### 漏洞评估
Nmap NSE 漏洞脚本对与暴露服务相关的潜在漏洞提供自动化检查。
这有助于识别需要进一步调查或修复的系统。
### 安全监控实验室
扫描器可以针对授权的实验室主机生成侦察流量。
随后可以使用以下工具观察该流量:
```
Scanner
│
▼
Target
│
├── Firewall Logs
├── IDS/IPS
├── SIEM
└── Network Monitoring
```
这使得该项目在练习**攻击性侦察和防御性检测**时都非常实用。
### 网络暴露验证
管理员可以对比预期和观察到的服务。
例如:
```
Expected:
22, 443
Detected:
22, 80, 443, 3306
Unexpected:
80
3306
```
随后可以对意外暴露的服务进行调查。
# ⚡ 性能提升 — 多线程
目前的扫描器**按顺序**执行端口扫描。
```
Port 1
↓
wait
↓
Port 2
↓
wait
↓
Port 3
↓
wait
```
在扫描数百或数千个端口时,这可能会变得非常缓慢,因为 socket 连接主要是 **I/O 密集型** 的。
未来的版本可以使用 Python 的:
```
ThreadPoolExecutor
```
来并发执行多个连接尝试。
概念如下:
```
Current
Worker → 21 → 22 → 23 → 24 → 25 → ...
Multithreaded
Worker 1 ──► 21
Worker 2 ──► 22
Worker 3 ──► 23
Worker 4 ──► 24
Worker 5 ──► 25
```
有界工作线程池可以显著减少扫描时间,同时防止程序创建过多的线程。
设计示例:
```
with ThreadPoolExecutor(max_workers=50) as executor:
results = executor.map(scan_port, ports)
```
随后可以使用扫描器现有的计时功能对性能进行基准测试:
```
Sequential
Ports: 1-1000
Time: X seconds
Multithreaded
Ports: 1-1000
Workers: 50
Time: Y seconds
```
这提供了一种可量化的方式,用于展示**并发如何提升网络 I/O 工作负载的性能**。
## 🛡️ 授权使用
本项目适用于:
- 网络安全教育
- 个人安全实验室
- CTF 环境
- 授权的漏洞评估
- 网络安全测试
未经授权,请勿扫描系统。
标签:CTI, Python, 密码管理, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护