zero-day348/Python-Host-Port-Scanner
GitHub: zero-day348/Python-Host-Port-Scanner
一款基于 Python 标准库的多线程局域网主机发现与端口扫描工具,集存活探测、TCP 端口扫描、服务识别与结果导出于一体。
Stars: 1 | Forks: 0
# Python-Host-Port-Scanner
基于 Python 开发的**多线程主机发现与端口扫描工具**,面向网络学习与局域网网络状态排查场景,集成存活主机探测、TCP 端口扫描、服务版本识别、扫描结果导出等能力。
## 项目特点
- 局域网存活主机批量发现,支持自定义 IP 网段扫描
- 基于 Socket 实现 TCP 全连接端口探测,识别常见端口与对应服务
- 支持服务 Banner 抓取与基础版本信息识别
- 采用 `Thread + Queue + Lock` 多线程并发模型,提升扫描效率
- 命令行参数配置,支持指定目标、端口范围、线程数
- 扫描结果支持导出为 JSON / TXT 结构化报告
## 技术栈
- Python 基础编程
- Socket 网络编程、TCP/IP 协议理解
- 多线程并发:Thread / Queue / Lock
- 系统调用:subprocess 调用系统 Ping 探测主机
- 命令行参数解析:argparse
- 数据序列化与持久化:JSON、文本文件读写
## 安装依赖
本项目为原生 Python 实现,**无需额外安装第三方库**,内置模块即可运行。
## 使用方法
### 1. 扫描单个主机端口
python scanner.py --host 192.168.1.1 --ports 1-1000 --threads 20
### 2. 整网段主机发现 + 端口扫描
python scanner.py --network 192.168.1 --start 1 --end 50 --ports 21,22,80,443,3306
### 3. 指定输出格式
python scanner.py --host 192.168.1.1 --format txt --output scan_result.txt
## 参数说明
| 参数 | 作用 |
|------|------|
| --host | 指定单个扫描目标 IP |
| --network | 指定扫描网段,如 192.168.1 |
| --start / --end | 网段扫描起始/结束 IP 号位 |
| --ports | 指定端口,支持单端口、逗号分隔、区间 1-1000 |
| --threads | 设置并发线程数 |
| --format | 输出格式:json / txt |
| --output | 自定义输出文件名 |
## 核心实现原理
1. **主机发现**:通过调用系统 Ping 命令 + 基础 TCP 端口探测,综合判断主机是否在线;
2. **端口扫描**:基于 Socket 建立 TCP 连接,根据连接状态判断端口开放情况;
3. **服务识别**:向开放端口发送规范请求,抓取 Banner 与响应头识别服务版本;
4. **并发优化**:队列统一管理扫描任务,多线程并行处理,线程锁保证输出与写入安全。
## 适用场景
- 计算机网络协议学习实践
- 局域网设备存活状态排查
- 后端/网络编程技术练手项目
- 课程设计、个人简历技术项目背书
## 免责声明
本项目仅用于**网络技术学习、个人局域网设备自查**,请在合法授权范围内使用,禁止用于未授权网络探测与违规行为。
标签:argparse, Banner抓取, DNS枚举, Homebrew安装, IT运维, Python, Qt框架, Socket编程, Socks5代理, TCP/IP, Windows内核, 存活探测, 局域网扫描, 插件系统, 数据导出, 数据展示, 数据统计, 无后门, 服务识别, 白帽子, 端口扫描, 红队, 网段扫描, 网络安全, 网络安全工具, 网络扫描器, 网络排查, 逆向工具, 隐私保护