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内核, 存活探测, 局域网扫描, 插件系统, 数据导出, 数据展示, 数据统计, 无后门, 服务识别, 白帽子, 端口扫描, 红队, 网段扫描, 网络安全, 网络安全工具, 网络扫描器, 网络排查, 逆向工具, 隐私保护