Generate and Set a Random Valid MAC Address from the Command Line in OS X

May 2, 2012 - 5 Comments

Generate and set random MAC address in OS X

We’ve shown you how to generate MAC addresses randomly and then how to go about changing a MAC address in OS X Lion and OS X Mountain Lion, but why have those be two separate actions? Using the command line, you can combine the two events into a single action to generate a valid MAC and then set it immediately.

Launch the Terminal and paste the following onto a single line:

openssl rand -hex 1 | tr '[:lower:]' '[:upper:]' | xargs echo "obase=2;ibase=16;" | bc | cut -c1-6 | sed 's/$/00/' | xargs echo "obase=16;ibase=2;" | bc | sed "s/$/:$(openssl rand -hex 5 | sed 's/\(..\)/\1:/g; s/.$//' | tr '[:lower:]' '[:upper:]')/" | xargs sudo ifconfig en0 ether

There is no confirmation or output, the MAC address is set immediately which you can verify with the following command:

ifconfig en0 |grep ether

You will probably need to reconnect to the wireless router after issuing the command, and in some cases turn wi-fi on and off again.

If you intend on using this often, setting up an alias in .bash_profile would be a good idea to avoid having to cut and paste the massive block of text.

Thanks to osmium for the great tip

Enjoy this tip? Subscribe to the OSXDaily newsletter to get more of our great Apple tips, tricks, and important news delivered to your inbox! Enter your email address below:

Related articles:

Posted by: William Pearson in Command Line, Mac OS, Tips & Tricks


» Comments RSS Feed

  1. Hidayat says:

    how to change nokia n8 mac address

  2. Tiristore says:

    Can you explain me better (step by step…) hot to set up an alias and use .bash_profile? Do I have to do it with terminal?
    I’m really confused!

  3. Matt says:

    You should change ‘sed ‘s/$/00/” to ‘sed ‘s/$/10/” above so that the locally-administered bit is set. This is exactly what this bit is reserved for.

  4. MBH says:

    Here’s a more compact way to generate the MAC address:

    perl -e ‘printf “%02x:”x 5 .”%02x\n”, int(rand(64))*4, map {int(rand(256))}(1..5)’

    Be sure to keep the spaces around the first 5. You can add the trailing “| xargs …” from the other example to set your address.

  5. Shenbo says:

    I turned it into a bash script and tossed it into /usr/local/bin/ for easy access, couldn’t escape the characters properly to insert it into an alias. Thanks for the tip.

Leave a Reply


Shop on and help support OSXDaily!

Subscribe to OSXDaily

Subscribe to RSS Subscribe to Twitter Feed Follow on Facebook Subscribe to eMail Updates

Tips & Tricks


iPhone / iPad



Shop on Amazon to help support this site