RaiSan001/Port_Scanner
GitHub: RaiSan001/Port_Scanner
基于 Python 的多线程端口扫描器,用于快速发现目标 IP 的开放端口。
Stars: 0 | Forks: 0
# 多线程端口扫描器及数据库记录
一个用Python编写的实用多线程端口扫描器,它使用多线程扫描目标IP地址的开放端口,并将历史结果记录到MySQL数据库中。
## 功能
* **多线程执行:** 使用Python的`ThreadPoolExecutor`同时扫描多个端口,防止工具因单个缓慢的网络连接而挂起。
* **结果持久化:** 将扫描状态(`开放`、`关闭`或`过滤`)存储在MySQL数据库中,而不仅仅是打印到终端。
* **基本缓存:** 在扫描端口之前检查数据库。如果端口之前已被扫描,则跳过它以节省网络流量,除非明确请求重新扫描。
* **输入验证:** 使用Python的本地`ipaddress`模块验证IP地址和端口范围,以防止因输入错误而导致运行时崩溃。
* **线程安全输出:** 使用线程锁(`threading.Lock`)确保在并行执行期间终端打印语句不会相互覆盖或混乱。
## 要求
- Python 3.x
- 标准库模块:
- socket
- threading
- concurrent.futures
- 外部包:
- mysql-connector-python
- python-dotenv
## 安装
1. 克隆此存储库或下载项目文件
2. 安装所需的包:
pip install mysql-connector-python python-dotenv
3. 为存储扫描结果设置MySQL数据库
4. 在项目根目录中创建一个`.env`文件,包含以下变量:
DB_HOST=localhost
DB_USER=your_mysql_user
DB_PASSWORD=your_mysql_password
DB_NAME=scanner_db
5. 在您的MySQL数据库中创建一个用于存储扫描结果的表:
CREATE DATABASE IF NOT EXISTS scanner_db;
USE scanner_db;
CREATE TABLE IF NOT EXISTS port_scans (
ip VARCHAR(45) NOT NULL,
port INT NOT NULL,
status VARCHAR(10) NOT NULL,
PRIMARY KEY (ip, port)
);
## 使用方法
使用Python运行脚本:
```
python main.py
```
## 工作原理
1. **输入设置:** 脚本接受目标IP和端口范围,验证它们是否有效。
2. **并发:** 它启动一个并行工作线程池(默认为20个)。
3. **网络检查:** 每个线程使用1.0秒的超时打开TCP套接字连接。如果连接成功,端口为`开放`。如果超时,则标记为`过滤`(可能位于防火墙后面)。如果直接拒绝,则标记为`关闭`。
4. **数据库同步:** 线程使用环境配置打开到MySQL的连接,更新或插入端口状态,并在完成后清理。
## 示例
```
Target IP: 127.0.0.1
Start Port: 20
End Port: 85
Force fresh rescan? (y/n): n
Initializing parallel scan with 20 worker threads...
Scan process finished.
--- Open Ports Found for 127.0.0.1 ---
-> Port 22
-> Port 80
```
## 许可证
此项目是开源的,可用于个人和教育用途。
标签:ETW劫持, IP地址验证, Python, 历史记录, 安全性, 性能优化, 情报分析, 数据库, 数据库存储, 数据统计, 无后门, 日志记录, 检测绕过, 环境配置, 端口扫描, 线程安全, 缓存机制, 网络工具, 网络扫描工具, 网络编程, 网络诊断, 脚本执行, 逆向工具