核心代碼
'/*========================================================================= ' * 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.
?。?)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,注意:修改注冊表前,要先備份注冊表。
?。?)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地址,與上面的數值相同;修改后重啟生效。
?。?)Win98
點擊"開始"/運行,鍵入winipcfg選擇你要修改的網卡,并記錄下MAC地址值;然后點擊"開始"/運行,輸入regedit打開注冊表,定位到HKEY_LOCAL_MACHINE/System/Current ControlSet/Services/Class/Net,下面有"0000"、"0001"、"0002"等子鍵;從"0000"子鍵開始點擊,依次查找子鍵下的"DriverDesc"鍵內容,直到找到剛才記錄的MAC地址為止;
例如網卡使用了0001主鍵,因此我們就選中它,在其右邊新建一個串,名稱為networkaddress,再雙擊該串,輸入新的MAC地址值(注意應該是12位的連續數字或字母,其間沒有-號);最后重啟電腦使修改生效。
網上有個公開代碼的程序,我漢化了一下,下載地址:MACAddressChanger.rar
新聞熱點
疑難解答