
1. 為什么你會(huì)需要改MAC地址先把原理講明白先說(shuō)結(jié)論Mac OS系統(tǒng)修改MAC地址這件事本身并不復(fù)雜復(fù)雜的是你為什么要改、改了之后會(huì)遇到什么坑。我在實(shí)際幫人排查網(wǎng)絡(luò)問題時(shí)發(fā)現(xiàn)很多朋友一聽到“改MAC地址”就以為是黑客行為其實(shí)完全不是這么回事。MAC地址Media Access Control Address是網(wǎng)卡的物理地址可以理解為網(wǎng)卡出廠時(shí)自帶的“身份證號(hào)”。它在局域網(wǎng)里承擔(dān)著設(shè)備識(shí)別的職責(zé)路由器、交換機(jī)依靠它來(lái)區(qū)分同一網(wǎng)絡(luò)里的不同設(shè)備。每一塊網(wǎng)卡在生產(chǎn)時(shí)會(huì)被分配一個(gè)全球唯一的MAC地址但注意這個(gè)“唯一”是指出廠狀態(tài)下的唯一它是可以被軟件層修改的。那什么場(chǎng)景下普通人需要改MAC地址我遇到的常見情況有這么幾種第一某些公共網(wǎng)絡(luò)或校園網(wǎng)做了MAC綁定換了一臺(tái)電腦或者換了網(wǎng)卡之后原來(lái)的MAC地址不被識(shí)別導(dǎo)致無(wú)法上網(wǎng)第二做網(wǎng)絡(luò)調(diào)試、抓包分析時(shí)需要偽裝成某個(gè)特定的設(shè)備來(lái)復(fù)現(xiàn)問題第三虛擬機(jī)場(chǎng)景比如你在Mac上裝了VMware或Parallels虛擬機(jī)默認(rèn)會(huì)生成一個(gè)隨機(jī)MAC地址有時(shí)候需要手動(dòng)指定成固定值否則每次啟動(dòng)都可能變化影響網(wǎng)絡(luò)授權(quán)軟件的注冊(cè)第四隱私保護(hù)不想讓公共Wi-Fi記錄你的真實(shí)設(shè)備標(biāo)識(shí)。這類需求在實(shí)際運(yùn)維和開發(fā)工作中非常普遍。光是“mac地址怎么查”“修改mac地址”這兩個(gè)關(guān)鍵詞幾乎每周都有人搜說(shuō)明很多人卡在入口環(huán)節(jié)。這篇博文就把從查詢到修改再到永久生效和避坑的完整鏈路全部過(guò)一遍。在我開始前先把最重要的一句安全提示放在最前面修改MAC地址本身是合法的技術(shù)操作但它不應(yīng)該被用來(lái)逃避網(wǎng)絡(luò)管理、繞過(guò)認(rèn)證偷用他人網(wǎng)絡(luò)或者做任何侵犯他人權(quán)益的事情。合法合規(guī)地去解決自己的設(shè)備接入問題才是正確姿勢(shì)。2. 動(dòng)手前先確認(rèn)現(xiàn)狀你的Mac當(dāng)前MAC地址是什么不搞清楚“現(xiàn)在是什么”就去改“想要變成什么”十有八九會(huì)把網(wǎng)絡(luò)搞到不可用。我第一次改MAC地址的時(shí)候就是太心急改完發(fā)現(xiàn)上不了網(wǎng)又不知道原地址是多少只好重啟網(wǎng)卡慢慢試特別被動(dòng)。2.1 圖形界面查詢法最容易上手先來(lái)最直觀的方法。Mac OS系統(tǒng)里你可以在菜單欄左上角點(diǎn)擊蘋果圖標(biāo)選擇“系統(tǒng)設(shè)置”然后在搜索框直接輸入“網(wǎng)絡(luò)”或者依次點(diǎn)擊“網(wǎng)絡(luò)”選項(xiàng)。在“網(wǎng)絡(luò)”設(shè)置里選中當(dāng)前正在使用的網(wǎng)絡(luò)服務(wù)比如Wi-Fi或者以太網(wǎng)然后點(diǎn)擊“詳細(xì)信息”。在彈出的窗口里你會(huì)看到“硬件”或“MAC地址”這樣的標(biāo)簽下面那串形如88:66:5a:xx:xx:xx的六組十六進(jìn)制字符就是這塊網(wǎng)卡的物理地址。這里有個(gè)容易忽略的細(xì)節(jié)一臺(tái)Mac可能有多塊網(wǎng)卡Wi-Fi網(wǎng)卡和以太網(wǎng)網(wǎng)卡各有一個(gè)MAC地址藍(lán)牙網(wǎng)卡也有一個(gè)。你查詢的時(shí)候要看準(zhǔn)當(dāng)前你用的是哪條鏈路。很多人改完Wi-Fi的MAC地址結(jié)果發(fā)現(xiàn)不生效一看原來(lái)自己用的是有線網(wǎng)絡(luò)改錯(cuò)對(duì)象了。2.2 終端命令查詢法一條命令看清所有網(wǎng)卡圖形界面雖然直觀但信息不夠全。如果你想一次性看清所有網(wǎng)絡(luò)接口終端是更好的選擇。打開“啟動(dòng)臺(tái)”里的“其他”文件夾找到“終端”應(yīng)用輸入下面這個(gè)命令ifconfig這條命令會(huì)把Mac上所有網(wǎng)絡(luò)接口的信息都列出來(lái)。其中en0通常是Wi-Fi接口en1或en2可能對(duì)應(yīng)其他接口或雷電網(wǎng)卡en0后面那行ether 88:66:5a:xx:xx:xx就是MAC地址。如果你只想看某一塊網(wǎng)卡的信息可以精確指定接口名ifconfig en0如果你是Intel芯片的老款Mac可能還會(huì)看到en1、en2這些具體哪個(gè)對(duì)應(yīng)哪塊網(wǎng)卡可以用下面這套組合命令來(lái)識(shí)別networksetup -listallhardwareports這條命令會(huì)列出所有硬件端口和對(duì)應(yīng)的MAC地址比如“Wi-Fi”對(duì)應(yīng)en0旁邊就是它的MAC地址。和ifconfig配合使用就不會(huì)搞混了。2.3 查詢時(shí)順便記錄原始值這個(gè)習(xí)慣特別重要強(qiáng)烈建議你在修改之前把當(dāng)前每個(gè)網(wǎng)卡的原始MAC地址記錄下來(lái)。最好的方式是新建一個(gè)文本備忘錄存成類似這樣的格式MacBook Pro 15寸 (2021款) Wi-Fi (en0)88:66:5a:1a:2b:3c 以太網(wǎng) (en1)none無(wú) 藍(lán)牙a4:83:e7:xx:xx:xx 修改日期2025年xx月xx日這個(gè)習(xí)慣看起來(lái)多余但真的能救命。尤其是當(dāng)你改了MAC地址之后發(fā)現(xiàn)某個(gè)服務(wù)無(wú)法訪問需要快速恢復(fù)原狀的時(shí)候沒有這份記錄就只能瞎猜。我自己的做法是同時(shí)截圖保存“網(wǎng)絡(luò)設(shè)置”里那個(gè)詳細(xì)信息頁(yè)面雙保險(xiǎn)。3. 三種修改方式詳解從臨時(shí)到永久按需選擇Mac OS系統(tǒng)修改MAC地址的方式核心原理都是一樣的用ifconfig命令加上ether參數(shù)指定一個(gè)新的MAC地址然后讓網(wǎng)卡重新加載。區(qū)別在于這個(gè)改動(dòng)是臨時(shí)的還是重啟之后依然生效。3.1 臨時(shí)修改一條命令快速見效如果你只是想臨時(shí)換個(gè)MAC地址馬上去另一個(gè)網(wǎng)絡(luò)環(huán)境上網(wǎng)那么直接在終端執(zhí)行下面的命令就行。假設(shè)你要把Wi-Fien0的MAC地址改成00:1a:2b:3c:4d:5esudo ifconfig en0 ether 00:1a:2b:3c:4d:5e注意命令前面有sudo因?yàn)樾薷木W(wǎng)卡硬件地址屬于系統(tǒng)級(jí)操作需要管理員權(quán)限?;剀囍笙到y(tǒng)會(huì)提示你輸入Mac的登錄密碼。輸入密碼的時(shí)候終端不會(huì)顯示任何字符這是正?,F(xiàn)象別以為鍵盤壞了。然后需要讓這個(gè)改動(dòng)應(yīng)用到網(wǎng)絡(luò)層。通常情況下斷開Wi-Fi再重新連接就能生效執(zhí)行下面的命令重置一下網(wǎng)絡(luò)接口更保險(xiǎn)sudo ifconfig en0 down sudo ifconfig en0 up這里有個(gè)值得解釋的細(xì)節(jié)為什么down和up一下就能讓MAC地址生效因?yàn)閐own會(huì)關(guān)閉這個(gè)網(wǎng)絡(luò)接口相當(dāng)于把網(wǎng)卡“物理斷電”up則是重新啟用網(wǎng)卡啟動(dòng)時(shí)會(huì)重新讀取配置。你把MAC地址改成了新值但網(wǎng)卡內(nèi)部可能還緩存著舊值通過(guò)down/up強(qiáng)制它重新加載新值才會(huì)真正落到鏈路層。執(zhí)行完之后用ifconfig en0看一下如果輸出里的ether變成了00:1a:2b:3c:4d:5e說(shuō)明修改成功。臨時(shí)方法的限制在于重啟電腦、重啟Wi-Fi、切換網(wǎng)絡(luò)都可能導(dǎo)致MAC地址恢復(fù)成原始值。這不是Mac OS系統(tǒng)故意“反修改”而是ifconfig這條命令本身就不帶持久化功能。它修改的是當(dāng)前內(nèi)核網(wǎng)絡(luò)棧里的值系統(tǒng)并沒有把新值寫進(jìn)任何配置文件里。當(dāng)網(wǎng)卡驅(qū)動(dòng)重新初始化時(shí)它還是會(huì)去讀硬件里燒錄的原始MAC地址。3.2 如何生成一個(gè)合法的MAC地址不要隨意編造這里我要特別強(qiáng)調(diào)一個(gè)新手很容易犯的錯(cuò)誤隨便編一串?dāng)?shù)字當(dāng)MAC地址。MAC地址前三個(gè)字節(jié)叫OUIOrganizationally Unique Identifier是IEEE分配給各個(gè)硬件廠商的唯一標(biāo)識(shí)。比如網(wǎng)絡(luò)搜索里經(jīng)常有人提到的00:0c:29就是VMware虛擬機(jī)的OUI前綴88:66:5a是Apple某些網(wǎng)卡的OUI前綴。LOCALLY ADMINISTERED位的作用MAC地址第一個(gè)字節(jié)的二進(jìn)制最低第二位學(xué)術(shù)上叫“本地管理位”Locally Administered bit通常寫作b2。當(dāng)這一位為1時(shí)表示這個(gè)MAC地址是本地管理地址也就是被軟件修改過(guò)的地址當(dāng)這一位為0時(shí)表示是廠商出廠的全球唯一地址。你手動(dòng)改MAC地址本質(zhì)上就是把b2置1。實(shí)際操作中如果你要編造假M(fèi)AC地址最好遵守一個(gè)規(guī)則第一個(gè)字節(jié)的第二個(gè)十六進(jìn)制字符不能是0、4、8、c這些偶數(shù)。舉例來(lái)說(shuō)02:00:00:00:00:01就是一個(gè)合法的本地管理地址而00:1a:2b:3c:4d:5e雖然也能用但它碰巧撞上了某個(gè)廠商的OUI雖然極小概率但有可能導(dǎo)致網(wǎng)絡(luò)設(shè)備把它當(dāng)成特定廠商的硬件來(lái)處理某些嚴(yán)格的安全策略可能會(huì)因此攔截。更推薦的做法是使用Linux或Mac系統(tǒng)里常見的openssl命令來(lái)生成隨機(jī)MAC地址openssl rand -hex 6 | sed s/\(..\)/\1:/g; s/:$//這條命令會(huì)生成一個(gè)隨機(jī)的6字節(jié)十六進(jìn)制值并按xx:xx:xx:xx:xx:xx的格式輸出。生成出來(lái)的前兩三位不一定是本地管理位所以你可以手動(dòng)把第二位改成2、6、a或e比如第一組如果是3a:...改成2a:...那么它就是一個(gè)標(biāo)準(zhǔn)的本地管理隨機(jī)地址。3.3 永久修改寫一個(gè)自啟動(dòng)腳本徹底解放雙手如果你需要MAC地址長(zhǎng)期固定比如虛擬機(jī)軟件需要固定授權(quán)或者你經(jīng)常在同一個(gè)綁定MAC的Wi-Fi環(huán)境里工作那么“每次開機(jī)手動(dòng)改”就太蠢了。Mac OS系統(tǒng)沒有提供像Linux的macchanger那樣的一鍵工具但你完全可以借助系統(tǒng)自帶的 launchd 機(jī)制來(lái)實(shí)現(xiàn)開機(jī)自動(dòng)修改。原理一句話Mac OS系統(tǒng)啟動(dòng)時(shí)launchd 會(huì)根據(jù)/Library/LaunchDaemons/目錄下的配置文件自動(dòng)啟動(dòng)對(duì)應(yīng)的后臺(tái)服務(wù)。我們創(chuàng)建一個(gè)腳本讓它開機(jī)后自動(dòng)把指定網(wǎng)卡的MAC地址改掉再把這個(gè)腳本注冊(cè)成LaunchDaemon就能實(shí)現(xiàn)永久生效。具體步驟如下。第一步創(chuàng)建修改腳本。用文本編輯器新建一個(gè)文件寫入以下內(nèi)容#!/bin/bash ifconfig en0 ether 00:1a:2b:3c:4d:5e注意把en0換成你自己的Wi-Fi接口名把00:1a:2b:3c:4d:5e換成你計(jì)劃使用的MAC地址。保存文件到/usr/local/bin/change-mac.sh。如果你發(fā)現(xiàn)自己沒有/usr/local/bin目錄可以先執(zhí)行sudo mkdir -p /usr/local/bin創(chuàng)建它。然后給腳本添加可執(zhí)行權(quán)限sudo chmod x /usr/local/bin/change-mac.sh第二步創(chuàng)建LaunchDaemon配置文件。新建一個(gè)文件命名為com.local.change-mac.plist路徑放在/Library/LaunchDaemons/下。文件內(nèi)容如下?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.local.change-mac/string keyProgramArguments/key array string/bin/bash/string string/usr/local/bin/change-mac.sh/string /array keyRunAtLoad/key true/ keyStandardErrorPath/key string/tmp/change-mac.err/string keyStandardOutPath/key string/tmp/change-mac.out/string /dict /plist注意幾個(gè)關(guān)鍵字段Label是服務(wù)的唯一標(biāo)識(shí)ProgramArguments指定要執(zhí)行的命令和參數(shù)RunAtLoad設(shè)置為true表示在加載時(shí)立即執(zhí)行StandardErrorPath和StandardOutPath是日志輸出路徑排查問題的時(shí)候很有用。第三步加載服務(wù)sudo launchctl load -w /Library/LaunchDaemons/com.local.change-mac.plist執(zhí)行完這條命令系統(tǒng)就會(huì)立刻執(zhí)行一次腳本把MAC地址改成你指定的值。以后每次開機(jī)launchd 都會(huì)自動(dòng)幫你改好完全無(wú)感。如果你以后想取消開機(jī)自啟執(zhí)行sudo launchctl unload -w /Library/LaunchDaemons/com.local.change-mac.plist再把腳本文件和plist文件刪掉即可。這里我要提醒一下這個(gè)永久修改方案在新版macOS上偶爾會(huì)遇到一個(gè)問題每次開機(jī)時(shí)launchd 加載服務(wù)的時(shí)間可能早于無(wú)線網(wǎng)卡的驅(qū)動(dòng)完全初始化時(shí)間導(dǎo)致執(zhí)行ifconfig en0 ether ...時(shí)報(bào)錯(cuò)“Device not configured”。解決這個(gè)問題有個(gè)土辦法在腳本開頭加一個(gè)sleep延時(shí)比如#!/bin/bash sleep 5 ifconfig en0 ether 00:1a:2b:3c:4d:5e這樣相當(dāng)于給網(wǎng)卡驅(qū)動(dòng)留出了初始化時(shí)間。這個(gè)方法不優(yōu)雅但在實(shí)際使用中非常有效我自己的機(jī)器上就一直用著這個(gè)帶sleep 5的版本沒出過(guò)問題。4. 修改之后的驗(yàn)證與排查為什么改了沒生效我見過(guò)很多人在改完MAC地址后會(huì)陷入一個(gè)自我懷疑的循環(huán)明明改了為什么ifconfig看到的地址還是老的為什么網(wǎng)絡(luò)連不上今天就專門把這類問題一次性講透。4.1 刷新順序驗(yàn)證修改是否生效的標(biāo)準(zhǔn)流程修改完MAC地址不要急著連Wi-Fi如果已經(jīng)連上了先斷開。我建議的驗(yàn)證流程是這樣的第一步執(zhí)行修改命令然后執(zhí)行sudo ifconfig en0 down和sudo ifconfig en0 up。第二步用ifconfig en0 | grep ether查看當(dāng)前MAC地址。注意grep命令可以過(guò)濾輸出只顯示包含“ether”的那一行看起來(lái)更清爽。第三步確認(rèn)地址是你要的新值之后再連接Wi-Fi。如果連接成功說(shuō)明一切正常。如果連不上馬上用下面的思路排查。4.2 排查思路先看地址有沒有變?cè)倏淳W(wǎng)絡(luò)通不通在實(shí)際操作中修改后不生效絕大多數(shù)可以歸類為兩種情況。第一種情況地址沒變。這通常是因?yàn)槟阍谶B接Wi-Fi的同時(shí)執(zhí)行了修改命令系統(tǒng)網(wǎng)絡(luò)框架還沒有釋放對(duì)網(wǎng)卡的控制。遇到這種情況先斷開Wi-Fi再執(zhí)行sudo ifconfig en0 down、修改命令、sudo ifconfig en0 up順序絕對(duì)不能亂。還有一種可能是你改錯(cuò)接口了用了我前面第二節(jié)提到的networksetup -listallhardwareports檢查一下搞清 en0 到底是不是Wi-Fi。第二種情況地址變了但網(wǎng)絡(luò)連不上。這個(gè)問題就復(fù)雜一些。常見的原因是你新填的MAC地址格式不對(duì)比如中間的分隔符用了-而不是:或者包含了非十六進(jìn)制字符MAC地址只能包含0-9和A-F。另一個(gè)常見原因是路由器端的MAC過(guò)濾策略某些路由器只允許特定MAC地址接入你換了一個(gè)它不認(rèn)識(shí)的新MAC直接被拒之門外。還有一個(gè)需要說(shuō)明的層次問題MAC地址工作在數(shù)據(jù)鏈路層第二層IP地址工作在網(wǎng)絡(luò)層第三層。你改了MAC地址DHCP服務(wù)器會(huì)認(rèn)為來(lái)了一個(gè)新的設(shè)備在同一個(gè)局域網(wǎng)里你之前那個(gè)IP地址的綁定關(guān)系可能已經(jīng)失效。所以在MAC地址修改成功后最好再執(zhí)行一次ipconfig getpacket en0看看DHCP是否正常分配了IP地址或者干脆重新連接Wi-Fi讓系統(tǒng)重新走一遍DHCP流程。4.3 和虛擬機(jī)相關(guān)的特殊注意事項(xiàng)網(wǎng)絡(luò)搜索熱詞里有一條信息很有意思“000c29開頭的MAC地址都是虛擬機(jī)嗎”。這個(gè)問題的答案是大概率是。00:0c:29是VMware屬下的OUI前綴VMware Workstation、VMware Fusion創(chuàng)建的虛擬機(jī)默認(rèn)MAC地址都以這個(gè)開頭。你在用Vmware搭建macOS虛擬機(jī)的時(shí)候如果手動(dòng)給虛擬機(jī)指定了一個(gè)MAC地址千萬(wàn)要記住虛擬機(jī)和宿主機(jī)是兩個(gè)獨(dú)立的網(wǎng)絡(luò)實(shí)體修改宿主機(jī)比如你的MacBook的MAC地址不會(huì)影響虛擬機(jī)的MAC地址。虛擬機(jī)里改MAC地址需要在虛擬機(jī)的操作系統(tǒng)里執(zhí)行或者通過(guò)虛擬機(jī)的配置界面設(shè)置。另外在網(wǎng)絡(luò)搜索詞里還有“vsphere安全策略混雜模式mac地址更改偽傳輸”這個(gè)說(shuō)法。這是VMware虛擬網(wǎng)絡(luò)的高級(jí)話題。簡(jiǎn)單解釋一下vSphere的分布式交換機(jī)有一個(gè)安全策略默認(rèn)情況下虛擬機(jī)的MAC地址必須和虛擬交換機(jī)端口關(guān)聯(lián)的MAC地址一致否則數(shù)據(jù)包會(huì)被丟棄。如果你在虛擬機(jī)里手動(dòng)改了MAC地址卻發(fā)現(xiàn)通信異常多半是這個(gè)“MAC地址更改”策略沒有開啟。你需要在vSphere Web Client里找到對(duì)應(yīng)端口組的安全策略把“MAC地址更改”和“偽傳輸”兩個(gè)選項(xiàng)設(shè)為“接受”。這與物理機(jī)改MAC地址的原理類似但排查鏈路完全不同所以單拎出來(lái)提醒一句。4.4 一份常見問題速查表我把實(shí)際碰到過(guò)的問題整理成了表格方便大家遇到問題時(shí)快速對(duì)照問題現(xiàn)象可能原因解決方案修改后ifconfig地址沒變?nèi)匀贿B著Wi-Fi時(shí)改了地址斷開Wi-Fi按“down→改→up”順序操作修改后無(wú)法上網(wǎng)路由器開啟了MAC過(guò)濾在路由器后臺(tái)把新MAC加入白名單修改后IP地址異常DHCP租約沖突重新連接Wi-Fi或用ipconfig getpacket en0檢查重啟后地址恢復(fù)原樣用了臨時(shí)命令但沒有創(chuàng)建LaunchDaemon使用3.3節(jié)的永久修改方案地址正確但路由器不認(rèn)修改了錯(cuò)誤的網(wǎng)卡接口用networksetup -listallhardwareports確認(rèn)接口開機(jī)報(bào)錯(cuò)腳本沒執(zhí)行網(wǎng)卡驅(qū)動(dòng)未就緒腳本開頭加sleep 5針對(duì)路由器的MAC過(guò)濾如果你的路由器管理后臺(tái)有“上網(wǎng)認(rèn)證”或“設(shè)備白名單”一定要把新MAC添加進(jìn)去。另外有些企業(yè)級(jí)接入點(diǎn)還做“MAC認(rèn)證”這種環(huán)境下改MAC地址后沒法上網(wǎng)基本就是認(rèn)證服務(wù)器那邊不認(rèn)識(shí)你新地址這種場(chǎng)景建議你直接用回原始地址別給自己添堵。5. 從修改到管理把MAC地址玩明白的幾個(gè)進(jìn)階技巧MAC地址的修改本質(zhì)上是一項(xiàng)“系統(tǒng)管理手段”而不只是一個(gè)解決“能不能上網(wǎng)”的工具。掌握了基礎(chǔ)方法之后你還能做幾件更聰明的事。5.1 做一個(gè)可切換的MAC地址配置腳本如果你平時(shí)需要在多個(gè)網(wǎng)絡(luò)環(huán)境之間來(lái)回切換有些環(huán)境綁定了MAC有些環(huán)境不做限制那么每到一個(gè)地方就手動(dòng)改一次地址效率很低。我自己的做法是寫了一個(gè)簡(jiǎn)單的Shell腳本一鍵切換到指定環(huán)境設(shè)置。思路是在腳本里預(yù)置幾個(gè)目標(biāo)網(wǎng)絡(luò)的名稱和對(duì)應(yīng)的MAC地址用命令行參數(shù)來(lái)指定切換目標(biāo)。比如保存為~/bin/switch-mac.sh內(nèi)容大概是#!/bin/bash case $1 in home) MAC00:1a:2b:3c:4d:5e ;; office) MAC02:1a:2b:3c:4d:5f ;; *) echo Usage: $0 {home|office} exit 1 ;; esac sudo ifconfig en0 down sudo ifconfig en0 ether $MAC sudo ifconfig en0 up echo MAC address switched to $MAC每次切換網(wǎng)絡(luò)環(huán)境時(shí)在終端執(zhí)行./switch-mac.sh home或./switch-mac.sh office就行。當(dāng)然這里要求你提前把每個(gè)環(huán)境綁定的MAC地址搞清楚并寫入腳本。注意腳本里sudo的密碼提示第一次運(yùn)行可能還需要你在終端里輸密碼之后如果配置了sudo -v的寬限時(shí)間短時(shí)間內(nèi)不用重復(fù)輸入。5.2 恢復(fù)出廠MAC地址的兩種方式很多人在改完MAC地址后想恢復(fù)成出廠狀態(tài)結(jié)果發(fā)現(xiàn)不知道出廠值是多少。這里提供兩種可靠的方式。方式一如果你曾經(jīng)記錄了原始地址我在第2節(jié)強(qiáng)調(diào)過(guò)記錄的重要性直接執(zhí)行sudo ifconfig en0 ether 88:66:5a:xx:xx:xx然后down/up重啟網(wǎng)卡把“xx:xx:xx”替換成你記錄的原始值即可。方式二如果你沒有記錄可以重啟電腦讓網(wǎng)卡驅(qū)動(dòng)重新從硬件讀取出廠MAC地址。這種方式適用于臨時(shí)修改的場(chǎng)景重啟后就能恢復(fù)。方式三對(duì)于已經(jīng)用LaunchDaemon做了永久修改的需要先卸載LaunchDaemon再重啟電腦?;謴?fù)步驟如下sudo launchctl unload -w /Library/LaunchDaemons/com.local.change-mac.plist sudo rm /Library/LaunchDaemons/com.local.change-mac.plist sudo rm /usr/local/bin/change-mac.sh然后重啟系統(tǒng)就會(huì)使用硬件自帶的MAC地址了。5.3 數(shù)據(jù)鏈路層的那些邊界什么情況下改了也白改最后聊一點(diǎn)稍微底層的經(jīng)驗(yàn)。有朋友問為什么我的Mac連接某些公司網(wǎng)絡(luò)時(shí)MAC地址改了也沒用原因在于很多現(xiàn)代網(wǎng)絡(luò)已經(jīng)不在傳統(tǒng)局域網(wǎng)環(huán)境里工作。比如連接的是企業(yè)級(jí)網(wǎng)絡(luò)802.1X認(rèn)證不僅要校驗(yàn)MAC還要校驗(yàn)用戶名密碼和證書單純換MAC地址認(rèn)證根本過(guò)不去。再比如有些公共Wi-Fi現(xiàn)在用強(qiáng)制門戶認(rèn)證通過(guò)瀏覽器登錄后會(huì)把設(shè)備MAC和賬號(hào)綁定一段時(shí)間你中途改MAC原來(lái)的登錄狀態(tài)直接就失效了。還有一種更隱蔽的情況酷睿芯片的新款MacBook網(wǎng)卡驅(qū)動(dòng)可能自帶MAC地址隨機(jī)化功能。在系統(tǒng)設(shè)置的“Wi-Fi”里有個(gè)“私有地址”選項(xiàng)如果開著系統(tǒng)會(huì)為每個(gè)不同的網(wǎng)絡(luò)生成一個(gè)不同的MAC地址用來(lái)防止Wi-Fi服務(wù)商追蹤你的位置。這種情況下你自己手動(dòng)修改的MAC地址可能過(guò)一段時(shí)間又被系統(tǒng)新的隨機(jī)化地址覆蓋掉。如果你剛好在這種狀態(tài)下做了綁定MAC的網(wǎng)絡(luò)認(rèn)證那么建議把“私有地址”選項(xiàng)關(guān)閉再手動(dòng)設(shè)置MAC。附加一句不要把MAC地址修改當(dāng)成萬(wàn)能的隱藏手段。MAC地址只是在同一個(gè)局域網(wǎng)內(nèi)有意義離開這個(gè)廣播域路由器之間通信用的是IP地址到了公網(wǎng)上網(wǎng)站服務(wù)器看到的只是公網(wǎng)IPMAC地址壓根過(guò)不去。所以Mac用戶在公共網(wǎng)絡(luò)里擔(dān)心的隱私問題MAC地址修改能解決一部分但解決不了全部該做的基本安全防護(hù)還是得做好。6. 我在實(shí)際改動(dòng)中踩過(guò)的那些坑寫在最后技術(shù)文章寫到這里核心的操作方案已經(jīng)全部給出來(lái)了。關(guān)于MAC地址修改我還想再分享三個(gè)自己親身踩過(guò)的坑希望你們能繞開。第一個(gè)坑改完MAC地址AirDrop和其他局域網(wǎng)服務(wù)可能失聯(lián)。有一次我為了測(cè)試網(wǎng)絡(luò)綁定臨時(shí)把MacBook的MAC地址改了結(jié)果AirDrop半天找不到設(shè)備隔空投送完全失效。后來(lái)查資料才發(fā)現(xiàn)AirDrop通過(guò)藍(lán)牙和Wi-Fi雙通道發(fā)現(xiàn)設(shè)備Wi-Fi的MAC地址變了藍(lán)牙里記錄的歷史關(guān)聯(lián)關(guān)系對(duì)不上兩個(gè)通道之間就“鬧別扭”了。如果你的電腦平時(shí)常用AirDrop改完MAC地址后建議把藍(lán)牙偏好設(shè)置里的設(shè)備清理一遍或者干脆重啟一下電腦。第二個(gè)坑不要用全02:00:00:00:00:00這類過(guò)于簡(jiǎn)單的地址。雖然它是合法的本地管理地址但局域網(wǎng)里很容易出現(xiàn)地址重復(fù)尤其是公共網(wǎng)絡(luò)里其他設(shè)備也可能用類似的簡(jiǎn)化MAC一旦撞車網(wǎng)絡(luò)層面會(huì)出現(xiàn)非常奇怪的問題比如間歇性丟包、DHCP分配異常而且排查起來(lái)極其困難。生成隨機(jī)地址的時(shí)候盡量用openssl命令別圖省事亂編。第三個(gè)坑腳本文件必須用LF換行符。Windows上編輯過(guò)的腳本換行符往往是CRLF拿到Mac上執(zhí)行的時(shí)候末尾的\r會(huì)被當(dāng)成命令參數(shù)一部分導(dǎo)致“command not found”之類的奇怪報(bào)錯(cuò)。如果你用記事本或VS Code在Windows上編輯過(guò)腳本傳到Mac上之后一定先用sed -i s/\r$// 你的腳本文件把換行符清理干凈再執(zhí)行。根據(jù)我多次折騰的經(jīng)驗(yàn)最穩(wěn)妥的路徑永遠(yuǎn)是先查后改、先臨時(shí)后永久、改前記錄、改后驗(yàn)證。按照這篇博文的順序走一遍修改MAC地址這件事就能徹底變成常規(guī)操作而不是每次都需要臨時(shí)抱佛腳的“神秘技能”。如果你在操作時(shí)遇到文章里沒有覆蓋到的特殊情況也不妨先回到最基礎(chǔ)的排查思路到底是地址沒改成功還是網(wǎng)絡(luò)策略不認(rèn)你這個(gè)新地址。把這兩個(gè)問題分清楚90%的疑難雜癥都能迎刃而解。