欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vbs Windows系统改变或修改网卡的MAC地址的脚本与软件

程序员文章站 2022-03-07 14:07:30
核心代码 '/*=========================================================================...

核心代码

'/*=========================================================================  
' * intro    网上找了一圈,都不怎么好,有一个比较不错的,汉化作者汉化时加了个自己的介绍文件,这个文件比程序本身还大,感觉不爽,于是本人的vbs版mac修改代码便诞生了,在使用过程中如果出现不能上网的情况得返回一下网卡驱动(有些机器比较特别),如果要返回以前的mac可以:开始-->控制面板-->网络连接-->点击您的网卡(一般是"本地连接")-->点击常规里的属性-->配置..-->高级-->选中-->networkaddress-->右边选择"不存在"  
' * filename  changemac.vbs  
' * author   yongfa365  
' * version   v3.0  
' * web     http://www.yongfa365.com  
' * email    yongfa365[at]qq.com  

' * madetime  2007-12-09 22:17:58  
' * lastmodify 2007-12-13 18:35:58  
' *==========================================================================*/  
  
on error resume next  
strcomputer = "."  
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")  
set colitems = objwmiservice.execquery("select * from win32_networkadapterconfiguration where ipenabled=true", , 48)  
for each objitem in colitems  
  msg = msg & "编号:" & objitem.index & "  mac:" & objitem.macaddress & vbcrlf & "网卡:" & objitem.description & vbcrlf & vbcrlf  
next  
  
idx = inputbox( msg , "1/2请输入您要修改的mac的编号", "1")  
if not isnumeric(idx) or len(idx) = 0 then  
  wscript.echo "编号输入有误,退出"  
  wscript.quit  
end if  
mac = inputbox( "输入你指定的mac地址值(注意应该是12位的连续数字或字母,其间没有-、:等分隔符)" , "2/2请输入修改后的mac地址", "000000000000")  
mac = replace(replace(replace(mac, ":", ""), "-", ""), " ", "")  
if regexptest("[^\da-fa-f]", mac)>0 or len(mac)<>12 then  
  wscript.echo "mac输入有误,退出"  
  wscript.quit  
