本文實例講述了python實現自動更換ip的方法。分享給你們供你們參考。具體實現方法以下:python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/usr/bin/env python
#-*- encoding:gb2312 -*-
# Filename: IP.py
import
sitecustomize
import
_winreg
import
ConfigParser
from
ctypes
import
*
print
'正在進行網絡適配器檢測,請稍候…'
print
netCfgInstanceID
=
None
hkey
=
_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, \
r
'System\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}'
)
keyInfo
=
_winreg.QueryInfoKey(hkey)
# 尋找網卡對應的適配器名稱 netCfgInstanceID
for
index
in
range
(keyInfo[
0
]):
hSubKeyName
=
_winreg.EnumKey(hkey, index)
hSubKey
=
_winreg.OpenKey(hkey, hSubKeyName)
try
:
hNdiInfKey
=
_winreg.OpenKey(hSubKey, r
'Ndi\Interfaces'
)
lowerRange
=
_winreg.QueryValueEx(hNdiInfKey,
'LowerRange'
)
# 檢查是不是以太網
if
lowerRange[
0
]
=
=
'ethernet'
:
driverDesc
=
_winreg.QueryValueEx(hSubKey,
'DriverDesc'
)[
0
]
print
'檢測到網絡適配器名:'
, driverDesc
netCfgInstanceID
=
_winreg.QueryValueEx(hSubKey,
'NetCfgInstanceID'
)[
0
]
print
'檢測到網絡適配器ID:'
, netCfgInstanceID
if
netCfgInstanceID
=
=
None
:
print
'沒有找到網絡適配器,程序退出'
exit()
break
_winreg.CloseKey(hNdiInfKey)
except
WindowsError:
print
r
'Message: No Ndi\Interfaces Key'
# 循環結束,目前只提供修改一個網卡IP的功能
_winreg.CloseKey(hSubKey)
_winreg.CloseKey(hkey)
# 經過修改註冊表設置IP
strKeyName
=
'System\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\'
+
netCfgInstanceID
print
'網絡適配器的註冊表地址是:\n'
, strKeyName
hkey
=
_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, \
strKeyName, \
0
, \
_winreg.KEY_WRITE)
config
=
ConfigParser.ConfigParser()
print
print
'正在打開IP.ini配置文件…'
config.readfp(
open
(
'IP.ini'
))
IPAddress
=
config.get(
"school"
,
"IPAddress"
)
SubnetMask
=
config.get(
"school"
,
"SubnetMask"
)
GateWay
=
config.get(
"school"
,
"GateWay"
)
DNSServer1
=
config.get(
"school"
,
"DNSServer1"
)
DNSServer2
=
config.get(
"school"
,
"DNSServer2"
)
DNSServer
=
[DNSServer1,DNSServer2]
print
'配置文件內設定的信息以下,請覈對:'
print
print
'IP地址:'
, IPAddress
print
'子關掩碼:'
, SubnetMask
print
'默認網關:'
, GateWay
print
'主DNS服務器:'
, DNSServer1
print
'次DNS服務器:'
, DNSServer2
print
res
=
raw_input
(
'如今,請您決定:輸入1,則將配置文件寫入系統;輸入2,則將現有的系統設定還原爲所有自動獲取;不然程序退出:'
)
if
str
(res)
=
=
'1'
:
try
:
_winreg.SetValueEx(hkey,
'EnableDHCP'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'IPAddress'
,
None
, _winreg.REG_MULTI_SZ, [IPAddress])
_winreg.SetValueEx(hkey,
'SubnetMask'
,
None
, _winreg.REG_MULTI_SZ, [SubnetMask])
_winreg.SetValueEx(hkey,
'DefaultGateway'
,
None
, _winreg.REG_MULTI_SZ, [GateWay])
_winreg.SetValueEx(hkey,
'NameServer'
,
None
, _winreg.REG_SZ,
','
.join(DNSServer))
except
WindowsError:
print
'Set IP Error'
exit()
_winreg.CloseKey(hkey)
print
'切換成功!重置網絡後便可生效'
elif
str
(res)
=
=
'2'
:
try
:
_winreg.SetValueEx(hkey,
'EnableDHCP'
,
None
, _winreg.REG_DWORD,
0x00000001
)
_winreg.SetValueEx(hkey,
'T1'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'T2'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'NameServer'
,
None
, _winreg.REG_SZ,
None
)
_winreg.SetValueEx(hkey,
'DhcpConnForceBroadcastFlag'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'Lease'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'LeaseObtainedTime'
,
None
, _winreg.REG_DWORD,
0x00000000
)
_winreg.SetValueEx(hkey,
'LeaseTerminatesTime'
,
None
, _winreg.REG_DWORD,
0x00000000
)
except
WindowsError:
print
'Set IP Error'
exit()
_winreg.CloseKey(hkey)
print
'切換成功!重置網絡後便可生效'
else
:
print
'用戶手動取消,程序退出'
exit('')
|