簡介:windows下利用python腳本實現自動切換IP地址,從“自動DHCP獲取IP、自動獲取DNS“切換爲“靜態IP、靜態DNS”
原理:利用windows的WMI管理規範實現
前置條件:python需要安裝wmi,pywin32,其中wmi是依賴於pywin32的
'''
Win32_NetworkAdapterConfiguration類: https://docs.microsoft.com/zh-cn/windows/desktop/CIMWin32Prov/win32-networkadapterconfiguration#properties
'''
import wmi
objNicConfig = None
arrIPAddresses =['192.168.70.120', '192.168.1.56'] # IP地址列表
arrSubnetMasks =['255.255.255.0', '255.255.255.0'] # 子網掩碼列表
arrDefaultGateways =['192.168.70.253'] # 默認網關列表
arrGatewayCostMetrics =[1] #默認網關跳躍點
arrDNSServers =['192.168.70.15', '61.134.1.4'] #DNS服務器列表
intReboot = 0
def GetNicConfig():
wmiService = wmi.WMI()
colNicConfigs = wmiService.Win32_NetworkAdapterConfiguration(IPEnabled=True)
# 根據需要過濾出指定網卡,本只有一個網卡,不做過濾直接獲取第一個
'''
for obj in colNicConfigs:
print(obj.Index)
print(obj.Description)
print(obj.SettingID)
'''
if len(colNicConfigs) < 1:
print('沒有找到可用的網絡適配器')
return False
else:
global objNicConfig
objNicConfig = colNicConfigs[0]
return True
def SetIP():
returnValue = objNicConfig.EnableStatic(IPAddress = arrIPAddresses, SubnetMask = arrSubnetMasks)
if returnValue[0]==0:
print('設置IP成功')
elif returnValue[0]==1:
print('設置IP成功')
intReboot += 1
else:
print('ERROR: IP設置發生錯誤')
return False
return True
def SetGateways():
returnValue = objNicConfig.SetGateways(DefaultIPGateway = arrDefaultGateways, GatewayCostMetric = arrGatewayCostMetrics)
if returnValue[0]==0:
print('設置網關成功')
elif returnValue[0]==1:
print('設置網關成功')
intReboot += 1
else:
print('ERROR: 網關設置發生錯誤')
return False
return True
def SetDNS():
returnValue = objNicConfig.SetDNSServerSearchOrder(DNSServerSearchOrder = arrDNSServers)
if returnValue[0]==0:
print('設置DNS成功')
elif returnValue[0]==1:
print('設置DNS成功')
intReboot += 1
else:
print('ERROR: DNS設置發生錯誤')
return False
return True
def SetAutoDNS():
returnValue = objNicConfig.SetDNSServerSearchOrder()
if returnValue[0]==0:
print('設置自動獲取DNS成功')
elif returnValue[0]==1:
print('設置自動獲取DNS成功')
intReboot += 1
else:
print('ERROR: DNS設置發生錯誤')
return False
return True
def SetAutoIP():
returnValue = objNicConfig.EnableDHCP()
if returnValue[0]==0:
print('設置自動獲取IP成功')
elif returnValue[0]==1:
print('設置自動獲取IP成功')
intReboot += 1
else:
print('ERROR: IP設置發生錯誤')
return False
return True
# 切換爲靜態IP
def EnableStatic():
return SetIP() and SetGateways() and SetDNS()
# 切換爲自動獲取IP、DNS
def EnableDHCP():
return SetAutoDNS() and SetAutoIP()
def main():
if not GetNicConfig():
return False
if objNicConfig.DHCPEnabled:
print('正在切換爲靜態IP...')
if EnableStatic():
if intReboot > 0:
print('需要重新啓動計算機')
else:
print('修改後的配置爲:')
print('IP: ',', '.join(objNicConfig.IPAddress))
print('掩碼: ',', '.join(objNicConfig.IPSubnet))
print('網關: ',', '.join(objNicConfig.DefaultIPGateway))
print('DNS: ',', '.join(objNicConfig.DNSServerSearchOrder))
print('修改IP結束')
else:
print('請關閉控制面板、以管理員權限運行重試')
else:
print('正在切換爲動態IP...')
if EnableDHCP():
if intReboot > 0:
print('需要重新啓動計算機')
else:
print('切換爲動態DHCP成功!')
else:
print('請關閉控制面板、以管理員權限運行重試')
if __name__ == "__main__":
main()