sameerdpatel16/basic-port-scanner
GitHub: sameerdpatel16/basic-port-scanner
一个使用 Python 实现的教学型 TCP 端口扫描器,演示完整连接扫描原理并支持多线程加速。
Stars: 0 | Forks: 0
# 基本端口扫描器
一个使用 Python 编写的 TCP 连接端口扫描器,演示了像 nmap 这样的工具在底层是如何工作的。
## 工作原理
每台计算机都有 65,535 个端口。端口扫描器会探测每个端口以查找正在监听的服务。
此扫描器使用 **TCP Connect 扫描**,与 `nmap -sT` 相同的扫描技术:
1. **SYN** → 扫描器敲门
2. **SYN-ACK** ← 端口开放并响应
3. **ACK** → 连接建立 → **端口开放**
4. 如果收到 **RST** 或超时 → **端口关闭 / 被过滤**
使用线程技术同时扫描多个端口,而不是逐个顺序等待。
## 用法
```
# 扫描默认端口 1-1024
python scanner.py
# 扫描自定义端口范围
python scanner.py 192.168.1.1 -p 1-65535
# 使用更多线程进行快速扫描
python scanner.py 192.168.1.1 -p 1-1000 -t 200
# 调整超时(对慢速网络有用)
python scanner.py 192.168.1.1 -p 1-1024 --timeout 2.0
```
## 示例输出
```
[*] Target : 192.168.100.5 (192.168.100.5)
[*] Ports : 1 - 1024
[*] Started : 2025-11-01 14:22:01
[*] Scanning 192.168.100.5 — ports 1 to 1024
[*] Threads: 100 | Timeout: 1.0s per port
=======================================================
Scan Results for: 192.168.100.5 (192.168.100.5)
=======================================================
PORT SERVICE BANNER
--------------------------------------------------
22 SSH SSH-2.0-OpenSSH_8.9p1
80 HTTP
3306 MySQL
3 open port(s) found in 4.31s
=======================================================
```
## 关键概念
| 概念 | 描述 |
|---|---|
| TCP 套接字 | 连接端点 — `AF_INET`(IPv4)+ `SOCK_STREAM`(TCP) |
| connect_ex() | 连接成功返回 0(端口开放),失败返回非零值 |
| 横幅抓取 | 读取服务的问候消息以识别运行的服务 |
| 线程 | 并行扫描端口,而不是逐个扫描 |
| 超时 | 等待多长时间后判定端口被过滤 |
## 与 nmap 相比
| 功能 | 本扫描器 | nmap -sT | nmap -sS |
|---|---|---|---|
| 方法 | 完整 TCP 连接 | 完整 TCP 连接 | 半开放 SYN |
| 需要 root 权限 | 否 | 否 | 是 |
| 速度 | 中等 | 中等 | 快速 |
| 可检测性 | 是 | 是 | 更难 |
| 横幅抓取 | 是 | 可选 | 否 |
## 法律声明
仅扫描您拥有或明确获得授权测试的系统。未经授权的端口扫描在您所在的司法管辖区可能属非法行为。
标签:Banner抓取, connect_ex, IPv4, Linux工具, Nmap, Python网络编程, Socket编程, TCP Connect扫描, 二进制发布, 并发扫描, 开源工具, 扫描器, 数据泄露防护, 数据统计, 端口扫描, 端口探测, 端口服务识别, 网络安全, 网络探测, 虚拟驱动器, 逆向工具, 隐私保护