macOS でターミナルを使って自分のMAC アドレスを変更する方法


それぞれの macOS 機器に割り当てられた固有の MAC (Media Access Control) アドレスをターミナルを使って変更する方法を紹介します.

僕は正直 MAC アドレスを変更する必要性はあまり感じられないのですが, なんらかの理由でMAC アドレスを変更されたいという方がおられるかもしれないということと, 将来的に自分が変更する必要性に迫られるかもしれないということ, あと単に興味本位ということで, どのようにすれば macOS で自分の MAC アドレスを変更することができるのかということを調べてみました.

MAC アドレスを変更する行為は MAC Spoofing とも言われており, 正当な理由で変更する場合には何ら問題はないのですが, 何かの不正行為を行うために MAC アドレスを変更されるということは, 言うまでもないのですがお控えいただければと思います.

そのようなことにご考慮していただけた上で, お読みいただければ幸いです.

MAC アドレスを変更する手順

手順を説明する上での macOS のバージョンは 10.13.5 になります.

インターフェースを特定する

MAC アドレスはそれぞれのネットワークインターフェースに割り当てられていますので, MAC アドレスを変更する場合, まずその変更する MAC アドレスと紐付いているインターフェースを特定する必要があります.

特定するためにまずターミナルを開き, 次のコマンドを打ちます:

$ networksetup -listallhardwareports

Hardware Port: Wi-Fi
Device: en0
Ethernet Address: ac:bc:32:9c:f5:c1

Hardware Port: Bluetooth PAN
Device: en3
Ethernet Address: ac:bc:32:9c:f5:c2

Hardware Port: Thunderbolt 1
Device: en1
Ethernet Address: 6a:00:00:fd:94:80

Hardware Port: Thunderbolt 2
Device: en2
Ethernet Address: 6a:00:00:fd:94:81

Hardware Port: Thunderbolt Bridge
Device: bridge0
Ethernet Address: 6a:00:00:fd:94:80

このような情報が表示されるので, 僕の場合, Wi-Fi の MAC アドレスを変更する場合は en0 という名前のインターフェースになり, Thunderbolt の MAC アドレスを変更する場合は en1 もしくは en2 になります.

僕は普段 Wi-Fi しか使っていないので, en0 の MAC アドレスを変更したいと思います .

ちなみに en0 のオリジナルの MAC アドレスは ac:bc:32:9c:f5:c1 ということがその情報からわかります. Ethernet Address というのは MAC アドレスのことを指しているからです.

MAC アドレスを変更する

en0 の MAC アドレスを変更する場合, 次のコマンドになるのですが:

sudo ifconfig en0 <mac-address>

新しく割り当てる MAC アドレス <mac-address> を指定する必要があります.

MAC アドレスは : で区切られた 6 つの 2 桁の 16 進数から成り, 最初部分の 16 進数の LSB (Least Significant Bit) と呼ばれる一番右側の数字を 0 にする必要があります.

手動でもいいのですが, 少し面倒なので opensslsed を使って MAC アドレスをランダムに生成したいと思います:

$ openssl rand -hex 6 | sed -E 's/(..)/\1:/g; s/./0/2; s/.$//'
60:d2:48:2f:39:64

出力された 06:3b:53:22:d0:29 をコピペしてもいいのですが, 僕は面倒くさがりなので, opensslsed によって生成される MAC アドレスを xargs で直接 ifconfig の引数として渡して MAC アドレスを変更したいと思います.

その際あらかじめ airport で現在接続中の SSID を切断し, ifconfig で MAC アドレスを変更後, networksetup でその SSID を <ssid> に指定し再接続します:

$ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --disassociate
$ openssl rand -hex 6 | sed -E 's/(..)/\1:/g; s/./0/2; s/.$//' | xargs sudo ifconfig en0 ether
$ networksetup -setairportnetwork en0 <ssid>

次のコマンドで変更された新しい MAC アドレスを確認できます:

$ ifconfig en0 ether | grep ether
        ether 10:45:49:5d:8c:06

オリジナルの MAC アドレスに戻す

ifconfig で変更する前のオリジナルの MAC アドレスに戻したいという場合, 次のコマンドで Wi-Fi のオリジナルの MAC アドレスが表示されるので:

$ networksetup -getmacaddress Wi-Fi
Ethernet Address: ac:bc:32:9c:f5:c1 (Hardware Port: Wi-Fi)

その MAC アドレスをコピペしてもいいのですが, awk でそのオリジナルの MAC アドレスのみ取得し, 先ほどと同じ要領で xargsifconfig に渡し, オリジナルの MAC アドレスに戻すことができます:

$ networksetup -getmacaddress Wi-Fi | awk '{ print $3 }' | xargs sudo ifconfig en0 ether
$ ifconfig en0 ether | grep ether
        ether ac:bc:32:9c:f5:c1

もしくは macOS を再起動すると, オリジナルの MAC アドレスに戻ります.

まとめ

MAC アドレスを変更する必要性は僕は今の所あまり感じられないというか, 必要になる状況がよくわからないのですが, もし MAC アドレスを変更されたいという場合は, 今回の記事を参考にしていただけたらと思います.

結構シェルコマンドを多用してしまったので, 馴染みのない方には内容が分かり難かったかと思います.

そう言う意味では少しお読みになられる方が絞られてしまったかもしれません.

もし MAC アドレスを変更する必要がなくても, 興味のある方は僕みたいに興味本位で変更されてみるのもいいかもしれないです.