end if  
  
  
idx = right("00000"&idx, 4)  
reg = "hklm\system\currentcontrolset\control\class\{4d36e972-e325-11ce-bfc1-08002be10318}\" & idx  
set wshshell = createobject("wscript.shell")  
wshshell.regwrite reg & "\networkaddress", mac , "reg_sz"  
wshshell.regwrite reg & "\ndi\params\networkaddress\default" , mac , "reg_sz"  
wshshell.regwrite reg & "\ndi\params\networkaddress\paramdesc" , "networkaddress" , "reg_sz"  
wshshell.regwrite reg & "\ndi\params\networkaddress\optional" , "1" , "reg_sz"  
'得到网卡的名称,比如“本地连接 2”  
networkname = wshshell.regread("hklm\system\controlset001\control\network\{4d36e972-e325-11ce-bfc1-08002be10318}\" & wshshell.regread(reg & "\netcfginstanceid") & "\connection\name")  
  
restartnetwork networkname  
'wscript.echo "修改成功"  
  
function restartnetwork(sconnectionname)  
  '重启网卡  
  'sconnectionname = "本地连接 5" '可改成需要控制的连接名称,如"无线网络连接"等  
  '定位到网络连接  
  set shellapp = createobject("shell.application")  
  set ocontrolpanel = shellapp.namespace(3)  
  for each folderitem in ocontrolpanel.items  
    if folderitem.name = "网络连接" then  
      set onetconnections = folderitem.getfolder  
      exit for  
    end if  
  next  
  '定位到要处理的网卡  
  for each folderitem in onetconnections.items  
    if lcase(folderitem.name) = lcase(sconnectionname) then  
      set olanconnection = folderitem  
      exit for  
    end if  
  next  
  '重启网卡  
  for i = 1 to 2  
    for each verb in olanconnection.verbs  
      if regexptest("启用|禁用|停止", verb.name)>0 then  
        verb.doit  
        exit for  
      end if  
    next  
    '有时网卡半天反应不过来,可以把这个参数设的大点一般程序可以正常运行,或您多运行几次程序  
    wscript.sleep 5000  
  next  
    
    
end function  
  
  
'正则测试有没有匹配内容  
  
function regexptest(patrn, strng)  
  set re = new regexp  
  re.pattern = patrn  
  re.ignorecase = true  
  re.global = true  
  set matches = re.execute(strng)  
  regexptest = matches.count  
end function 

网上相关介绍一:

  如何修改网卡mac地址


  轻松修改网卡的mac(物理)地址如今大家都是adsl上网,当你查网费时就会发现,每次上网电信都会记录下你的网卡mac地址,这是因为ip地址是动态的(每次上网都不同),而mac地址却是不变的——每张网卡都有一个与众不同的mac(物理)地址,因此mac地址就成了客户的网上身份证,通过记录mac地址,即可确认是你上的网!

  一、mac地址的用途
  mac地址在网卡中是固定的,每张网卡的mac地址都不一样。网卡在制作过程中,厂家会在它的eprom里面烧录上一组数字,这组数字,每张网卡都各不相同,这就是网卡的mac(物理)地址。

  由于mac地址的唯一性,因此它主要用来识别网络中用户的身份。例如adsl上网时,电信用它来记费,确认是你上的网;在校园网中,mac地址也可以用来识别用户。对于校园网的正式用户,其mac地址会登记在服务器端,假如你是非法用户,服务器中就没有你的网卡mac地址,这样当你试图连上网时,服务器就会立刻认出你、阻止你连上网络。

  二、mac地址是可以修改的
  有些场合,例如冒充网络中的正式用户,就需要修改你的网卡mac.要修改mac地址,你可以通过硬件的方法实现,即利用网卡厂家提供的修改程序来烧录网卡的eeprom,这样做虽然可行,但是风险很大、操作也复杂,即使你很有经验,也难免在操作中出现错误。

  其实你完全没必要用烧录方法、修改网卡中的mac地址。要知道windows安装的时候,会自动从网卡中读入mac地址,把它存放在注册表中以备后用。当数据在网络中传输时,从网卡发出的数据包中要求有一个源mac地址,这个mac地址就是从注册表中读取的(并非从网卡中读取的),因此只要你修改了注册表中的mac地址,就相当于改了网卡eeprom中的mac地址,两者实际效果是完全相同的!

  三、修改注册表中mac的方法
  1、使用软件修改
  本方法适用于所有类型的网卡。在不同的windows下,要用不同的软件修改mac.

  (1)win2003/xp/2000

  如果你的系统是win2003/xp/2000,可以使用smac(下载地址http://www.klcconsulting.net/smac/#download)。这款软件并不能修改网卡中的mac地址,只能修改注册表中的mac.

  该软件有两种运行模式,如果你启用了"windows management instrumentation (wmi)"服务,软件即运行在[wbem on]模式下,可以显示更多的网卡信息,否则运行在[wbem off]模式下,在软件窗口标题栏可看到当前运行模式。

  软件的使用非常简单,运行后点击"refresh",窗口中的列表框将显示网卡的类型、ip地址、active mac等,在下面六个输入框中输入你指定的mac地址(图1),然后点击右侧的"update mac",即可修改完成;最后重启电脑使修改值生效。

  图1
  注意,试用版不能输入新的mac地址,只能把mac改成0c-0c-0c-0c-0c-01

  (2)win98
  如果你的系统是win98,建议使用"mac扫描器",这个工具可以修改注册表中的mac地址,然后重启电脑使修改生效。

  2、在网卡属性中修改
  如果你的网卡采用了realtek公司的rtl8139芯片,就可以在网卡属性中修改mac,这样注册表中的mac地址也会一同改变,方法如下:

  图2
  在win2003/xp/2000中,点击菜单"开始"/设置/控制面板,双击"系统",点击"硬件"/设备管理器,在设备管理器中展开"网络适配器",右击要修改mac地址的网卡,选择"属性";点击"高级"选项卡,在"属性"下,选择点击network address项目(图2),在右侧"值"的下方,输入你要指定的mac地址值(例如020202020202),注意要连续输入12个数字或字母(中间不要输入-);重新启动电脑后,修改即可生效。至于win98下的mac修改方法,与以上方法类似。

  如果修改之后,在win2003/xp/2000 下,你又想把注册表中的mac地址恢复成原样,可以选择"network address"项,将右边的值选择为"不存在",再重新启动即可;在win98下是选择"没有显示"。

  3、在注册表中修改
  对于非rtl8139芯片的网卡,你可以直接修改注册表中的mac,注意:修改注册表前,要先备份注册表。

  (1)win2003/xp/2000

  点击"开始"/运行,输入regedit打开注册表,定位到hkey_local_machine\system\currentcontrolset\control\class\{4d36e972-e325-11ce-bfc1-08002be10318}\0000、0001、0002等主键下,查找driverdesc的内容,了解网卡使用了哪个主键(例如0001),如果主键下有params项,则该主键也是网卡所使用的;

  例如网卡使用了0001主键,因此我们就选中它,在其右边建一个字符串项(名为networkaddress),双击该串,输入你指定的mac地址值(注意应该是12位的连续数字或字母,其间没有-号);在0001下的ndi\params中添加一项子键(名为networkaddress),选择该子键,在其右边添加名为default的字符串,键值为修改后的mac地址,与上面的数值相同;修改后重启生效。

  (2)win98
  点击"开始"/运行,键入winipcfg选择你要修改的网卡,并记录下mac地址值;然后点击"开始"/运行,输入regedit打开注册表,定位到hkey_local_machine\system\current controlset\services\class\net,下面有"0000"、"0001"、"0002"等子键;从"0000"子键开始点击,依次查找子键下的"driverdesc"键内容,直到找到刚才记录的mac地址为止;

  例如网卡使用了0001主键,因此我们就选中它,在其右边新建一个串,名称为networkaddress,再双击该串,输入新的mac地址值(注意应该是12位的连续数字或字母,其间没有-号);最后重启电脑使修改生效。

网上有个公开代码的程序,我汉化了一下,下载地址:vbs Windows系统改变或修改网卡的MAC地址的脚本与软件macaddresschanger.rar