首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 自動切換 IP 位址:修改 Windows 註冊表實現靜態/動態 IP 切換

     編輯:更多程式設計知識

需求:在筆記本電腦於不同網路環境 (學校/家裡) 之間快速切換固定 IP 與 DHCP。Python 腳本掃描註冊表找到網卡介面卡 GUID,修改 Tcpip\Parameters\Interfaces\{GUID} 下相關鍵值實現切換。

核心流程

  1. 掃描 HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318} 找 LowerRange == 'ethernet' 的子鍵,取得 NetCfgInstanceId。
  2. 開啟 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{GUID} 寫入鍵值。
  3. 靜態 IP:設定 EnableDHCP=0, IPAddress, SubnetMask, DefaultGateway, NameServer。
  4. DHCP:設定 EnableDHCP=1 並清除靜態相關鍵值。
  5. 生效需重啟網卡或重開機 (腳本提示)。

關鍵程式碼片段


import _winreg, ConfigParser

# 1. 尋找網卡 GUID
hkey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
    r'SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}')
for i in range(_winreg.QueryInfoKey(hkey)[0]):
    subkey_name = _winreg.EnumKey(hkey, i)
    subkey = _winreg.OpenKey(hkey, subkey_name)
    try:
        ndi = _winreg.OpenKey(subkey, r'Ndi\Interfaces')
        if _winreg.QueryValueEx(ndi, 'LowerRange')[0] == 'ethernet':
            guid = _winreg.QueryValueEx(subkey, 'NetCfgInstanceId')[0]
            break
    except WindowsError:
        pass

# 2. 修改 IP 設定
ip_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
    r'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\\' + guid,
    0, _winreg.KEY_WRITE)

# 靜態 IP
_winreg.SetValueEx(ip_key, 'EnableDHCP', 0, _winreg.REG_DWORD, 0)
_winreg.SetValueEx(ip_key, 'IPAddress', 0, _winreg.REG_MULTI_SZ, [ip])
_winreg.SetValueEx(ip_key, 'SubnetMask', 0, _winreg.REG_MULTI_SZ, [mask])
_winreg.SetValueEx(ip_key, 'DefaultGateway', 0, _winreg.REG_MULTI_SZ, [gw])
_winreg.SetValueEx(ip_key, 'NameServer', 0, _winreg.REG_SZ, ','.join([dns1, dns2]))

# DHCP 恢復
_winreg.SetValueEx(ip_key, 'EnableDHCP', 0, _winreg.REG_DWORD, 1)
# 清除 T1, T2, NameServer, DhcpConnForceBroadcastFlag, Lease...

設定檔 (IP.ini)


[school]
IPAddress = 192.168.1.100
SubnetMask = 255.255.255.0
GateWay = 192.168.1.1
DNSServer1 = 8.8.8.8
DNSServer2 = 8.8.4.4

注意事項

  • 需系統管理員權限執行。
  • 僅支援 Windows (註冊表路徑)。
  • 修改註冊表後需重啟網卡服務 (netsh interface set interface "區域連線" disable/enable) 或重開機。
  • 現代 Windows 建議使用 netsh 或 PowerShell Cmdlet (Set-NetIPAddress) 替代直接改註冊表。
  • 多網卡環境需互動選擇或自動偵測。

此腳本展示 Python 操作 Windows 註冊表自動化網路配置的實戰技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved