乐于分享
好东西不私藏

电脑断网别慌!一脚本,一键修复网络问题(附完整实现)

电脑断网别慌!一脚本,一键修复网络问题(附完整实现)
点击关注,一起学习更多IT知识
    前言:还在用这几种方式解决断网?
  1. 重启电脑 、拔网线 、找网管 、手动改DNS 。
  2. 很多人遇到网络问题,其实都在“瞎折腾”。
  3. 我做了个工具,解决这些问题: 一键检测、一键修复、自动连WiFi、自动生成报告。
一、我们来先看这个工具原理及最终要做到的效果图:
  • 检测功能,一键检测:

  1. 检测网关是否正常。

  2. 检测外网连通性。

  3. 检测DNS是否异常。

  4. 检测HTTP访问。

  5. 自动分析问题,并生成报告。

  • 修复功能,一键修复所有问题:

  1. 自动启用网卡。

  2. 修复IP地址。

  3. 修复DNS。

  4. 重置网络协议。

  5. 智能WiFi连接。

  6. 自动扫描附近WiFi。

  7. 自动选择信号最强。

  8. 自动连接已保存网络。

  9. 自动生成报告。

二、直接开始部署,请看以下详细步骤:

   步骤1、安装 Python+依赖包“requests”,由于太过简单,可以看上一篇链接里,请看以下链接:电脑连不上网?别乱试!用一个Python脚本帮你3秒定位,一键搞定(小白也能用)

   步骤2、建立一个名称为network_tool.py”的Python文件,由于代码过长,我放以下链接里了,请复制以下链接到浏览器后,直接可打开代码:

https://gitee.com/IT_pangge/it-explorer-fat-brother/raw/master/network_tool
  • 注:“network_tool.py”代码展示:

