如何在Windows 7上使用批处理文件更改MAC地址?

5
我希望能够通过简单的点击(使用批处理文件)更改我的无线设备的MAC地址。我该如何实现这一目标?需要选择一个随机的MAC地址。
6个回答

5

我不确定这是否完全正确,但大致如下:

在一个.reg文件中

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0009]
"NetworkAddress"="000011112222"

0009需要更改以匹配您的适配器地址。


它改变了MAC地址,但我想我有一个错误。https://social.technet.microsoft.com/Forums/en-US/w7itpronetworking/thread/59e07df3-471c-499e-ad5f-e7cb507595df/ - ilhan
@George:在那个冗长的线程中隐藏着这样一个观察结果,即只要选择一个正确构造的地址,即第一个八位字节的低两位必须是10,就可以正常工作,如http://en.wikipedia.org/wiki/MAC_address - 你的情况是这样吗? - Harry Johnston
@George:还要注意的是,即使是不正确的地址,更改MAC对我来说也有效,并且微软无法重现这个问题,因此该问题可能特定于某个品牌的网络适配器。(或者所有无线适配器?我手头没有一个可以玩的。) - Harry Johnston
由于这种(以及所有其他基于注册表的解决方案)只更改注册表值而不是调用某些API,我猜想更改直到重新启动才会生效。 - ivan_pozdeev

4

这里有一个changeMac.bat文件。

@echo off
netsh interface set interface "Local Area Connection" disable
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007 /v NetworkAddress /d 002622D90EFC /f
netsh interface set interface "Local Area Connection" enable
echo Ok, enjoy it :)

你可能需要更改三个地方:本地连接0007002622D90EFC注意:你必须打开注册表编辑器来找出你需要将0007参数更改为什么。MAC地址有一些规则:第二位必须是以下数字之一:0 2 6 A E。

你可能需要使用一个名为recoverMac.bat的文件。

@echo off
netsh interface set interface "Local Area Connection" disable
reg delete HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007 /v NetworkAddress /f
netsh interface set interface "Local Area Connection" enable
echo Ok,enjoy it :)

4

在批处理文件中执行以下命令:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0001 /v NetworkAddress /d 0123456789AB

使用你的接口编号替换0001,并将所需的网络地址替换为0123456789AB


它不会改变MAC地址。 - ilhan

3
这是在Windows 7上更改MAC地址的确定批处理文件: 像这个问题的(误导性)标题一样,它缺少随机部分(留作一个练习来替换set /p为调用生成器标签)。有了所有这些拒绝服务回来,很方便...
:: Change MAC script by bobdynlan, release 1
:: For each network adapter it will list RegPath, GUID, Name, previous modified MAC if exists
:: Then you can input new MAC, clear previous MAC by inputting 0 or skip by pressing [Enter]
:: You can paste directly from ipconfig or wireshark because : < > { } [ ] - ( ) . will be filtered out
:: Note that for wireless in Win7 standard drivers has to start with 02... 06... 0A... 0E...
@ECHO OFF &SET /A RLINE=1 &SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /F "tokens=3*" %%I IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" /S^|FINDSTR /I /L "REG_SZ"') DO (
SET /A RLINE+=1 &SET /A PARITY=!RLINE!^%%2
IF !PARITY! EQU 0 (SET "ADAPTERGUID=%%I") ELSE (
SET "ADAPTERNAME=%%I %%J"
FOR /F %%A IN ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" /F "!ADAPTERGUID!" /D /E /S ^|FINDSTR /I /L /V "Linkage"^|FINDSTR /I /L "\\Class\\"') DO SET "REGPATH=%%A"
CLS &echo       Change MAC script by bobdynlan, release 1 &echo. &echo     RegPath = !REGPATH!  &echo     GUID = !ADAPTERGUID!  &echo     Adapter name = !ADAPTERNAME!
REG QUERY "!REGPATH!" /V "NetworkAddress" 2>&1 |FINDSTR /I /L "NetworkAddress"
SET "CHANGEMAC=" &SET "RESETMAC="
echo. &echo  Enter MAC address for this adapter [0 to reset it] or press [Enter] to skip: &SET /P "CHANGEMAC="
IF "!CHANGEMAC!"=="0" (SET "RESETMAC=Y" &SET "CHANGEMAC=") ELSE SET "RESETMAC="
IF DEFINED CHANGEMAC SET "CHANGEMAC=!CHANGEMAC: =!" &FOR %%I IN (: ^< ^> { } [ ] - ^( ^) .) DO SET "CHANGEMAC=!CHANGEMAC:%%I=!"
IF DEFINED CHANGEMAC REG ADD "!REGPATH!" /F /V NetworkAddress /T REG_SZ /D !CHANGEMAC! >nul 2>&1
IF DEFINED RESETMAC REG DELETE "!REGPATH!" /F /V NetworkAddress >nul 2>&1
))
IF DEFINED CHANGEMAC FOR /F "tokens=2,4*" %%I IN ('netsh interface show interface^|FINDSTR /I /L "Enabled"') DO (
netsh interface set interface %%J DISABLED
netsh interface set interface %%J ENABLED
)

