日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python修改mac地址_python利用_winreg模块制作MAC地址修改工具

發布時間:2024/7/5 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python修改mac地址_python利用_winreg模块制作MAC地址修改工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過百度搜索知道,xp下修改MAC地址的方法主要有兩個,一種是通過配置本地鏈接屬性來實現,這種方法不適合用程序來完成,另一種是通過修改注冊表來完成,本程序主要是利用了這種方法。

具體方法:Windows 2000/XP中,打開注冊表編輯器:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\4D36E972-E325-11CE-BFC1-08002BE10318 中的0000,0001,0002等子鍵,如果在某一子鍵下找到DriverDesc值 ,該值與你要改的網卡一致,那么就在該鍵下添加一個字符串變量,命名為“NetworkAddress”,值為要設置的MAC地址,例如:000102030405,然后重啟機器就可以實現。

根據這一方法,利用python內置的winreg模塊對注冊表進行操作。

第一步,讀取當前物理網卡的MAC地址。python獲取MAC地址的方法有兩個,具體請見Jerry.Kwan的博文:http://www.cnblogs.com/Jerryshome/archive/2011/11/30/2269365.html。本程序采用了第二種方法,并為了后面注冊表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\4D36E972-E325-11CE-BFC1-08002BE10318 下鍵值與網卡對應方便,這里將網卡名稱和當前MAC地址保存為字典形式,鍵為網卡名稱,Value為MAC地址。具體代碼如下:

def readipconfig():#讀取ipconfig信息,列出當前網卡地址

t="Physical Address"u="Description"keyphy=''macfact={}for line in os.popen("ipconfig /all"):if u inline:

keyphy=line.split(":")[1].strip()if keyphy !='' and (t inline):

macfact[keyphy]=line.split(":")[1].strip()return macfact

第二步,讀取當前機器上的網卡等設備信息,找出其中的網卡,并選擇要修改的設備(有時一臺機器會有多個網卡,可以選擇修改某一網卡的MAC).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\4D36E972-E325-11CE-BFC1-08002BE10318 子鍵一般包括0000、0001、0002……,每個子鍵對應的硬件設備不同,一般其名稱保存在DriverDesc值。這里首先讀出當前機器上的網絡設備,然后與第一步中得到的macfact字典進行對比,找出當前所使用的各個網卡對應的子子鍵值,并要求輸入要修改的網卡對應的子鍵值。從而確定要修改哪一個網卡的MAC。

def readinfo(ethernetname):#讀取當前網絡設備并選擇要修改的設備

key=OpenKey(HKEY_LOCAL_MACHINE, mackey)

countkey=QueryInfoKey(key)[0]

keylist=[]#獲取{4D36E972-E325-11CE-BFC1-08002bE10318}子鍵列表

mackeylist=[]for i inrange(int(countkey)):

name=EnumKey(key,i) #獲取子鍵名

keylist.append(name)

CloseKey(key)for t inkeylist:

mackey_zi=mackey+'\\'+ttry:

key=OpenKey(HKEY_LOCAL_MACHINE, mackey_zi)#print key

value,type=QueryValueEx(key,"DriverDesc")#列出有mac地址的網卡,及對應注冊表中的編號

ifethernetname.has_key(value):

mackeylist.append(t)print '%s: %s MAC:%s' %(t,value,ethernetname[value])else:pass

except:

value='None'CloseKey(key)

judge=Truewhilejudge:

d=raw_input('請從上面選擇您的網卡號(注意按格式填寫每行冒號前的數字):')if d inmackeylist:

judge=Falseelse:print "輸入錯誤,重新輸入!"

return d

第三步,修改mac地址。方法比較簡單,利用winreg.OpenKey()打開該網卡所對應注冊表中的鍵,SetValueEx(key,"NetworkAddress",0,REG_SZ,inputmac)用來修改該鍵下的值,如果該鍵下存在NETworkAddress,那么將修改原來的值,如果不存在,則會新建一個名為NetworkAddress的字符串值。

def modifymac(newmac):#修改mac地址

mackey_fix=mackey+'\\'+newmac