import osimport socketimport subprocessimport platformimport timefrom datetime import datetimeimport tkinter as tkfrom tkinter import scrolledtext, messageboximport requestsimport webbrowser# =============================# 基础工具# =============================defping(host):    param = "-n"if platform.system().lower() == "windows"else"-c"return subprocess.call(["ping", param, "2", host],                           stdout=subprocess.DEVNULL) == 0defcheck_dns(domain):try:returnTrue, socket.gethostbyname(domain)except:returnFalseNonedefget_gateway():try:        result = subprocess.check_output("ipconfig", encoding="gbk", errors="ignore")for line in result.split("\n"):if"默认网关"in line or"Default Gateway"in line:                gw = line.split(":")[-1].strip()if gw:return gwexcept:passreturnNonedefget_local_ip():try:return socket.gethostbyname(socket.gethostname())except:return"未知"# =============================# WiFi模块# =============================defget_wifi_interface():try:        result = subprocess.check_output("netsh wlan show interfaces",            encoding="gbk",            errors="ignore"        )for line in result.split("\n"):if"名称"in line or"Name"in line:return line.split(":")[1].strip()except:returnNonedefget_wifi_status():try:        result = subprocess.check_output("netsh wlan show interfaces",            encoding="gbk",            errors="ignore"        )return ("已连接"in result or"connected"in result)except:returnFalsedefscan_wifi():try:        result = subprocess.check_output("netsh wlan show networks mode=bssid",            encoding="gbk",            errors="ignore"        )except:return []    networks = []    ssid = Nonefor line in result.split("\n"):        line = line.strip()if line.startswith("SSID"):            ssid = line.split(":")[1].strip()if"信号"in line or"Signal"in line:            signal = int(line.split(":")[1].replace("%""").strip())if ssid:                networks.append((ssid, signal))return networksdefget_saved_wifi():    result = subprocess.check_output("netsh wlan show profiles",        encoding="gbk",        errors="ignore"    )    profiles = []for line in result.split("\n"):if"所有用户配置文件"in line or"All User Profile"in line:            profiles.append(line.split(":")[1].strip())return profilesdefconnect_wifi(ssid, log):    interface = get_wifi_interface()ifnot interface:        log("❌ 未找到WiFi网卡")returnFalse    log(f"📶 连接WiFi: {ssid}(接口: {interface})")    os.system(f'netsh wlan connect name="{ssid}" interface="{interface}"')    time.sleep(3)if get_wifi_status():        log("🎉 WiFi连接成功")returnTrueelse:        log("❌ WiFi连接失败")returnFalsedefsmart_connect_wifi(log):    networks = scan_wifi()    saved = get_saved_wifi()ifnot networks:        log("❌ 未扫描到WiFi")returnFalse    networks.sort(key=lambda x: x[1], reverse=True)for ssid, signal in networks:if ssid in saved:            log(f"📡 尝试最优WiFi: {ssid}{signal}%)")if connect_wifi(ssid, log):returnTrue    log("❌ 没有可连接的WiFi")returnFalse# =============================# 网卡管理# =============================defget_adapters():    result = subprocess.check_output("netsh interface show interface",        encoding="gbk",        errors="ignore"    )    adapters = []for line in result.split("\n"):if"Connected"in line or"已连接"in line or"Disconnected"in line:            parts = line.split()if len(parts) >= 4:                adapters.append((parts[-1], parts[0]))return adaptersdefenable_adapter(name, log):    log(f"🔧 启用网卡: {name}")    os.system(f'netsh interface set interface "{name}" enabled')# =============================# 网络检测# =============================defrun_diagnosis(output_box):    output_box.delete(1.0, tk.END)    logs = []    status = {"gateway"False,"internet"False,"dns"False,"http"False    }deflog(msg):        output_box.insert(tk.END, msg + "\n")        output_box.see(tk.END)        logs.append(msg)    log("===== 网络诊断开始 =====")    log(f"本机IP: {get_local_ip()}")ifnot get_wifi_status():        log("⚠️ WiFi未连接")    gateway = get_gateway()if gateway and ping(gateway):        log("✅ 网关正常")        status["gateway"] = Trueelse:        log("❌ 网关异常")if ping("223.5.5.5"or ping("119.29.29.29"):        log("✅ 外网正常")        status["internet"] = Trueelse:        log("❌ 外网不通")    ok, ip = check_dns("www.baidu.com")if ok:        log(f"✅ DNS正常 -> {ip}")        status["dns"] = Trueelse:        log("❌ DNS异常")try:if requests.get("http://www.baidu.com", timeout=5).status_code == 200:            log("✅ HTTP正常")            status["http"] = Trueexcept:        log("❌ HTTP异常")    generate_report(logs)return status# =============================# 自动修复(最终版)# =============================defauto_fix(output_box, status):deflog(msg):        output_box.insert(tk.END, msg + "\n")        output_box.see(tk.END)    log("\n===== 开始自动修复 =====")ifnot status:        messagebox.showwarning("提示""请先检测网络")returnif all(status.values()):        messagebox.showinfo("提示""网络正常,无需修复 👍")returntry:# 1. 启用被禁用网卡        adapters = get_adapters()for name, state in adapters:if"Disabled"in state or"禁用"in state:                enable_adapter(name, log)# 2. 修复网络协议        log("🔧 修复IP/DNS...")        os.system("ipconfig /release")        os.system("ipconfig /renew")        os.system("ipconfig /flushdns")        os.system("netsh winsock reset")        os.system("netsh int ip reset")# 3. WiFi重连(最后执行🔥)ifnot get_wifi_status():            log("📡 尝试恢复WiFi连接...")            smart_connect_wifi(log)        log("✅ 修复完成")        messagebox.showinfo("完成""修复完成,请重新检测")except Exception as e:        messagebox.showerror("错误", str(e))# =============================# 报告# =============================defgenerate_report(logs):    file = f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"    html = "<html><body><h2>网络报告</h2><hr>"for l in logs:        html += f"<p>{l}</p>"    html += "</body></html>"with open(file, "w", encoding="utf-8"as f:        f.write(html)    webbrowser.open(file)# =============================# GUI(美化版)# =============================defgui():    win = tk.Tk()    win.title("网络诊断与自动修复工具(Pro版)")    win.geometry("760x600")    win.configure(bg="#f5f6fa")    title = tk.Label(win, text="网络诊断与自动修复工具",                     font=("微软雅黑"18"bold"),                     bg="#f5f6fa")    title.pack(pady=10)    box = scrolledtext.ScrolledText(win, width=90, height=25,                                    font=("Consolas"10))    box.pack(padx=10, pady=10)    state = {"s"None}defcheck():        state["s"] = run_diagnosis(box)deffix():if state["s"isNone:            messagebox.showwarning("提示""请先检测网络")return        auto_fix(box, state["s"])    frame = tk.Frame(win, bg="#f5f6fa")    frame.pack(pady=10)    tk.Button(frame, text="🔍 开始检测", command=check,              width=15, bg="#00a8ff", fg="white").grid(row=0, column=0, padx=10)    tk.Button(frame, text="🛠 一键修复", command=fix,              width=15, bg="#44bd32", fg="white").grid(row=0, column=1, padx=10)    win.mainloop()if __name__ == "__main__":    gui()

三、直接进入文件目录,运行Python文件测试,请看以下截图:

  • 注:断网和联网测试截图,即一开始展示的效果图:

四、直接进入文件目录打包成可执行的exe文件请看以下截图:

五、测试总结:

  • 实际测试效果:我测试了这些可修复场景:

  1. WiFi断开✅

  2. 网卡禁用✅

  3. DNS错误✅

  4. DHCP异常 ✅

  5. 网络卡死✅

  • 不能修复的情况,这些属于物理问题:

  1. 网线没插 ❌

  2. 路由器断网 ❌

  3. 运营商故障 ❌