GabriellaPompeu/Python-TCP-Port-Scanner
GitHub: GabriellaPompeu/Python-TCP-Port-Scanner
基于 Python 原生 Socket 和线程池实现的并发 TCP 端口扫描器,帮助用户理解网络通信原理并进行端口状态检测。
Stars: 0 | Forks: 0
# Python TCP 端口扫描器
## 关于本项目
这是我第一个专注于网络和网络安全的项目。
其目标是仅使用 Python 的原生资源开发一个 TCP 端口扫描器,旨在理解客户端与服务器之间的通信过程是如何运作的。
除了构建一个功能完备的工具外,我还利用这个项目学习了一些基础概念,这将为我未来在网络安全领域的更高级项目奠定基础。
# 目标
在开发这个项目的过程中,我试图回答以下问题:
* 计算机是如何建立 TCP 连接的?
* 端口处于开放状态到底意味着什么?
* 端口扫描器在内部是如何工作的?
* 如何利用并发来加速网络处理过程?
* 如何以模块化的方式组织 Python 项目?
# 使用的技术
* Python 3
* Socket
* ThreadPoolExecutor
* Concurrent Futures
# 项目结构
```
PortScanner/
│
├── main.py
├── scanner.py
└── README.md
```
每个文件都有特定的职责。
* **main.py** 负责与用户的交互。
* **scanner.py** 包含了 socket 创建、端口扫描和并发的所有逻辑。
这种分离使代码更有组织性,也方便了未来的修改。
# 我学到的概念
在这个项目中,我学到了许多重要的概念。
## Socket
我理解了 socket 代表着网络中两台设备之间的一个通信端点。
我还学会了如何使用 Python 的原生库来创建和配置 socket。
## TCP
我开始了解 TCP 连接是如何工作的,以及为什么它要求服务器在特定端口上进行监听。
## 端口
我了解到端口用于标识运行在计算机上的服务。
开放的端口表示有一个进程正在等待连接。
关闭的端口表示没有服务在该地址上进行监听。
## connect_ex()
我理解了 `connect()` 和 `connect_ex()` 之间的区别。
我使用了 `connect_ex()`,因为它会返回错误代码,从而能够在不中断程序执行的情况下识别每个端口的状态。
## 错误处理
我利用操作系统返回的代码来识别开放的端口、关闭的端口以及超时的连接。
## 并发
我学会了使用 `ThreadPoolExecutor` 来同时进行多个连接。
我也明白了为什么网络应用程序即使在处理器核心很少的计算机上也能使用数百个线程。
## Future
我了解到,提交给 ThreadPool 的每个任务都会返回一个 `Future` 对象,代表着未来将会产生的一个结果。
## as_completed()
我学会了在每个任务完成时收集结果,从而使处理更加高效。
## 模块化
我将项目组织成小型且可重用的函数,并将职责划分到各个模块中。
这种组织方式使代码更易于维护和理解。
# 结果
在项目结束时,我能够开发出一个具备以下功能的 TCP 扫描器:
* 接收一个 host。
* 接收一个端口范围。
* 同时扫描多个端口。
* 报告每个端口的状态。
* 利用并发显著减少执行时间。
# 个人心得
这个项目标志着我对网络实践学习的开端。
除了学习 Python 语言的新功能外,我也开始理解各种网络安全工具的内部运行机制。
比起仅仅构建一个端口扫描器,更重要的是,这个项目教会了我如何将大问题拆解为小函数,更好地组织我的代码,并在开始编程之前先思考架构。
这些知识将为我未来涉及网络协议、流量分析、自动化和攻击性安全的项目奠定基础。
标签:DNS查询工具, Python, TCP/IP, 插件系统, 无后门, 端口扫描器, 网络安全, 网络工具, 隐私保护