ChangeMAC.bat

这个批处理脚本已经进行了更好的格式化,并且所有可执行文件都引用了它们的完全限定文件名,以及其他一些小的变化,产生了与上面由Bob Dynlan编写的更紧凑的批处理文件相同的执行行为。

:: Change MAC script by bobdynlan, release 1
:: For each network adapter it will list RegPath, GUID, Name, previous modified MAC if exists
:: Then you can input new MAC, clear previous MAC by inputting 0 or skip by pressing [Enter]
:: You can paste directly from ipconfig or wireshark because : < > { } [ ] - ( ) . will be filtered out
:: Note that for wireless in Win7 standard drivers has to start with 02... 06... 0A... 0E...
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
SET "RLINE=1"
FOR /F "tokens=3*" %%I IN ('%SystemRoot%\System32\reg.exe QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" /S ^| %SystemRoot%\System32\findstr.exe /I /L "REG_SZ"') DO (
    SET /A RLINE+=1
    SET /A PARITY=RLINE %% 2
    if !PARITY! EQU 0 (
        SET "ADAPTERGUID=%%I"
    ) ELSE (
        SET "ADAPTERNAME=%%I %%J"
        FOR /F %%J IN ('%SystemRoot%\System32\reg.exe QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" /F "!ADAPTERGUID!" /D /E /S ^|FINDSTR /I /L /V "Linkage" ^| %SystemRoot%\System32\findstr.exe /I /L "\\Class\\"') DO SET "REGPATH=%%J"
        CLS
        ECHO Change MAC script by bobdynlan, release 1
        ECHO(
        ECHO     RegPath = !REGPATH!
        ECHO     GUID = !ADAPTERGUID!
        ECHO     Adapter name = !ADAPTERNAME!
        %SystemRoot%\System32\reg.exe QUERY "!REGPATH!" /V "NetworkAddress" 2>&1 | %SystemRoot%\System32\findstr.exe /I /L "NetworkAddress"
        SET "CHANGEMAC="
        SET "RESETMAC="
        ECHO(
        ECHO Enter MAC address for this adapter [0 to reset it] or press [Enter] to skip:
        SET /P "CHANGEMAC="
        IF "!CHANGEMAC!" == "0" (
            SET "RESETMAC=Y"
            SET "CHANGEMAC="
        ) ELSE SET "RESETMAC="
        IF DEFINED CHANGEMAC (
            SET "CHANGEMAC=!CHANGEMAC: =!"
            FOR %%K IN (: ^< ^> { } [ ] - ^( ^) .) DO SET "CHANGEMAC=!CHANGEMAC:%%K=!"
        )
        IF DEFINED CHANGEMAC %SystemRoot%\System32\reg.exe ADD "!REGPATH!" /F /V NetworkAddress /T REG_SZ /D !CHANGEMAC! >nul 2>&1
        IF DEFINED RESETMAC %SystemRoot%\System32\reg.exe DELETE "!REGPATH!" /F /V NetworkAddress >nul 2>&1
    )
)
IF DEFINED CHANGEMAC FOR /F "tokens=2,4*" %%I IN ('%SystemRoot%\System32\netsh.exe interface show interface ^| %SystemRoot%\System32\findstr.exe /I /L "Enabled"') DO (
    %SystemRoot%\System32\netsh.exe interface set interface %%J DISABLED
    %SystemRoot%\System32\netsh.exe interface set interface %%J ENABLED
)
ENDLOCAL

2
您可以使用Technitium MAC Address更改器命令行来完成此操作。您只需要在目标计算机上安装它即可。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接