You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python获取局域网内计算机的硬件与系统信息

局域网内远程获取计算机硬件与系统信息方案

需求概述

需要获取局域网内多台计算机的以下信息:

  • IP地址、MAC地址
  • 计算机名、当前登录用户
  • 内存(RAM)、主板信息
  • 操作系统版本、处理器信息
    当前仅能通过platform、Win32_ComputerSystem获取本机信息,前提是目标计算机均拥有相同的管理员账号,需实现远程获取方案。

实现思路

Windows局域网环境下,通过WMI(Windows Management Instrumentation)远程连接实现:

  1. 利用WMI的远程访问能力,传入目标计算机的IP/主机名、管理员账号和密码,建立远程WMI连接
  2. 通过远程WMI实例,查询对应的Win32类获取所需信息:
    • Win32_ComputerSystem:计算机名、RAM、当前用户、系统类型
    • Win32_OperatingSystem:操作系统版本
    • Win32_Processor:处理器信息
    • Win32_BaseBoard:主板制造商、型号
    • Win32_NetworkAdapterConfiguration:IP、MAC地址(筛选启用的网卡)

代码示例

以下是支持远程获取的GUI工具代码,可输入目标IP、管理员账号密码获取信息:

import tkinter as tk
from tkinter import messagebox
import wmi

def get_remote_info():
    target_ip = entry_ip.get().strip()
    username = entry_user.get().strip()
    password = entry_pwd.get().strip()
    
    if not all([target_ip, username, password]):
        messagebox.showerror("错误", "请填写完整信息")
        return
    
    try:
        # 建立远程WMI连接
        remote_wmi = wmi.WMI(computer=target_ip, user=username, password=password)
        
        # 获取系统基础信息
        cs = remote_wmi.Win32_ComputerSystem()[0]
        ram = str(round(int(cs.TotalPhysicalMemory) / (1024.0 **3)))+" GB"
        current_user = cs.UserName.split('\\')[-1] if cs.UserName else "无登录用户"
        
        # 获取操作系统信息
        os = remote_wmi.Win32_OperatingSystem()[0]
        os_version = f"{os.Caption} ({os.Version})"
        
        # 获取处理器信息
        cpu = remote_wmi.Win32_Processor()[0]
        cpu_info = cpu.Name.strip()
        
        # 获取主板信息
        board = remote_wmi.Win32_BaseBoard()[0]
        board_info = f"{board.Manufacturer} - {board.Product}"
        
        # 获取IP和MAC地址(筛选已启用的网卡)
        net_adapters = remote_wmi.Win32_NetworkAdapterConfiguration(IPEnabled=True)
        if net_adapters:
            ip_addr = net_adapters[0].IPAddress[0]
            mac_addr = net_adapters[0].MACAddress
        else:
            ip_addr = "未找到可用IP"
            mac_addr = "未找到MAC地址"
        
        # 更新显示信息
        result_text.delete(1.0, tk.END)
        result_text.insert(tk.END, f"计算机名: {cs.Name}\n")
        result_text.insert(tk.END, f"当前用户: {current_user}\n")
        result_text.insert(tk.END, f"IP地址: {ip_addr}\n")
        result_text.insert(tk.END, f"MAC地址: {mac_addr}\n")
        result_text.insert(tk.END, f"操作系统: {os_version}\n")
        result_text.insert(tk.END, f"处理器: {cpu_info}\n")
        result_text.insert(tk.END, f"内存(RAM): {ram}\n")
        result_text.insert(tk.END, f"主板信息: {board_info}\n")
        result_text.insert(tk.END, f"系统类型: {cs.SystemType}\n")
        
    except Exception as e:
        messagebox.showerror("连接失败", f"错误信息: {str(e)}")

# 创建GUI界面
root = tk.Tk()
root.title("局域网计算机信息获取工具")

# 输入区域
frame_input = tk.Frame(root, padx=10, pady=10)
frame_input.pack()

label_ip = tk.Label(frame_input, text="目标IP:")
label_ip.grid(row=0, column=0, sticky="w")
entry_ip = tk.Entry(frame_input, width=20)
entry_ip.grid(row=0, column=1, padx=5)

label_user = tk.Label(frame_input, text="管理员账号:")
label_user.grid(row=1, column=0, sticky="w")
entry_user = tk.Entry(frame_input, width=20)
entry_user.grid(row=1, column=1, padx=5)

label_pwd = tk.Label(frame_input, text="密码:")
label_pwd.grid(row=2, column=0, sticky="w")
entry_pwd = tk.Entry(frame_input, width=20, show="*")
entry_pwd.grid(row=2, column=1, padx=5)

btn_get = tk.Button(frame_input, text="获取信息", command=get_remote_info)
btn_get.grid(row=3, column=0, columnspan=2, pady=5)

# 结果显示区域
frame_result = tk.Frame(root, padx=10, pady=10)
frame_result.pack()

result_text = tk.Text(frame_result, width=50, height=12)
result_text.pack()

root.mainloop()

注意事项

  • 目标计算机需开启WMI服务(Winmgmt),可通过services.msc检查
  • 目标计算机防火墙需允许WMI入站连接(默认域环境下已允许,工作组环境需手动添加规则)
  • 输入的账号必须是目标计算机的本地管理员或域管理员账号
  • 确保本机与目标计算机在同一局域网,网络可达(可先通过ping测试)

内容的提问来源于stack exchange,提问作者huynt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:49:55