key=OpenKey(HKEY_LOCAL_MACHINE, mackey_fix,0,KEY_ALL_ACCESS)

judge=Truewhilejudge:

inputmac=raw_input('請輸入修改后的MAC地址:(如“011D00003F21”):')

mjudge=judgemac(inputmac)if len(inputmac)==12 and mjudge==True:

judge=Falseprint '您輸入的新MAC地址是%s' %inputmac

SetValueEx(key,"NetworkAddress",0,REG_SZ,inputmac)#設置注冊表值

print 'MAC地址已修改成功,重啟后生效。'CloseKey(key)def judgemac(inputmac):#判斷輸入的mac地址是否合法

judgechar=True

charlist=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f']for char_i ininputmac:if char_i not incharlist:print 'MAC地址格式錯誤,請重新輸入。'judgechar=Falsebreak

return judgechar

通過以上三步,完成了XP下網卡MAC地址的修改工作,此次只是在 XP機器測試通過,應該2000也可以,但沒有具體試過。完整的代碼如下:

#-*- coding: cp936 -*-

'''MAC地址修改器for xp V1.0

小五義:http://www.cnblogs.com/xiaowuyi'''

from _winreg import *

importsysimportos

mackey="SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}"

def readinfo(ethernetname):#讀取當前網絡設備并選擇要修改的設備

key=OpenKey(HKEY_LOCAL_MACHINE, mackey)

countkey=QueryInfoKey(key)[0]

keylist=[]#獲取{4D36E972-E325-11CE-BFC1-08002bE10318}子鍵列表

mackeylist=[]for i inrange(int(countkey)):

name=EnumKey(key,i) #獲取子鍵名

keylist.append(name)

CloseKey(key)for t inkeylist:

mackey_zi=mackey+'\\'+ttry:

key=OpenKey(HKEY_LOCAL_MACHINE, mackey_zi)#print key

value,type=QueryValueEx(key,"DriverDesc")#列出有mac地址的網卡,及對應注冊表中的編號

ifethernetname.has_key(value):

mackeylist.append(t)print '%s: %s MAC:%s' %(t,value,ethernetname[value])else:pass

except:

value='None'CloseKey(key)

judge=Truewhilejudge:

d=raw_input('請從上面選擇您的網卡號(注意按格式填寫每行冒號前的數字):')if d inmackeylist:

judge=Falseelse:print "輸入錯誤,重新輸入!"

returnddef readipconfig():#讀取ipconfig信息,列出當前網卡地址

t="Physical Address"u="Description"keyphy=''macfact={}for line in os.popen("ipconfig /all"):if u inline:

keyphy=line.split(":")[1].strip()if keyphy !='' and (t inline):

macfact[keyphy]=line.split(":")[1].strip()returnmacfactdef modifymac(newmac):#修改mac地址

mackey_fix=mackey+'\\'+newmac

key=OpenKey(HKEY_LOCAL_MACHINE, mackey_fix,0,KEY_ALL_ACCESS)

judge=Truewhilejudge:

inputmac=raw_input('請輸入修改后的MAC地址:(如“011D00003F21”):')

mjudge=judgemac(inputmac)if len(inputmac)==12 and mjudge==True:

judge=Falseprint '您輸入的新MAC地址是%s' %inputmac

SetValueEx(key,"NetworkAddress",0,REG_SZ,inputmac)#設置注冊表值

print 'MAC地址已修改成功,重啟后生效。'CloseKey(key)def judgemac(inputmac):#判斷輸入的mac地址是否合法

judgechar=True

charlist=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','a','b','c','d','e','f']for char_i ininputmac:if char_i not incharlist:print 'MAC地址格式錯誤,請重新輸入。'judgechar=Falsebreak

returnjudgecharif __name__=='__main__':if sys.platform=="win32":

iplist=readipconfig()

m=readinfo(iplist)

modifymac(m)else:print "不支持當前系統"

運行結果如下:

總結

以上是生活随笔為你收集整理的python修改mac地址_python利用_winreg模块制作MAC地址修改工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。