溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么遠程獲取Windows主機信息

發布時間:2021-07-10 14:03:48 來源:億速云 閱讀:626 作者:Leah 欄目:大數據
# Python中怎么遠程獲取Windows主機信息

## 引言

在IT運維、自動化管理或安全監控場景中,遠程獲取Windows主機信息是一項常見需求。Python憑借其豐富的庫生態和跨平臺特性,成為實現這一目標的理想工具。本文將詳細介紹5種主流方法,涵蓋從基礎到進階的完整解決方案。

---

## 方法一:使用WMI協議(pywin32庫)

### 原理說明
Windows Management Instrumentation (WMI) 是微軟提供的系統管理架構,支持通過COM接口查詢系統信息。

### 實現步驟
1. 安裝必要庫:
   ```bash
   pip install pywin32
  1. 基礎連接代碼: “`python import wmi

def get_system_info(host, username, password): try: conn = wmi.WMI( computer=host, user=username, password=password )

       # 獲取操作系統信息
       for os in conn.Win32_OperatingSystem():
           print(f"OS Name: {os.Caption}")
           print(f"Version: {os.Version}")

       # 獲取CPU信息
       for cpu in conn.Win32_Processor():
           print(f"CPU: {cpu.Name}")

   except Exception as e:
       print(f"Error: {str(e)}")

# 使用示例 get_system_info(‘192.168.1.100’, ‘admin’, ‘password123’)


### 可獲取信息類型
- 硬件信息(CPU/內存/磁盤)
- 安裝的軟件列表
- 系統服務狀態
- 事件日志
- 進程列表

### 注意事項
- 需要管理員權限
- 防火墻需開放135和445端口
- 支持NTLM認證

---

## 方法二:PowerShell Remoting(pypsrp庫)

### 技術背景
基于WS-Management協議,是微軟推薦的遠程管理方案。

### 實現示例
```python
from pypsrp.powershell import PowerShell, RunspacePool
from pypsrp.wsman import WSMan

def get_remote_info():
    wsman = WSMan(
        server="192.168.1.100",
        username="admin",
        password="password123",
        ssl=False
    )
    
    with RunspacePool(wsman) as pool:
        ps = PowerShell(pool)
        ps.add_script("""
        Get-CimInstance Win32_ComputerSystem | Select-Object Name,TotalPhysicalMemory
        Get-Process | Select-Object Name,CPU
        """)
        
        output = ps.invoke()
        for line in output:
            print(line)

get_remote_info()

優勢特點

  • 支持管道操作
  • 可執行復雜腳本
  • 數據傳輸加密

方法三:SSH協議(paramiko庫)

配置準備

  1. 在Windows主機安裝OpenSSH Server
  2. 啟動服務:
    
    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'
    

Python實現

import paramiko

def ssh_get_info():
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        client.connect(
            hostname='192.168.1.100',
            username='admin',
            password='password123'
        )
        
        # 執行系統命令
        stdin, stdout, stderr = client.exec_command('systeminfo')
        print(stdout.read().decode())
        
    finally:
        client.close()

ssh_get_info()

常用命令參考

命令 作用
systeminfo 獲取系統摘要信息
wmic bios get serialnumber 獲取BIOS序列號
netstat -ano 查看網絡連接

方法四:REST API方式(Flask服務端)

服務端部署

# server.py
from flask import Flask, jsonify
import wmi

app = Flask(__name__)

@app.route('/systeminfo')
def system_info():
    c = wmi.WMI()
    return jsonify({
        "memory": sum([int(x.Capacity) for x in c.Win32_PhysicalMemory()]),
        "disks": [x.Caption for x in c.Win32_DiskDrive()]
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

客戶端調用

import requests

response = requests.get('http://192.168.1.100:5000/systeminfo')
print(response.json())

安全增強建議

  • 添加HTTPS支持
  • 實現JWT認證
  • 使用防火墻規則限制訪問IP

方法五:Windows遠程管理(WinRM)

配置WinRM服務

Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Client\TrustedHosts *

Python調用

import winrm

session = winrm.Session(
    '192.168.1.100',
    auth=('admin', 'password123')
)

result = session.run_ps('Get-Service | Where Status -eq "Running"')
print(result.std_out.decode())

安全注意事項

  1. 認證安全

    • 始終使用復雜密碼
    • 考慮使用證書認證
    • 定期輪換憑據
  2. 網絡防護

    • 啟用傳輸加密(SSL/TLS)
    • 限制可訪問IP范圍
    • 使用VPN通道
  3. 權限控制

    • 遵循最小權限原則
    • 使用專用服務賬戶
    • 審計日志記錄

性能優化建議

  1. 批量查詢代替單次請求
  2. 使用過濾器減少數據傳輸量:
    
    conn.Win32_Process.filter(name='chrome.exe')
    
  3. 建立持久連接避免重復認證
  4. 異步處理耗時操作

完整代碼示例

# remote_monitor.py
import wmi
from datetime import datetime

class WindowsMonitor:
    def __init__(self, host, user, pwd):
        self.conn = wmi.WMI(
            computer=host,
            user=user,
            password=pwd
        )
    
    def get_all_info(self):
        return {
            "timestamp": datetime.now().isoformat(),
            "system": self._get_system_info(),
            "performance": self._get_perf_data()
        }
    
    def _get_system_info(self):
        """獲取系統基礎信息"""
        info = {}
        os_info = self.conn.Win32_OperatingSystem()[0]
        info.update({
            "os_name": os_info.Caption,
            "os_arch": os_info.OSArchitecture,
            "last_boot": os_info.LastBootUpTime
        })
        return info
    
    def _get_perf_data(self):
        """獲取性能數據"""
        perf = {}
        cpu = self.conn.Win32_Processor()[0]
        perf.update({
            "cpu_usage": cpu.LoadPercentage,
            "memory_used": int(self.conn.Win32_OperatingSystem()[0].TotalVisibleMemorySize) - 
                          int(self.conn.Win32_OperatingSystem()[0].FreePhysicalMemory)
        })
        return perf

# 使用示例
if __name__ == '__main__':
    monitor = WindowsMonitor('192.168.1.100', 'admin', 'SecurePass123!')
    print(monitor.get_all_info())

結語

本文介紹了五種主流遠程獲取Windows主機信息的方法,每種方案各有優缺點:

方法 適用場景 復雜度 安全性
WMI 內網管理
PowerShell 復雜運維任務
SSH 跨平臺環境
REST API 互聯網環境 可定制
WinRM 新版本Windows

實際選擇時,建議根據目標環境、安全要求和運維團隊的技術棧進行綜合考量。對于需要持續監控的場景,可考慮將這些方法封裝為定期執行的監控任務。 “`

文章總字數:約2400字
格式說明:
1. 使用Markdown語法
2. 包含代碼塊、表格、多級標題
3. 采用技術文檔的標準結構
4. 關鍵注意事項使用強調標識
5. 提供可直接運行的代碼示例

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女