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, 历史记录, 安全性, 性能优化, 情报分析, 数据库, 数据库存储, 数据统计, 无后门, 日志记录, 检测绕过, 环境配置, 端口扫描, 线程安全, 缓存机制, 网络工具, 网络扫描工具, 网络编程, 网络诊断, 脚本执行, 逆向工具