Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
craig
GitHub Repository: craig/ge.mine.nu
Path: blob/master/website/code/randmac
100 views
#!/bin/bash
# randmac - Script that gives your interface a new MAC-Address.
# It's useful if you've cloned your VMWare Images and wonder why you
# have problems reaching the VMs (they have the same MAC adresses).
#
# If you plan changing your MAC regularly, have a look at ifswitch
# (http://ge.mine.nu/ifswitch.html)
#
# randmac is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# randmac is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with randmac; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
# Copyright (c) 2006 by Stefan Behte
#
#
# To run this on startup do:
#
# SLES9 / SuSE:
# wget http://ge.mine.nu/code/randmac -O /etc/init.d/randmac
# chmod +x /etc/init.d/randmac
# cd /etc/init.d/rc3.d
# ln -S ./S99randmac ../randmac
#
# Gentoo:
# wget http://ge.mine.nu/code/randmac -O /etc/init.d/randmac
# chmod +x /etc/init.d/randmac
# echo "/etc/init.d/randmac" >> /etc/conf.d/local.start
#
# Debian / Ubuntu: 
# wget http://ge.mine.nu/code/randmac -O /etc/init.d/randmac
# chmod +x /etc/init.d/randmac
# echo "/etc/init.d/randmac" >> /etc/init.d/rc.local
# chmod 755 /etc/init.d/rc.local
# ln -s /etc/init.d/rc.local /etc/rcS.d/S99rc.local
#

rndmac()
{
 if [ "$1" != "" ]
 then
  newmac="$1"
  j=2
 else
  newmac=
  j=0
 fi

 while [ 1 ]
 do
  if [ "${#newmac}" = "17" ]		# a mac has 6 bytes + 5 delimiters -> 17 chars -> 00:11:22:33:44:55
  then
   break
  fi

  if [ "$j" = "2" ]
  then
   newmac="${newmac}":
   j=0
  fi

  nr=$[$RANDOM % 16]
  if [ "$nr" -lt 10 ]; then newmac="${newmac}${nr}"; fi
  if [ "$nr" = "10" ]; then newmac="${newmac}a"; fi
  if [ "$nr" = "11" ]; then newmac="${newmac}b"; fi
  if [ "$nr" = "12" ]; then newmac="${newmac}c"; fi
  if [ "$nr" = "13" ]; then newmac="${newmac}d"; fi
  if [ "$nr" = "14" ]; then newmac="${newmac}e"; fi
  if [ "$nr" = "15" ]; then newmac="${newmac}f"; fi
  j=$[$j + 1]

 done
 echo "$newmac"
}

setmac()
{
	ifconfig $1 down
	ifconfig $1 hw ether `rndmac $2`
	ifconfig $1 up
}

# some network cards/routers have problems when the mac does not start with 00, so we use it as prefix:
setmac eth0 00

# dhcpcd
#
# or:
#
# ifconfig eth0 192.168.2.66
# route add default gw 192.168.2.1
# echo "nameserver 192.168.2.225" > /etc/resolv.conf