如何用Python批量验证MySQL服务器默认账号密码并输出可用IP
当然有简便的实现方式!我帮你整理了一套实用的批量测试方案,核心就是遍历IP列表逐个尝试连接,捕获异常后只保留成功的结果。
批量MySQL连接测试实现
1. 核心思路
通过循环遍历你的服务器IP列表,对每个IP尝试使用预设的账号密码建立连接,利用异常捕获跳过连接失败的情况,最后仅输出连接成功的IP地址。
2. 完整代码示例
import mysql.connector from mysql.connector import Error # 配置预设的默认账号密码 DEFAULT_USER = "yourusername" DEFAULT_PASSWORD = "yourpassword" # 替换成你的服务器IP列表 mysql_server_ips = [ "192.168.1.20", "192.168.1.21", "localhost", "10.1.0.15", "10.1.0.16" ] def check_mysql_connectivity(host_ip): """测试单个IP的MySQL连接是否成功""" try: # 尝试建立连接,可添加超时避免卡顿 conn = mysql.connector.connect( host=host_ip, user=DEFAULT_USER, password=DEFAULT_PASSWORD, connection_timeout=5 # 5秒超时,可根据需求调整 ) if conn.is_connected(): conn.close() # 成功连接后及时关闭 return True except Error: # 连接失败时静默跳过,不输出错误信息 pass return False # 执行测试并输出结果 print("可成功连接的MySQL服务器IP:") for ip in mysql_server_ips: if check_mysql_connectivity(ip): print(ip)
3. 实用优化建议
- 从文件加载IP列表:如果服务器数量很多,把IP写入文本文件(每行一个IP),用以下代码读取:
with open("mysql_servers.txt", "r", encoding="utf-8") as f: mysql_server_ips = [line.strip() for line in f if line.strip()] - 多线程加速测试:服务器数量超过几十台时,用多线程并行测试能大幅节省时间,示例片段:
import threading def test_and_print(ip): if check_mysql_connectivity(ip): print(ip) print("可成功连接的MySQL服务器IP:") threads = [] for ip in mysql_server_ips: t = threading.Thread(target=test_and_print, args=(ip,)) threads.append(t) t.start() for t in threads: t.join() - 添加详细日志(可选):如果需要记录失败原因,可以在
except块里打印错误信息,用于排查问题:except Error as e: print(f"IP {host_ip} 连接失败: {e}")
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

