当前位置:首页>python>电脑连不上网?别乱试!用一个Python脚本帮你3秒定位,一键搞定(小白也能用)

电脑连不上网?别乱试!用一个Python脚本帮你3秒定位,一键搞定(小白也能用)

  • 2026-09-02 19:18:36
电脑连不上网?别乱试!用一个Python脚本帮你3秒定位,一键搞定(小白也能用)
点击关注,一起学习更多IT知识
    前言:你有没有遇到过这些情况:
  1. 打不开网页,但微信还能用。
  2. 公司网络突然变慢,不知道哪里出问题?
  3. 连不上网,只会重启电脑。
  4. 大多数人遇到网络问题,只能“瞎试”,甚至还要找IT管理员。
  5. 其实,网络问题是可以自动诊断的。
  6. 我用Python做了一个:一键网络诊断工具(支持生成报告),以下是具体步骤,非常简单:
一、我们先看下我们做出来的界面效果,请看以下截图:
二、这个工具能做什么?针对这个问题,上述截图能看出个大概了,以下是详细介绍这个工具的检测功能:
  1. 是否是网关问题(局域网)。
  2. 是否是运营商/出口问题。
  3. 是否是DNS问题。
  4. 是否是网页访问问题 
  5. 并且:自动生成 HTML诊断报告。
  6. 带图形界面(小白也能用)。
  7. 已打包成 EXE,一键运行。
三、下面就开始制作的详细步骤:
  • 步骤1、安装Python,官网下载安装即可(记得勾选“Add to PATH”)。请看以下截图是检测是否安装成功的:
  • 步骤2、依赖包安装:“pip install requests”
  • 步骤3、制作名称为“network_tool_pro.py”脚本(核心),请看以下是可复制的源码:
import osimport socketimport platformimport subprocessfrom datetime import datetimeimport tkinter as tkfrom tkinter import scrolledtext, messageboximport requestsimport webbrowser# =============================# 基础工具函数# =============================def ping(host):    param = "-n" if platform.system().lower() == "windows" else "-c"    command = ["ping", param, "2", host]    return subprocess.call(command, stdout=subprocess.DEVNULL) == 0def check_dns(domain):    try:        ip = socket.gethostbyname(domain)        return True, ip    except:        return False, Nonedef get_gateway():    if platform.system().lower() == "windows":        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 gw    return Nonedef get_local_ip():    try:        hostname = socket.gethostname()        ip = socket.gethostbyname(hostname)        return ip    except:        return "未知"# =============================# 核心检测逻辑(国内优化版)# =============================def run_diagnosis(output_box):    output_box.delete(1.0, tk.END)    result_log = []    status = {        "gateway": False,        "internet": False,        "dns": False,        "http": False    }    def log(msg):        output_box.insert(tk.END, msg + "\n")        output_box.see(tk.END)        result_log.append(msg)    log("===== 网络诊断开始(国内优化版)=====")    # 本机信息    local_ip = get_local_ip()    log(f"本机IP: {local_ip}")    # 1. 网关检测    gateway = get_gateway()    if gateway:        log(f"网关: {gateway}")        if ping(gateway):            log("✅ 网关正常")            status["gateway"] = True        else:            log("❌ 网关不通(局域网问题)")            generate_report(result_log)            return    else:        log("❌ 未获取到网关")    # 2. 外网检测(国内DNS)    if ping("223.5.5.5") or ping("119.29.29.29"):        log("✅ 外网IP连通正常(阿里/腾讯DNS)")        status["internet"] = True    else:        log("❌ 无法访问外网(出口问题)")        generate_report(result_log)        return    # 3. DNS检测    ok, ip = check_dns("www.baidu.com")    if ok:        log(f"✅ DNS正常 -> {ip}")        status["dns"] = True    else:        log("❌ DNS解析失败")        generate_report(result_log)        return    # 4. HTTP检测    try:        r = requests.get("http://www.baidu.com", timeout=5)        if r.status_code == 200:            log("✅ HTTP访问正常(百度)")            status["http"] = True        else:            log("⚠️ HTTP状态异常")    except:        log("❌ HTTP访问失败(网页打不开)")    # =============================    # 智能判断(核心亮点🔥)    # =============================    log("\n===== 智能诊断结果 =====")    if not status["gateway"]:        log("👉 问题定位:局域网/网线/交换机故障")    elif not status["internet"]:        log("👉 问题定位:运营商/出口网络问题")    elif not status["dns"]:        log("👉 问题定位:DNS配置异常")    elif not status["http"]:        log("👉 问题定位:浏览器/防火墙/代理问题")    else:        log("🎉 网络完全正常!")    log("===== 诊断完成 =====")    generate_report(result_log)# =============================# HTML报告生成# =============================def generate_report(logs):    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")    filename = f"network_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"    html = f"""    <html>    <head>        <meta charset="utf-8">        <title>网络检测报告</title>        <style>            body {{ font-family: Arial; background: #f4f6f8; padding: 20px; }}            h1 {{ color: #333; }}            .ok {{ color: green; }}            .fail {{ color: red; }}            .warn {{ color: orange; }}            .box {{ background: #fff; padding: 20px; border-radius: 10px; }}        </style>    </head>    <body>        <div class="box">            <h1>网络检测报告</h1>            <p>时间: {now}</p>            <hr>    """    for line in logs:        if "✅" in line:            html += f"<p class='ok'>{line}</p>"        elif "❌" in line:            html += f"<p class='fail'>{line}</p>"        elif "⚠️" in line:            html += f"<p class='warn'>{line}</p>"        else:            html += f"<p>{line}</p>"    html += """        </div>    </body>    </html>    """    with open(filename, "w", encoding="utf-8") as f:        f.write(html)    # 自动打开报告    webbrowser.open(filename)    messagebox.showinfo("完成", f"报告已生成:{filename}")# =============================# GUI界面# =============================def create_gui():    window = tk.Tk()    window.title("网络一键诊断工具(终极版)")    window.geometry("720x520")    title = tk.Label(window, text="网络一键诊断工具(国内优化版)", font=("Arial", 16))    title.pack(pady=10)    output_box = scrolledtext.ScrolledText(window, width=85, height=22)    output_box.pack(padx=10, pady=10)    btn = tk.Button(window, text="开始检测", font=("Arial", 12),                    command=lambda: run_diagnosis(output_box))    btn.pack(pady=10)    window.mainloop()# =============================# 主程序# =============================if __name__ == "__main__":    create_gui()
四、可以测试了,直接使用cmd命令进入文件目录,运行Python文件。请看以下网络的2个情况:
  1. 我们先测试网络状态好的情况:
  2. 再测试网络不好的情况:
五、制作exe可执行文件:在cmd的文件目录命令下输入:
pyinstaller -F -w network_tool_pro.py
  •   注:以下截图是运行后,自动出现的exe文件。

六、总结:这个工具的本质,其实是:

  1. 把网工的排障经验,做成一个“人人能用”的工具。

  2. 以后再遇到网络问题,不用再瞎试。

  3. 点一下,就知道问题在哪里。

  4. 下期在这个功能上,加个一键修复,尽请关注!

最新文章

随机文章