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 "不支持当前系统"

运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们为什么需要工作流

我们为什么需要工作流 这是我的"基于WF设计业务流程平台"的题外篇 以下是这系列的文章列表,写的很痛苦,但我会继续写下去 基于WF设计业务流程平台-架构 基于WF设计业务流程平台-权限体系 基于WF设计业务流程平台_特定群体与特定人 基于WF设计业务流程平台_参与者与任…

LeetCode 371. 两整数之和(位运算加法)

1. 题目 不使用运算符 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a 1, b 2 输出: 3示例 2: 输入: a -2, b 3 输出: 1来源:力扣(LeetCode) 链接:https://leetcod…

python函数方法里面用浅复制深复制_图解 Python 浅拷贝与深拷贝

Python 中的赋值语句不会创建对象的拷贝,仅仅只是将名称绑定至一个对象。对于不可变对象,通常没什么差别,但是处理可变对象或可变对象的集合时,你可能需要创建这些对象的 “真实拷贝”,也就是在修改创建的拷贝时不改变…

32位Windows系统未分页内存限制导致的VPS的容量问题

问题 32位Windows系统未分页内存限制导致的VPS的容量问题 解决方案 在32位的Windows系统上,制约VPS的数量的主要参数是“未分页内存” 打开Windows自己的任务管理器,选择性能标签,查看“核心内存”,查看“未分页” 在32位的windo…

AcWing之重建二叉树

题目 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意:二叉树中每个节点的值都互不相同;输入的前序遍历和中序遍历一定合法;样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, …

奇异值分解(Singular Value Decomposition,SVD)

文章目录1. 奇异值分解的定义与性质1.1 定义1.2 两种形式1.2.1 紧奇异值分解1.2.2 截断奇异值分解1.3 几何解释1.4 主要性质2. 奇异值分解与矩阵近似2.1 弗罗贝尼乌斯范数2.2 矩阵的最优近似2.3 矩阵的外积展开式3. 奇异值分解Python计算4. SVD应用一种矩阵因子分解方法矩阵的奇…

项目经理有必要学python吗_项目经理到底要不要懂技术

关于这个问题,我想开门见山地说一句,需要,而且非常需要。当然有同学就会说了,项目经理懂技术会被技术所束缚,无法跳出技术角度来看待项目整体。还有同学会说,现在是团队配合时代,各领域专精&…

贝叶斯算法

1. 贝叶斯由来 贝叶斯为了解决“逆概”问题提出的 2. 贝叶斯要解决的问题 正向概率 袋子里装着N个黑球和M个白球,伸手取摸球,摸到黑球和白球的概率有多大 逆向概率 袋子里前提不知道有黑白球的比例,而是闭着眼睛摸球统计后推测黑球和白球的…

LeetCode 374. 猜数字大小(二分查找)

1. 题目 我们正在玩一个猜数字游戏。 游戏规则如下: 我从 1 到 n 选择一个数字。你需要猜我选择了哪个数字。每次你猜错了,我会告诉你这个数字是大了还是小了。 你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果&#…

机器人编程与python语言的区别_一分钟看懂“机器人编程”和“少儿编程”的区别!...

随着编程学习全球化的趋势,国内编程学习热潮日盛,越来越多的家长开始让孩子接触学习编程。然而在挑选学习课程的过程中,机器人编程和少儿编程是最让家长头疼的问题之一。因为两者的名称都有“编程”二字,这就让很多家长产生一个错…

让窗体接受拖放, 并获取拖过来的文件信息 - 回复 海浪问 的问题

问题来源: http://www.cnblogs.com/del/archive/2009/01/20/1353117.html#1435746原理分析:这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles、DragQueryFile;用 DragAcceptFiles(窗口句柄, True); 以让窗口能够接受拖放;然后就等待 WM_DROPFILES 消息, 并用 DragQueryFil…

LeetCode之最大回文串--动态规划

1. 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1:输入: "babad"输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2:输入: "cbbd"输出: "bb&q…

sort函数_MATLAB--数字图像处理 sort()函数

sort()用处对一维或二维矩阵进行排序用法sort(A):对一维或二维矩阵进行升序排序,并返回排序后的矩阵;当A为二维矩阵时,对矩阵的每一列分别进行升序排序(列优先)。sort(A,dim):对矩阵按指定的方向进行升序排序&#xff…

LeetCode 1248. 统计「优美子数组」(要复习)

文章目录1. 题目2. 解题2.1 记录奇数出现的pos2.2 前缀和1. 题目 给你一个整数数组 nums 和一个整数 k。 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。 请返回这个数组中「优美子数组」的数目。 示例 1: 输入…

LeetCode 560. 和为K的子数组(前缀和差分)

1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且…

2月4日 星期三

昨天几点睡掉的? 估计猫是不会睡太早了 以后拍照不用担心猫牙了 想怎么笑就怎么笑 是不是 多给家里传传吧 估计很多人都想看到小猫呢 爸爸今天要回本溪了 下午2点车 我去送他 亲亲 转载于:https://www.cnblogs.com/loverain/archive/2009/02/04/1383549.html

LeetCode之最小路径和

1. 题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和…

python ppt自动生成_如何自动化生成PPT缩略图?

搜到的代码,可能得自己改一下. 导出当前文件夹下所有 PowerPoint 演示文稿的第一张幻灯片 并以图形文件格式保存在当前文件夹下 变量声明和初始化Dim wShell, pptApp, fso, folder, file, slide, outFileSet wShell WScript.CreateObject("WScript.Shell") 获取当前…

LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)

1. 题目 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K 。 如果没有和至少为 K 的非空子数组,返回 -1 。 示例 1: 输入:A [1], K 1 输出:1示例 2: 输入:A [1,2], K 4 输出&…

LeetCode之简单回文数

1. 题目 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是…