#!/usr/bin/perl
use warnings;
use strict;
sub usage {
"usage: $0 [device] <mac_address>\n".
" device - a valid ethernet device\n".
" mac_address - the MAC address to use <optional>\n".
" - a random MAC will be used if none is specified\n"
}
sub run_as_root { $< == 0 }
sub valid_dev { $_ = shift; -r "/sys/class/net/$_" }
sub valid_mac { $_ = shift; !defined || /^(?:[\da-f]{2}(?(?!$):)){6}$/i }
my $dev = shift @ARGV or die usage();
my $mac = shift @ARGV;
if (@ARGV) { die usage() };
die "Must be run as root!\n" unless run_as_root();
die "Invalid ethernet device!\n" unless valid_dev($dev);
die "Invalid MAC address!\n" unless valid_mac($mac);
system "ifconfig $dev down";
defined $mac
? system "macchanger -m $mac $dev"
: system "macchanger -A $dev";
system "ifconfig $dev up";